单机示例速览

本页用于快速选择单机示例并建立自己的算法节点。需要理解导航向量场和多项式轨迹原理时,请阅读GVF 算法分段多项式轨迹

single_demo 是单机上层算法的主要示例目录。示例通过 GVF(Guidance Vector Field,导航向量场)计算期望运动方向,再把速度或姿态指令发送给 uav_controller

示例清单

脚本 轨迹 默认巡航速度/高度
circle_track.py 平面圆 15 m/s,目标高度 50 m
inclinecircle_track.py 倾斜平面与圆柱面的交线 15 m/s,参数在脚本中定义
lissajous_track.py 三维 Lissajous 曲线 15 m/s,参数在脚本中定义
poly_track.py 三维多项式轨迹 15 m/s,控制点在脚本中定义
spiraling_up.py 螺旋上升 15 m/s,高度随轨迹变化

启动方式

每种轨迹均提供固定翼、垂起固定翼和多旋翼 launch 文件,命名规则为:

<plane|vtol|rotor>_<trajectory>.launch

例如:

roslaunch single_demo plane_lissajous_track.launch
roslaunch single_demo vtol_spiraling_up.launch
roslaunch single_demo rotor_poly_track.launch

运行这些命令前,需要先在另一个终端启动对应机型的 PX4 SITL。

状态对象

示例中的 uav 类位于 single_demo/scripts/uav_lib/spawn_uav.py。常用属性包括:

属性 内容
local_pose MAVROS 本地位置 [x, y, z]
global_pose 经纬度与高度
gazebo_pose Gazebo 真值位置
local_vel 本地坐标系速度
global_vel 全局/本地里程计速度
body_vel 机体系速度
orientation 四元数姿态
state MAVROS 连接、解锁和飞行模式状态

发送控制指令:

uav_handle.control_send([vx, vy, vz], "vel")
uav_handle.control_send([roll, pitch, yaw, force], "att")

新建自己的单机算法

  1. 复制最接近需求的示例脚本并修改节点名。
  2. 保留 uav 状态对象和 control_send() 接口。
  3. 在循环中读取状态、计算期望量,并以稳定频率持续发布。
  4. single_demo/launch/ 中复制对应机型的 launch 文件,替换脚本名称。
  5. 重新执行 catkin_make,再启动 PX4 SITL 和新示例。

建议先从速度向量接口开始。只有在明确姿态定义、坐标系和纵向控制输入含义后,再直接发送姿态指令。

更完整的开发步骤见二次开发流程