控制层程序包括无人机控制、无人车控制,程序放置于Sunray_swarm/sunray_swarm/agent_control
文件夹中。
rmtt_control_node
无人机控制节点程序放置在Sunray_swarm/sunray_swarm/agent_control
文件夹中,对应的程序有rmtt_control_node.cpp
、rmtt_control.cpp
、rmtt_control.h
该节点负责无人机(Agent)的运动控制,包括位置控制、速度控制和航向控制等功能。该节点通过订阅来自运动捕捉系统(Mocap)的位置信息和速度信息,并通过发布速度控制命令来驱动无人机的运动。该节点支持多种控制模式,包括悬停、位置控制、速度控制、避障等,同时能够通过参数配置来设置控制参数和地理围栏。
启动文件截取如下:
<!-- 第1台无人机 -->
<group ns="/sunray_swarm/rmtt_1">
<!-- 启动rmtt_control_node -->
<node pkg="sunray_swarm" type="rmtt_control_node" name="rmtt_control_node_1" output="screen">
<param name="agent_id" value="1" />
<param name="agent_ip" value="192.168.25.95" />
<rosparam command="load" file="$(find sunray_swarm)/config/rmtt_params.yaml" />
</node>
</group>
rmtt_control_node
参数
agent_type
: 无人机类型,默认为1,不需要修改
agent_id
: 无人机编号,默认为1,根据实际情况指定
agent_ip
: 无人机IP地址,仅作显示,无实际作用
agent_height
: 无人机的指定飞行高度,默认为1.0米,所有的无人机飞行在指定高度,z轴暂不支持外部控制,建议设置为0.5-1.5
之间
sim_mode
: 是否开启仿真模式,默认为false,不需要修改
flag_printf
: 是否打印调试信息,默认为true。
pose_source
: 位姿输入源参数,默认为1,即从动捕获得数据,不需要修改
控制参数:
rmtt_control_param/Kp_xy
: XY方向的控制增益,默认为1.5,不需要修改rmtt_control_param/Kp_z
: Z方向的控制增益,默认为1.5,不需要修改rmtt_control_param/Kp_yaw
: 航向(Yaw)方向的控制增益,默认为0.8,不需要修改无人机飞行地理围栏参数:(根据实际情况修改,如果无人机超出该围栏,将会触发自动降落)
rmtt_geo_fence/min_x
: 地理围栏X轴最小值,默认为3.5米。rmtt_geo_fence/max_x
: 地理围栏X轴最大值,默认为3.5米。rmtt_geo_fence/min_y
: 地理围栏Y轴最小值,默认为4米。rmtt_geo_fence/max_y
: 地理围栏Y轴最大值,默认为4米。rmtt_geo_fence/min_z
: 地理围栏Z轴最小值,默认为-0.1米。rmtt_geo_fence/max_z
: 地理围栏Z轴最大值,默认为2米。LED配置参数:
led_color/r
: LED的红色分量,取值范围0-255
led_color/g
: LED的绿色分量,默认为0-255
led_color/b
: LED的蓝色分量,默认为0-255
led_color/a
: LED的Alpha色彩空间,默认为0-1
mled_text
: 点阵屏字符,默认为yundrone
rmtt_control_node
订阅的话题(部分)
~battery
(std_msgs/Float32
):无人机电池电量,来自rmtt_node
/vrpn_client_node/{agent_name}/pose
(geometry_msgs/PoseStamped
):动捕输出的无人机位姿,来自vrpn
_
client
_
node
/sunray_swarm/agent_cmd
(sunray_msgs/agent_cmd
)地面站/ORCA节点下发的控制模式指令,来自orca
_
node
或者Sunray_swarm地面站rmtt_control_node
发布的话题(部分)
/sunray_swarm/{agent_name}/agent_state
(sunray_msgs/agent_state
): 发布智能体状态~cmd_vel
(geometry_msgs/Twist
)机体系速度控制指令,发送至rmtt_node
~takeoff
(std_msgs/Empty
)起飞指令,发送至rmtt_node
~land
(std_msgs/Empty
)降落指令,发送至rmtt_node
~led
(std_msgs/ColorRGBA
) LED灯颜色,发送至rmtt_node
~mled
(std_msgs/String
)点阵屏的字符,发送至rmtt_node
关于话题/sunray_swarm/agent_cmd
中控制模式的说明
agent_cmd.msg
**,消息定义存放目录为Sunray_swarm/sunray_msgs/msg
## 自定义消息:智能体控制命令
## 消息header
std_msgs/Header header
## 智能体ID:只有指定ID的智能体才会响应该命令(注:当agent_id赋值为99时,所有智能体均响应)
uint8 agent_id
## 控制指令来源
string cmd_source
## 控制指令
uint8 control_state
## control_state枚举
## 对于无人车来说,TAKEOFF和LAND为无效指令
uint8 INIT = 0
uint8 HOLD = 1
uint8 POS_CONTROL = 2
uint8 VEL_CONTROL_BODY = 3
uint8 VEL_CONTROL_ENU = 4
uint8 TAKEOFF = 11
uint8 LAND = 12
## 期望位置、偏航角 -> 对应POS_CONTROL模式
geometry_msgs/Point desired_pos ## [m]
float32 desired_yaw ## [rad]
## 期望速度 -> 对应VEL_CONTROL_BODY和VEL_CONTROL_ENU模式
geometry_msgs/Twist desired_vel
agent_id
为当前话题需要控制的无人机ID
control_state
为控制模式
智能体控制模式 | 解释 |
---|---|
INIT | 初始化 |
HOLD | 悬停模式,保持当前位置不变 |
POS_CONTROL | 惯性系位置控制:根据desired_pos 和desired_yaw 指定期望位置 |
VEL_CONTROL_BODY | 车体系速度控制:根据desired_vel 指定期望速度 |
VEL_CONTROL_ENU | 惯性系速度控制:根据desired_vel 指定期望速度 |
TAKEOFF | 起飞模式,发布无人机起飞状态 |
LAND | 降落模式,发布无人机起飞状态 |
关于话题/sunray_swarm/{agent_name}/agent_state
的说明
agent_state.msg
,消息定义存放目录为Sunray_swarm/sunray_msgs/msg
## 自定义消息:智能体状态
## 消息header
std_msgs/Header header
## 基本状态
uint8 agent_type ## 智能体类型
uint8 agent_id ## 智能体编号
string agent_ip ## 智能体IP
bool connected ## 是否连接上智能体驱动
bool odom_valid ## 是否收到动捕数据
## 智能体位置、速度、姿态
float32[3] pos ## [m]
float32[3] vel ## [m/s]
float32[3] att ## [rad]
geometry_msgs/Quaternion attitude_q ## 四元数
## 智能体电池状态
float32 battery ## [0-1]
## 智能体当前执行的控制状态
uint8 control_state
## agent_type枚举
uint8 RMTT = 0
uint8 UGV = 1
ugv_control_node
无人机控制节点程序放置在Sunray_swarm/sunray_swarm/agent_control
文件夹中,对应的程序有ugv_control_node.cpp
、ugv_control.cpp
、ugv_control.h
该节点负责无人车的运动控制,包括位置控制、速度控制和航向控制等功能。该节点通过订阅来自运动捕捉系统(Mocap)的位置信息和速度信息,并通过发布速度控制命令来驱动无人机的运动。该节点支持多种控制模式,包括悬停、位置控制、速度控制等,同时能够通过参数配置来设置控制参数和地理围栏。
启动文件截取如下:
<!-- 启动ugv_control_node -->
<node pkg="sunray_swarm" type="ugv_control_node" name="ugv_control_node" output="screen">
</node>
ugv_control_node
参数
agent_type
: 智能体类型,默认为2,不需要修改agent_id
: 智能体编号,默认为1,根据实际情况指定agent_ip
: 智能体IP地址,仅作显示,无实际作用sim_mode
: 是否开启仿真模式,默认为false,不需要修改flag_printf
: 是否打印调试信息,默认为true。pose_source
: 位姿输入源参数,默认为1,即从动捕获得数据,不需要修改ugv_control_param/Kp_xy
: XY方向的控制增益,默认为1.5,不需要修改ugv_control_param/Kp_yaw
: 偏航方向的控制增益,默认为0.8,不需要修改ugv_control_param/max_vel_xy
: XY方向的最大速度,根据实际情况修改ugv_control_param/max_vel_yaw
: 航向(Yaw)方向的最大速度,根据实际情况修改ugv_geo_fence/min_x
: 地理围栏X轴最小值,默认为3.5米。ugv_geo_fence/max_x
: 地理围栏X轴最大值,默认为3.5米。ugv_geo_fence/min_y
: 地理围栏Y轴最小值,默认为4米。ugv_geo_fence/max_y
: 地理围栏Y轴最大值,默认为4米。ugv_geo_fence/min_z
: 地理围栏Z轴最小值,默认为-0.1米。ugv_geo_fence/max_z
: 地理围栏Z轴最大值,默认为2米。ugv_control_node
订阅的话题(部分)
~battery
(std_msgs/Float32
):无人车电池电量,来自无人车驱动节点/vrpn_client_node/{agent_name}/pose
(geometry_msgs/PoseStamped
):动捕输出的无人车位姿,来自vrpn
_
client
_
node
/sunray_swarm/ugv/agent_cmd
(sunray_msgs/agent_cmd
)地面站/ORCA节点下发的控制模式指令,来自orca
_
node
或者Sunray_swarm地面站ugv_control_node
发布的话题(部分)
/sunray_swarm/{agent_name}/agent_state
(sunray_msgs/agent_state
): 发布智能体状态关于无人车控制指令的说明
智能体控制模式 | 解释 |
---|---|
INIT | 初始化 |
HOLD | 悬停模式,保持当前位置不变 |
POS_CONTROL | 惯性系位置控制:根据desired_pos 和desired_yaw 指定期望位置 |
VEL_CONTROL_BODY | 车体系速度控制:根据desired_vel 指定期望速度 |
VEL_CONTROL_ENU | 惯性系速度控制:根据desired_vel 指定期望速度 |