菜单

控制层程序

下载

控制层程序

控制层程序包括无人机控制、无人车控制,程序放置于Sunray_swarm/sunray_swarm/agent_control文件夹中。

无人机控制节点rmtt_control_node

  • 无人机控制节点程序放置在Sunray_swarm/sunray_swarm/agent_control文件夹中,对应的程序有rmtt_control_node.cpprmtt_control.cpprmtt_control.h

  • 该节点负责无人机(Agent)的运动控制,包括位置控制、速度控制和航向控制等功能。该节点通过订阅来自运动捕捉系统(Mocap)的位置信息和速度信息,并通过发布速度控制命令来驱动无人机的运动。该节点支持多种控制模式,包括悬停、位置控制、速度控制、避障等,同时能够通过参数配置来设置控制参数和地理围栏。

  • 启动文件截取如下:

    XML 复制代码
    <!-- 第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}/posegeometry_msgs/PoseStamped):动捕输出的无人机位姿,来自vrpn_client_node
    • /sunray_swarm/agent_cmdsunray_msgs/agent_cmd)地面站/ORCA节点下发的控制模式指令,来自orca_node或者Sunray_swarm地面站
  • rmtt_control_node发布的话题(部分)

    • /sunray_swarm/{agent_name}/agent_state(sunray_msgs/agent_state): 发布智能体状态
    • ~cmd_velgeometry_msgs/Twist)机体系速度控制指令,发送至rmtt_node
    • ~takeoffstd_msgs/Empty)起飞指令,发送至rmtt_node
    • ~landstd_msgs/Empty)降落指令,发送至rmtt_node
    • ~ledstd_msgs/ColorRGBA) LED灯颜色,发送至rmtt_node
    • ~mled std_msgs/String)点阵屏的字符,发送至rmtt_node
  • 关于话题/sunray_swarm/agent_cmd 中控制模式的说明

    • 该话题为自定义消息**agent_cmd.msg**,消息定义存放目录为Sunray_swarm/sunray_msgs/msg
    Markdown 复制代码
    ## 自定义消息:智能体控制命令
    
    ## 消息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_posdesired_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
    Markdown 复制代码
    ## 自定义消息:智能体状态
    
    ## 消息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.cppugv_control.cppugv_control.h

  • 该节点负责无人车的运动控制,包括位置控制、速度控制和航向控制等功能。该节点通过订阅来自运动捕捉系统(Mocap)的位置信息和速度信息,并通过发布速度控制命令来驱动无人机的运动。该节点支持多种控制模式,包括悬停、位置控制、速度控制等,同时能够通过参数配置来设置控制参数和地理围栏。

  • 启动文件截取如下:

    XML 复制代码
     <!-- 启动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}/posegeometry_msgs/PoseStamped):动捕输出的无人车位姿,来自vrpn_client_node
    • /sunray_swarm/ugv/agent_cmdsunray_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_posdesired_yaw指定期望位置
    VEL_CONTROL_BODY 车体系速度控制:根据desired_vel指定期望速度
    VEL_CONTROL_ENU 惯性系速度控制:根据desired_vel指定期望速度
上一个
驱动层程序
下一个
集群避障程序
最近修改: 2025-03-11