动态构型下的无人机集群自主航路点飞行
同样使用 Leader-Follower 方式,本教程给出了另一个关于无人机群的自主航路点任务演示。与之前不同的是,构建了一个更复杂的任务管理层来支持动态配置, 如编队队形变化和防碰撞设计。对于开发人员, 任务管理层的模块化可以实现更加复杂的群体行为。
1.任务说明
航路点飞行任务取决于 Leader 航路点坐标的设定,由Leader 带领无人机群通过 DASA 坐标系中的这些航点坐标。 这些坐标在 yaml 文件中预定义,位于 statemachine 包的启动文件夹中。 例如,默认的航路点飞行任务室内案例在 wp_mission_indoor.yaml 中设置。 请注意,这些坐标是参照室内 DASA 坐标系定义的。 用户应该小心设置,并且建议该任务的最小场地大小为 6m*6m。
# waypoint mission
- [ 4.0, 2.5, 1.5, 0.0]
- [ 4.0, 5.5, 1.5, 90.0]
- [ 2.5, 5.5, 1.5, 180.0]
- [ 2.5, 2.5, 1.5, -90.0]
默认航点任务涉及这些动作序列:首先无人机群起飞,然后组成两排的队形。 待队形构建完成后,Leader 会带领队伍通过设定好的航路点坐标。
2.关键部件
首先,statemachine 包发布具有所需配置的 swarm 任务的请求操作。 比如构建无人机群的特定队形,请求的动作设置有预定义的队形字符串,以及无人机群的 Leader 位置。
_cur_action.config = "FORMATION_CONFIG_TWO_ROW";//config option that supported by swarm mission pkg
_cur_action.waypoint_index = _current_wp_index;
_cur_action.params.clear();
_cur_action.params.push_back(_mission_waypoints.at(_current_wp_index).pose.position.x);//x,y,z coordinates
_cur_action.params.push_back(_mission_waypoints.at(_current_wp_index).pose.position.y);
_cur_action.params.push_back(_mission_waypoints.at(_current_wp_index).pose.position.z);
其次,swarm_mission 包将响应请求的动作命令。 一个独立的编队机动类将处理队形编队配置,并为每一步输出所需的位置三元组。 控制律设计为分布式,即代理将仅利用来自邻域代理的信息来实现所需的集群队形。
第三,碰撞保护机制与控制方案同时激活,可以动态改变编队形状。
3.如何运行
Hint
DASA 代码库正在快速开发迭代中,因此建议用户参考我们产品随附的最新用户手册。
3.1 SITL 虚拟仿真
我们在目录 ~/DASA_space/catkinws_swarmdemo/scripts 中提供了启动脚本来实现3台无人机群的虚拟仿真。首先必须使用 Gazebo 引擎启动 SITL 节点:
cd ~/DASA_space/catkinws_swarmdemo/scripts/sitl
bash start_sitl_nodes_3uavs.sh
用户只有在Gazebo界面出现后才能启动其他swarm节点:
cd ~/DASA_space/catkinws_swarmdemo/scripts/sitl
bash start_wp_mission_swarm_nodes_3uavs.sh
请注意,SITL 模拟是在室外 GPS 环境中进行的,意味着在这种情况下 DASA 坐标系并未激活。
3.2 飞行测试
首先在飞行测试之前完成定位设置(参考 室内DASA系统定位进程启动)。用户远程登录这些飞行器后,可以使用以下脚本启动 3 架无人机的航路点飞行任务节点:
cd ~/DASA_space/catkinws_swarmdemo/scripts/test
bash start_indoor_wp_mission_3uavs.sh
然后可以通过将这些机器设置为offboard和解锁状态来启动任务。
4.视频演示
以下视频包含 SITL 虚拟仿真 和飞行测试的演示: