跳转到正文

FCU、RViz 与无人机起飞

本页检查飞控设备与网络,启动 fcu_core 和 RViz 自定义面板,并在完成最终安全核对后解锁、起飞。

1. 检查飞控设备和网络

如果使用串口,在容器内检查是否能访问飞控设备:

bash
ls -l /dev/ttyACM*
ls -l /dev/ttyUSB*

当前 fcu_core_launch.py 使用 /dev/ttyACM0 和波特率 460800。若实际设备号不同须先修改 launch 配置。

使用网络连接时,根据现场无人机 IP 检查连通性。例如当前 launch 中无人机 1 和 2 的地址分别包括 192.168.1.100192.168.1.29,则检查示例如下:

bash
ping -c 3 192.168.1.100

如果 Wi-Fi 模块尚未设置,请先完成配置无人机 Wi-Fi 模块,再继续启动 fcu_core

核对实际设备数量

当前 launch 会启动 fcu_bridge_001fcu_bridge_006 六个节点。飞行前必须核对无人机数量、编号、IP、串口和动捕刚体配置与现场设备保持一致。

2. 启动 fcu_core 和 RViz

另开终端 E ,进入容器:

bash
docker exec -it aiswarmlab_vrpn /bin/bash

容器内执行:

bash
cd /home/linuxbrew/swarmlab_simulator_ws
source /opt/ros/humble/setup.bash
colcon build
source install/setup.bash
ros2 launch fcu_core fcu_core_launch.py

该 launch 会启动:

  • fcu_bridge_001fcu_bridge_006
  • RViz2;
  • FanciSwarm 自定义控制面板。

成功后应满足:

  • 桌面出现 RViz2;
  • 终端 E 没有持续出现包缺失、串口或网络错误;
  • ros2 node list 出现 /fcu_bridge_001 等节点;
  • RViz 显示 FanciSwarm Control Panel

面板未显示时,在 RViz 中选择:

text
Panels -> Add New Panel -> rviz2_custom_panel/Rviz2Panel

3. ROS 2 最终检查

回到终端 D 并执行:

bash
ros2 node list | sort
ros2 topic list | sort
ros2 topic info /uav_1/pose -v
ros2 topic info /command -v

检查电池话题:

bash
ros2 topic echo --once /uav_1/battery

检查位姿仍在更新:

bash
ros2 topic echo --once /uav_1/pose

在 RViz 面板启动后,/command 应能看到控制面板发布者;在 FCU bridge 正常启动后,也应能看到对应订阅者。

严禁在以下任一情况下解锁:

  • 位姿话题不存在或已经停止更新;
  • 无人机编号与刚体名称不一致;
  • RViz/FCU 终端持续报错;
  • 电池电量不足;
  • 飞行区域内仍有人;
  • 坐标轴或机头方向尚未确认;
  • 无法执行降落或急停。

4. 使用 RViz 解锁并起飞

RViz 自定义面板的主要按钮为:

按钮/command 数据值作用
解锁1Arm
上锁2Disarm
起飞3Takeoff
降落4Land

推荐操作顺序:

  1. 最后一次确认飞行区无人、位姿正常、飞控在线。
  2. 在 RViz 的 FanciSwarm Control Panel 中点击“解锁”。
  3. 观察无人机、RViz 和终端 E 的反馈,等待 2 至 3 秒。
  4. 确认没有异常后点击“起飞”。
  5. 无人机离地后先保持低高度悬停,至少观察 5 秒。
  6. 确认位置、姿态和高度稳定后,再进入算法演示。

点击解锁后没有反应,只有三声报警音效

不要连续反复点击,按照点击解锁后无人机无法解锁进行操作。

首次真机测试

不要直接运行大范围或高速算法。出现漂移、坐标跳变、姿态异常或通信中断时,立即降落或执行现场急停。

5. 命令行备用控制

仅在 RViz 面板不可用且已经确认 /command 发布订阅关系时使用:

bash
# 解锁
ros2 topic pub --once /command std_msgs/msg/Int16 "{data: 1}"
# 起飞
ros2 topic pub --once /command std_msgs/msg/Int16 "{data: 3}"
# 降落
ros2 topic pub --once /command std_msgs/msg/Int16 "{data: 4}"
# 上锁
ros2 topic pub --once /command std_msgs/msg/Int16 "{data: 2}"

发送前建议先执行:

bash
ros2 topic info /command -v

起飞并确认悬停稳定后,进入算法与场景演示