多无人机任务自定义
目标 :在不改动项目核心逻辑的前提下,实现
✅ 自定义无人机数量与初始位置
✅ 独立指派每架无人机的目标位置("谁去哪")
结论 :仅需修改以下两个文件,其余部分无需任何改动。
一、需修改的两个文件(完整路径)
| 功能 | 文件完整路径 | 作用 |
|---|---|---|
| 1. 仿真启动配置 | swarm-playground/main_ws/src/planner/plan_manage/launch/swarm.launch |
定义启动多少架无人机、每架的初始位置 |
| 2. 任务分配逻辑 | swarm-playground/main_ws/src/Utils/assign_goals/src/assign_goals_node.cpp |
定义每架无人机飞往哪个目标点 |
✅ 这两个文件分别控制 "谁存在" 和 "谁去哪",覆盖全部需求。
二、每个文件的修改内容
1. 修改 swarm.launch
路径 :
swarm-playground/main_ws/src/planner/plan_manage/launch/swarm.launch
修改内容:
- 增减无人机数量 :添加或删除
<include>块(每个块对应一架无人机) - 设置初始位置 :修改每个
<include>中的init_x、init_y、init_z参数
示例(启动 3 架,三角形队形):
xml
<include file="$(find ego_planner)/launch/include/run_in_sim.xml">
<arg name="drone_id" value="0"/>
<arg name="init_x" value="0.0"/>
<arg name="init_y" value="0.0"/>
<arg name="init_z" value="1.0"/>
<!-- 其他参数... -->
</include>
<include file="$(find ego_planner)/launch/include/run_in_sim.xml">
<arg name="drone_id" value="1"/>
<arg name="init_x" value="5.0"/>
<arg name="init_y" value="-3.0"/>
<arg name="init_z" value="1.0"/>
<!-- 其他参数... -->
</include>
<!-- 可继续添加更多 -->
🔍 效果 :启动后系统将有 N 架无人机,ID 为
0到N-1,从指定位置起飞。
2. 修改 assign_goals_node.cpp
路径 :
swarm-playground/main_ws/src/Utils/assign_goals/src/assign_goals_node.cpp
修改内容:
- 保留 原有 RVIZ 交互回调函数(
selected_drones_cb,user_goal_cb)------可选,用于兼容旧功能 - 替换或扩展
main()函数 ,使其支持:-
从命令行参数 读取目标(推荐)
bashrosrun assign_goals assign_goals_node 0:1,2,3 1:4,5,6 -
或从文件 读取目标(如
goals.txt)
-
关键逻辑:
cpp
// 解析 "drone_id:x,y,z" 格式
// 为每个目标构造 quadrotor_msgs::GoalSet 消息
// 发布到 /goal_user2brig
🔍 效果:每架无人机将独立飞向你指定的目标,不再受"整体平移"限制。
三、为什么其他文件不用改?
| 模块 | 路径 | 原因 |
|---|---|---|
swarm_bridge |
planner/swarm_bridge/ |
仅负责按 drone_id 路由消息,不关心目标内容 |
ego_planner |
planner/ego_planner/ |
只需接收目标并规划路径,来源无关 |
uav_simulator |
uav_simulator/ |
只执行底层控制,不参与任务分配 |
| RVIZ / 地图等 | --- | 纯可视化或环境模块,与任务逻辑解耦 |
✅ ROS 的"发布-订阅"机制保证了模块间松耦合 :
只要
assign_goals发出合法的GoalSet消息,系统其余部分会自动正确响应。
四、修改后使用流程
bash
# 1. 编译(仅当修改了 .cpp 时需要)
cd swarm-playground/main_ws
catkin_make
# 2. 启动仿真(自动加载 swarm.launch 中定义的 N 架无人机)
roslaunch plan_manage swarm.launch
# 3. 发布自定义任务(例如:drone_0 去 (5,0,2),drone_1 去 (5,5,2))
rosrun assign_goals assign_goals_node 0:5,0,2 1:5,5,2
✅ 总结
只需修改两个文件:
swarm-playground/main_ws/src/planner/plan_manage/launch/swarm.launch
→ 控制 无人机数量和初始位置swarm-playground/main_ws/src/Utils/assign_goals/src/assign_goals_node.cpp
→ 控制 每架无人机的目标位置无需改动任何其他代码,即可实现完全自定义的多机任务。