动态构型下的无人机集群自主航路点飞行

../_images/snap_wp.png

同样使用 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 虚拟仿真 和飞行测试的演示: