菜单

无人机控制模块

下载

本章内容:Sunray无人机控制模块介绍与使用方式

控制模块路径与主要文件:

  • Sunray/General_Module/sunray_uav_control
  • Sunray/General_Module/sunray_uav_control/src/uav_control_node.cpp
  • Sunray/General_Module/sunray_uav_control/src/uav_control.cpp

编译控制模块

复制代码
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

启动节点

bash 复制代码
# 启动节点
roslaunch sunray_uav_control sunray_control_node.launch
/

节点话题订阅与发布

话题订阅

  • /uav1/sunray/px4_state
    • 获取PX4无人机综合状态
    • 飞控 -> mavros -> external_fusion_node -> uav_control_node
  • /uav1/sunray/rc_state
    • 获取遥控器状态,用于RC_CONTROL模式
    • 飞控 -> mavros -> rc_control_node -> uav_control_node
  • /uav1/sunray/setup
    • 接收设置指令,用于设置PX4模式与Sunray中的控制模式
    • 外部节点 -> uav_control_node
  • /uav1/sunray/uav_control_cmd
    • 接收控制指令,获取任务控制项与值
    • 外部节点 -> uav_control_node
  • /uav1/sunray/uav_waypoint
    • 接收航点信息
    • 外部节点 -> uav_control_node

话题发布

  • /uav1/mavros/setpoint_raw/local
    • 用于发布local坐标系下的控制
    • uav_control_node -> mavros -> 飞控
  • /uav1/mavros/setpoint_raw/attitude
    • 用于发布无人机姿态控制
    • uav_control_node -> mavros
  • /uav1/mavros/setpoint_raw/global
    • 用于发布经度纬度坐标系下的控制
    • uav_control_node -> mavros -> 飞控
  • /uav1/sunray/uav_state
    • 用于发布无人机整体状态
    • uav_control_node -> 其他控制&任务节点/地面站
  • /uav1/sunray/goal
    • 一个geometry_msgs::PoseStamped类型的消息,用于指定规划目标位置,与控制节点无关
    • uav_control_node -> 其他节点

ROS服务

  • /uav1//mavros/cmd/arming
    • 用于解锁上锁的ros服务
    • uav_control_node -> mavros -> 飞控
  • /uav1//mavros/set_mode
    • 用于设置PX4的ros服务
    • uav_control_node -> mavros -> 飞控
  • /uav1//mavros/cmd/command
    • 用于紧急停止与重启PX4的ros服务
    • uav_control_node -> mavros -> 飞控

运行键盘控制节点(结合地面站)

键盘控制节点能够通过按动按钮实现对无人机解锁起飞移动降落等操作,简化了对手动发布消息的过程

关于键盘控制的说明
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 水平速度+垂直位置控制 ...

bash 复制代码
# 启动节点
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
上一个
Sunray代码框架
下一个
无人机仿真模块
最近修改: 2025-06-16