这是一个面向 ROS1/Noetic 初学者的 CUADC 多旋翼任务控制教学项目。项目用纯软件模拟“侦察与救援”任务,重点是理解任务状态机、topic、service、视觉对准、投放控制、安全监控和日志记录如何配合。
本项目不是直接控制真机的代码,不包含真实 PX4/MAVROS 解锁、模式切换、电机控制、GPIO、PWM 或舵机控制。
cuadc_interfaces/
ROS msg / srv 接口包,定义节点之间通信的数据格式。
cuadc_multirotor_control_tutor/
ROS 教学 demo 主包,包含任务状态机、仿真无人机、假视觉、投放、安全、调试和日志节点。
核心文件:
cuadc_multirotor_control_tutor/docs/task_flow.md
完整任务触发流程。
cuadc_multirotor_control_tutor/cuadc_multirotor_control_tutor/mission_node.py
核心任务状态机。
cuadc_multirotor_control_tutor/launch/tutor_demo.launch
一次启动完整教学 demo。
待机
→ 调用 /mission/start
→ 安全检查
→ 模拟解锁
→ 起飞到 2.5 m
→ 飞到投放区
→ 搜索投放目标
→ 视觉对准
→ 投放第 1 瓶水
→ 投放第 2 瓶水
→ 飞到侦察区
→ 记录高置信度侦察结果
→ 返回起点
→ 降落
→ 任务结束
先看这份流程文档:
cuadc_multirotor_control_tutor/docs/task_flow.md
推荐环境:
Ubuntu 20.04
ROS Noetic
Python 3
catkin
rospy
把两个包放入 catkin 工作空间:
mkdir -p ~/cuadc_ws/src
cd ~/cuadc_ws/src
# 将 cuadc_interfaces 和 cuadc_multirotor_control_tutor 复制到这里构建:
cd ~/cuadc_ws
catkin_make
source devel/setup.bash启动完整 demo:
roslaunch cuadc_multirotor_control_tutor tutor_demo.launch另开一个终端启动任务:
source ~/cuadc_ws/devel/setup.bash
rosservice call /mission/start "{}"手动中止任务:
rosservice call /mission/abort "reason: 'manual test abort'"rostopic echo /mission/state
rostopic echo /drone/state
rostopic echo /vision/drop_target
rostopic echo /drop/status
rostopic echo /safety/statusmission_node.py
任务状态机。决定什么时候起飞、去投放区、对准、投放、侦察、返航、降落。
sim_drone_node.py
模拟无人机运动。接收位置或速度 setpoint,发布 /drone/state。
fake_vision_node.py
模拟视觉识别。发布投放目标误差和侦察区危险品识别结果。
drop_control_node.py
模拟投放机构。接收 /drop/command,发布 /drop/status。
safety_monitor_node.py
独立安全监控。检查低电量、越界、高度过高、任务超时。
control_debug_node.py
每秒打印任务总览,方便观察。
logger_node.py
保存 CSV 日志到 logs/mission_log.csv。
| 实验目标 | 文件 | 参数 |
|---|---|---|
| 让无人机飞慢一点 | cuadc_multirotor_control_tutor/config/sim_drone_params.yaml |
position_speed |
| 让低电量更快触发 | cuadc_multirotor_control_tutor/config/sim_drone_params.yaml |
battery_drain_per_second |
| 改变投放区位置 | cuadc_multirotor_control_tutor/config/mission_params.yaml |
drop_zone_x |
| 让目标搜索失败 | cuadc_multirotor_control_tutor/config/mission_params.yaml |
disable_drop_target |
| 改变视觉对准速度 | cuadc_multirotor_control_tutor/config/controller_params.yaml |
align_kx, align_ky |
| 改变安全边界 | cuadc_multirotor_control_tutor/config/safety_params.yaml |
max_x, max_abs_y, max_z |
不要直接连接真机执行本项目。真机测试必须先拆桨,保留遥控器人工接管,先在仿真中验证,自动投放测试必须远离人员。任何真机接入都必须经过单模块验证、低高度验证、边界验证、急停验证和现场安全评审。