本章内容:Sunray无人机控制模块介绍与使用方式
控制模块路径与主要文件:
编译控制模块
catkin_make --source General_Module/sunray_uav_control --build build/sunray_uav_control
在使用前需要了解Sunray的控制模块中的几种模式
- INIT:该模式在无人机处于上锁模式时会自动尝试将PX4模式更改为定点模式,初始运行时将处于该模式
- RC_CONTROL:该模式能在不退出Offboard模式下使用遥控器控制无人机,需要搭配rc_control_node节点使用
- CMD_CONTROL:该模式将响应外部发送的控制指令(通过话题发布),切换到该模式时会自动进入Offboard模式
- LAND_CONTROL:降落模式
- WITHOUT_CONTROL:该模式不参与任何控制
- 如果需要切回遥控器控制需要手动拨动遥控器上的模式切换按钮,切换到其他模式即可退出程序控制
重要参数说明
- geo_fence:地理围栏,包含x、y、z三个方向的最大最小值,超出范围无人机会降落
- flight_param:无人机飞行相关的参数
- Takeoff_height:默认起飞高度
- land_type:降落模式 1:调用px4 auto.land 0:到达指定高度后锁桨,注意在非gps模式下使用 px4 auto.land 会出问题
- Disarm_height:锁桨高度,无人机将在降落到 解锁高度 + Disarm_height 后进入最后一段降落过程
- Land_speed:无人机降落速度
- land_end_time:降落最后一段降落过程的时长 降落最后一阶段以land_end_speed的速度向下飞行land_end_time时间后锁桨
- land_end_speed:降落最后一段降落过程的速度
- home_x/home_y/home_z:默认home点 在起飞后运行程序时需要
- system_params:程序内部一些重要的参数
- use_rc_control:是否使用遥控器控制,为false的时候允许先切换到Offboard模式再解锁,适用于没有遥控的情况
- check_cmd_timeout:是否检查指令超时,在cmd_timeout时长内没有收到下一个控制指令后会自动切换到悬停
- cmd_timeout:指令超时时长
- use_offset:是否使用位置偏移模式,位置偏移模式会在无人机解锁处重置为原点(仅在程序内部实现,并不是无人机fcu状态),只对位置控制生效,适用于GPS模式的时候
- odom_valid_timeout:定位数据失效超时时间
- odom_valid_warming_time:定位警告时间 ·
接口说明
在Sunray的控制模块中通过订阅两个话题实现对无人机状态和任务的控制
- sunray/setup
消息定义:Sunray/General_Module/sunray_common/sunray_msgs/msg/UAVSetup.msg
消息说明:该消息用于对控制模块中的模式设置、解锁、上锁、停桨等操作,详细功能请阅读消息定义
- 例:执行解锁
复制代码rostopic pub /uav1/sunray/setup sunray_msgs/UAVSetup "header: seq: 0 stamp: secs: 0 nsecs: 0 frame_id: '' cmd: 1 px4_mode: '' control_state: ''" -1
- 例:切换至CMD_CONTROL
复制代码rostopic pub /uav1/sunray/setup sunray_msgs/UAVSetup "header: seq: 0 stamp: secs: 0 nsecs: 0 frame_id: '' cmd: 4 px4_mode: '' control_state: 'CMD_CONTROL'" -1
- sunray/uav_control_cmd
消息定义:Sunray/General_Module/sunray_common/sunray_msgs/msg/UAVControlCMD.msg
消息说明:该消息用于对无人机发布控制方式与对应控制项的值,详细功能请阅读消息定义
- 例:发布位置控制
复制代码rostopic pub /uav1/sunray/uav_control_cmd sunray_msgs/UAVControlCMD "header: seq: 0 stamp: {secs: 0, nsecs: 0} frame_id: '' cmd: 1 desired_pos: [1.0, 1.0, 1.0] desired_vel: [0.0, 0.0, 0.0] desired_acc: [0.0, 0.0, 0.0] desired_att: [0.0, 0.0, 0.0] desired_thrust: 0.0 desired_yaw: 0.0 desired_yaw_rate: 0.0 latitude: 0.0 longitude: 0.0 altitude: 0.0" -1
# 启动节点
roslaunch sunray_uav_control sunray_control_node.launch
键盘控制节点能够通过按动按钮实现对无人机解锁起飞移动降落等操作,简化了对手动发布消息的过程
关于键盘控制的说明
101 为无人机上解锁或上锁 回车后需要二次输入, 其中 1为解锁 0为上锁
102 为选择切换到指定的控制模式,回车后需要二次输入, 其中 1 INIT模式 2 RC_CONTROL模式 3 CMD_CONTROL模式 4 LAND_CONTROL模式 5为WITHOUT_CONTRO模式
103 为起飞、104悬停、105降落、106返航、107、执行航点(需要提前发布航点信息)、108发布一个目标点(可用于发布自主规划的目标点)
无人机在解锁后会怠速一段时间,中间如果没有其他操作的话无人机会重新上锁,所以在解锁后请立即切换到CMD_CONTROL模式,在上锁的情况下无法切换到CMD_CONTROL模式
起飞以及下面的指令任务等需要在无人机已经解锁的状态且切换到了CMD_CONTROL模式才会执行
CMD: 1 位置控制 2 速度控制 3 水平速度+垂直位置控制 ...
# 启动节点
roslaunch sunray_uav_control terminal_control.launch
# 基本使用方式
# 输入 101 回车进入选择解锁或者上锁
# 输入 1 回车 无人机解锁
# 输入 102 选择切换到指定的控制模式
# 输入 3 回车 切换到指令模式
# 输入 103 执行起飞 等待无人机起飞
# 104 悬停
# 105 降落
以下基于仿真演示
更多控制实例可根据控制台输出提示使用
在仿真场景中,可脱离遥控器限制实现控制: 当use_rc_control参数设为false时,需通过键盘控制输入 102 先切换至 Offboard 模式,再输入 101 执行解锁操作
## 启动ros
roscore
## 启动px4仿真
roslaunch sunray_simulator sunray_sim_1uav.launch
## 发送外部定位
roslaunch sunray_uav_control external_fusion.launch external_source:=2
## 启动控制节点
roslaunch sunray_uav_control sunray_control_node.launch
## 启动键盘控制节点
roslaunch sunray_uav_control terminal_control.launch