SLAM Drone — Livox Position Hold
Manual Takeoff + Offboard Hold · FAST-LIO · PX4 · slam_position_hold
Position Hold
FAST-LIO
PX4 Offboard
slam_position_hold
通过 实机验证
概述
本流程使用 slam_position_hold 控制器。它不会自动起飞,也不会向前移动。你需要在 Position 模式 下手动起飞,然后切换至 Offboard 模式,控制器会保持捕获的 XYZ 位置和偏航角。
当前 PX4 室内配置
EKF2_EV_CTRL = 1 # FAST-LIO 水平位置融合
EKF2_GPS_CTRL = 0 # GPS 融合禁用
EKF2_HGT_REF = 0 # 气压计高度参考
FAST-LIO 稳定水平位置,PX4 使用气压计和 IMU 控制高度。
警告 启动前准备
关键安全规则:
• 只使用一个控制器。不要同时运行
• 确认 RC Position、Offboard 和 Stabilized 模式开关。
• 首次飞行保持在之前测试过的低空高度。
• 确保飞行区域无障碍物。
• 不要在测试前立即更改 PX4 参数。
• 硬件或软件更改后,先进行无桨切换测试。
• 只使用一个控制器。不要同时运行
livox_offboard_takeoff 或 livox_offboard_forward。• 确认 RC Position、Offboard 和 Stabilized 模式开关。
• 首次飞行保持在之前测试过的低空高度。
• 确保飞行区域无障碍物。
• 不要在测试前立即更改 PX4 参数。
• 硬件或软件更改后,先进行无桨切换测试。
终端 1 — 启动建图、MAVROS、桥接和 rosbag
# 仅在车辆已上锁且确认不需要录制时移除旧 tmux 会话
tmux kill-session -t slam 2>/dev/null || true
# 新 MID-360S:
~/start_slam_takeoff_test_mid360s.sh
# 客户原有 MID-360:
~/start_slam_takeoff_test.sh
脚本启动:
Livox 驱动 · FAST-LIO · MAVROS · FAST-LIO-to-MAVROS 桥接 · ROS2 bag 录制
Livox 驱动 · FAST-LIO · MAVROS · FAST-LIO-to-MAVROS 桥接 · ROS2 bag 录制
保持此终端连接到 tmux。
终端 2 — 启动位置保持控制器
source /opt/ros/humble/setup.bash
source ~/slam_ws/install/setup.bash
source ~/super_ws/install/setup.bash
ros2 run drobotics_super_bridge slam_position_hold
预期行为:
• 控制器等待 MAVROS 和本地里程计
• 以约 20 Hz 预流位置设定点
• 不会解锁 PX4
• 不会更改飞行模式
• 不会启动起飞
• 选择 Offboard 时,保持捕获的位置和偏航角
• 控制器等待 MAVROS 和本地里程计
• 以约 20 Hz 预流位置设定点
• 不会解锁 PX4
• 不会更改飞行模式
• 不会启动起飞
• 选择 Offboard 时,保持捕获的位置和偏航角
保持此控制器运行。
终端 3 — 解锁前验证系统
source /opt/ros/humble/setup.bash
source ~/slam_ws/install/setup.bash
source ~/super_ws/install/setup.bash
# 检查 FAST-LIO 和桥接频率
timeout 10 ros2 topic hz /Odometry
timeout 10 ros2 topic hz /mavros/odometry/out
# 检查控制器设定点频率
timeout 6 ros2 topic hz /mavros/setpoint_position/local
# 验证只有一个设定点发布者
ros2 topic info /mavros/setpoint_position/local --verbose
# 检查 MAVROS 状态
ros2 topic echo /mavros/state --once
预期频率:
/Odometry: 约 10 Hz
/mavros/odometry/out: 约 10 Hz
/mavros/setpoint_position/local: 约 20 Hz
/Odometry: 约 10 Hz
/mavros/odometry/out: 约 10 Hz
/mavros/setpoint_position/local: 约 20 Hz
满足以下条件时不要解锁:
• /Odometry 缺失或反复停止
• 桥接输出缺失
• 设定点未以约 20 Hz 发布
• 多个飞控发布设定点
• MAVROS 断开连接
• FAST-LIO 位置在无人机静止时快速漂移
• /Odometry 缺失或反复停止
• 桥接输出缺失
• 设定点未以约 20 Hz 发布
• 多个飞控发布设定点
• MAVROS 断开连接
• FAST-LIO 位置在无人机静止时快速漂移
飞行流程
1. 将无人机放在水平地面,在 FAST-LIO 初始化期间保持静止。
2. 等待里程计和设定点频率稳定。
3. 在 RC 上选择 Position 模式。
4. 在 Position 模式下,低油门解锁无人机。
5. 手动增加油门,在 Position 模式下起飞。
6. 仅爬升到之前测试过的低空高度。
7. 稳定悬停约 5-10 秒。
8. 将油门摇杆回到中位。横滚、俯仰和偏航摇杆也回中。
9. 保持油门居中,从 Position 模式切换到 Offboard 模式。
10. 确认 QGC 显示 OFFBOARD。
11. 首次测试仅观察 5-10 秒:
• 水平位置应大致固定
• 偏航应固定
• 无人机不应主动向前移动
• 轻微高度变化是正常的(高度基于气压计)
12. 如果一切平稳,可短暂继续测试。整个测试期间手放在模式开关上。
2. 等待里程计和设定点频率稳定。
3. 在 RC 上选择 Position 模式。
4. 在 Position 模式下,低油门解锁无人机。
5. 手动增加油门,在 Position 模式下起飞。
6. 仅爬升到之前测试过的低空高度。
7. 稳定悬停约 5-10 秒。
8. 将油门摇杆回到中位。横滚、俯仰和偏航摇杆也回中。
9. 保持油门居中,从 Position 模式切换到 Offboard 模式。
10. 确认 QGC 显示 OFFBOARD。
11. 首次测试仅观察 5-10 秒:
• 水平位置应大致固定
• 偏航应固定
• 无人机不应主动向前移动
• 轻微高度变化是正常的(高度基于气压计)
12. 如果一切平稳,可短暂继续测试。整个测试期间手放在模式开关上。
正常恢复与降落
结束测试:
1. 保持油门居中。
2. 从 Offboard 切换回 Position 模式。
3. 确认无人机保持可控。
4. 将油门逐渐移到底部以下开始下降。
5. 平稳降落。
6. 触地后将油门完全拉低。
7. 如果这是你的正常上锁流程,切换至 Stabilized 模式。
8. 上锁。
1. 保持油门居中。
2. 从 Offboard 切换回 Position 模式。
3. 确认无人机保持可控。
4. 将油门逐渐移到底部以下开始下降。
5. 平稳降落。
6. 触地后将油门完全拉低。
7. 如果这是你的正常上锁流程,切换至 Stabilized 模式。
8. 上锁。
警告 不要在空中上锁。
紧急恢复
如果无人机漂移、振荡、意外改变高度,或控制器报告陈旧里程计:
1. 立即从 Offboard 切换回 Position 模式。
2. 初始保持油门接近中位——不要突然拉低。
3. 手动控制并执行受控降落。
4. 如果 Position 模式也不稳定或外部里程计已失效:
• 切换至 Stabilized 模式
• 手动控制姿态和油门
• 降落并上锁
2. 初始保持油门接近中位——不要突然拉低。
3. 手动控制并执行受控降落。
4. 如果 Position 模式也不稳定或外部里程计已失效:
• 切换至 Stabilized 模式
• 手动控制姿态和油门
• 降落并上锁
停止控制器并保存 bag
# 降落并上锁后,停止终端 2:
Ctrl-C
# 返回 tmux 终端并干净分离:
Ctrl-b
# 释放按键,然后按:
d
启动器应报告:
Stopping ROS bag...
Stopping mapping...
Stopping odometry bridge...
Stopping MAVROS...
Checking: /home/drobotics/rosbags/...
Stopping ROS bag...
Stopping mapping...
Stopping odometry bridge...
Stopping MAVROS...
Checking: /home/drobotics/rosbags/...
警告 不要在主动录制时使用
tmux kill-session 停止。# 最后确认无残留进程
pgrep -af \
'livox_ros_driver2_node|fastlio_mapping|fastlio_to_mavros|mavros_node|rosbag2_recorder' \
|| echo "PASS: no stack processes remain"
通过 测试成功标准
通过 稳定的水平位置保持
通过 立即 RC 恢复至 Position 模式
通过 干净着陆
通过 有效的 rosbag
通过 无残留堆栈进程
通过 立即 RC 恢复至 Position 模式
通过 干净着陆
通过 有效的 rosbag
通过 无残留堆栈进程
平台:Jetson · ROS2 Humble · Livox Mid360 · FAST-LIO · PX4 · slam_position_hold
(c) 卓博泰科技 · SLAM Position Hold 测试流程
(c) 卓博泰科技 · SLAM Position Hold 测试流程