单机示例速览¶
本页用于快速选择单机示例并建立自己的算法节点。需要理解导航向量场和多项式轨迹原理时,请阅读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")
新建自己的单机算法¶
- 复制最接近需求的示例脚本并修改节点名。
- 保留
uav状态对象和control_send()接口。 - 在循环中读取状态、计算期望量,并以稳定频率持续发布。
- 在
single_demo/launch/中复制对应机型的 launch 文件,替换脚本名称。 - 重新执行
catkin_make,再启动 PX4 SITL 和新示例。
建议先从速度向量接口开始。只有在明确姿态定义、坐标系和纵向控制输入含义后,再直接发送姿态指令。
更完整的开发步骤见二次开发流程。