SLAM Drone — Automatic Offboard Takeoff
自主 Offboard 起飞流程 · livox_offboard_takeoff · FAST-LIO · PX4
自主起飞
FAST-LIO
PX4 Offboard
livox_offboard_takeoff
通过 实机验证
概述
本流程使用 livox_offboard_takeoff 控制器。它不会解锁 PX4,也不会自动选择 Offboard 模式。它会预流当前的 XYZ 位置和偏航角。解锁并选择 Offboard 后,控制器会命令相对爬升 0.50 米,然后保持起飞位置。不会自动降落。
控制器参数
| 参数 | 默认值 | 说明 |
|---|---|---|
takeoff_height_m | 0.50 | 起飞高度(米) |
climb_rate_mps | 0.20 | 爬升率(米/秒) |
arm_settle_time_s | 1.00 | 解锁稳定时间(秒) |
setpoint_rate_hz | 20.0 | 设定点频率(Hz) |
odom_timeout_s | 0.50 | 里程计超时(秒) |
max_odom_jump_m | 0.75 | 最大里程计跳变(米) |
takeoff_height_m:=0.50 表示在捕获的起始局部位置上方约 0.50 米,不是 LiDAR 距地面的高度。 终端 1 — 启动堆栈和 rosbag
# 仅在无人机已上锁且无需保留 bag 时杀死旧 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 录制
保持终端 1 连接到 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 livox_offboard_takeoff \
--ros-args \
-p takeoff_height_m:=0.50 \
-p climb_rate_mps:=0.20 \
-p arm_settle_time_s:=1.00 \
-p setpoint_rate_hz:=20.0 \
-p odom_timeout_s:=0.50 \
-p max_odom_jump_m:=0.75
预期初始消息:
Waiting for MAVROS state, extended state, and local odometry.
This node will not arm PX4 or change flight mode.
Prestreaming current XYZ and yaw at 20.0 Hz.
Waiting for MAVROS state, extended state, and local odometry.
This node will not arm PX4 or change flight mode.
Prestreaming current XYZ and yaw at 20.0 Hz.
控制器必须在整个测试期间保持运行。
终端 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
# 检查 PX4 状态
ros2 topic echo /mavros/state --once
ros2 topic echo /mavros/extended_state --once
ros2 topic echo /mavros/local_position/odom --once
预期:
/Odometry: 约 10 Hz
/mavros/odometry/out: 约 10 Hz
/mavros/setpoint_position/local: 约 20 Hz
发布者: livox_offboard_takeoff
connected: true · armed: false · mode: POSCTL · landed_state: 1
/Odometry: 约 10 Hz
/mavros/odometry/out: 约 10 Hz
/mavros/setpoint_position/local: 约 20 Hz
发布者: livox_offboard_takeoff
connected: true · armed: false · mode: POSCTL · landed_state: 1
如果另一个控制器也在发布,请勿继续。
PX4 配置
EKF2_EV_CTRL = 1 # FAST-LIO 水平位置融合
EKF2_GPS_CTRL = 0 # GPS 融合禁用
EKF2_HGT_REF = 0 # 气压计高度参考
警告 不要使用
EKF2_EV_CTRL=3,垂直外部视觉融合在该车辆上不稳定。 无桨台架测试
硬件或软件更改后,在安装螺旋桨前执行此测试:
1. 启动堆栈和控制器
2. 验证 10 Hz 里程计和 20 Hz 设定点
3. 选择 Position 模式
4. 保持低油门解锁
5. 将油门移至中位
6. 等待 1-2 秒
7. 切换至 Offboard
8. 仅观察电机约 3-5 秒
9. 切换回 Position 模式
10. 将油门完全拉低并上锁
2. 验证 10 Hz 里程计和 20 Hz 设定点
3. 选择 Position 模式
4. 保持低油门解锁
5. 将油门移至中位
6. 等待 1-2 秒
7. 切换至 Offboard
8. 仅观察电机约 3-5 秒
9. 切换回 Position 模式
10. 将油门完全拉低并上锁
警告 电机转速可能会增加,因为 PX4 命令爬升但无桨车辆无法上升。不要在 Offboard 状态下长时间保持解锁。
实际自动起飞流程
1. 将无人机放在水平地面上,FAST-LIO 初始化期间保持静止。
2. 验证里程计、桥接、设定点、MAVROS 和 rosbag 状态。
3. 在 RC 上选择 Position 模式。
4. 确保油门处于低位。
5. 在 Position 模式下解锁。
6. 将油门摇杆移至中位(仍在 Position 模式下)。
7. 等待约 1-2 秒。
8. 保持横滚、俯仰、偏航和油门居中。
9. 从 Position 模式切换至 Offboard 模式。
2. 验证里程计、桥接、设定点、MAVROS 和 rosbag 状态。
3. 在 RC 上选择 Position 模式。
4. 确保油门处于低位。
5. 在 Position 模式下解锁。
6. 将油门摇杆移至中位(仍在 Position 模式下)。
7. 等待约 1-2 秒。
8. 保持横滚、俯仰、偏航和油门居中。
9. 从 Position 模式切换至 Offboard 模式。
控制器将:
• 检测解锁状态和 Offboard 模式
• 完成 1 秒解锁稳定时间
• 保持原始 X/Y 位置和偏航角
• 以约 0.20 m/s 提升高度设定点
• 在起始位置上方约 0.50 米处停止爬升
• 保持该位置
• 检测解锁状态和 Offboard 模式
• 完成 1 秒解锁稳定时间
• 保持原始 X/Y 位置和偏航角
• 以约 0.20 m/s 提升高度设定点
• 在起始位置上方约 0.50 米处停止爬升
• 保持该位置
设定点爬升时间: 0.50 m ÷ 0.20 m/s = 2.5 秒
实际飞行器可能需要稍长时间稳定。
实际飞行器可能需要稍长时间稳定。
在 Offboard 模式下保持油门居中。虽然控制器指挥飞行,但居中的油门有助于更平滑地返回 Position 模式。
预期空中行为
通过 QGC 显示 OFFBOARD
通过 飞行器缓慢上升(非跳跃式)
通过 水平位置保持固定
通过 偏航保持固定
通过 爬升在约 0.50 米处停止
通过 控制器继续保持起飞点
通过 不会向前移动
通过 不会自动降落
通过 飞行器缓慢上升(非跳跃式)
通过 水平位置保持固定
通过 偏航保持固定
通过 爬升在约 0.50 米处停止
通过 控制器继续保持起飞点
通过 不会向前移动
通过 不会自动降落
警告 首次装桨测试时,到达目标高度后仅保持数秒。
正常降落
控制器不会执行降落。手动结束飞行:
1. 保持油门居中。
2. 从 Offboard 切换回 Position 模式。
3. 确认手动位置控制已恢复。
4. 逐渐将油门移到底部以下。
5. 缓慢下降。
6. 着陆。
7. 将油门完全拉低。
8. 如果这是既定的上锁流程,切换至 Stabilized 模式。
9. 上锁。
2. 从 Offboard 切换回 Position 模式。
3. 确认手动位置控制已恢复。
4. 逐渐将油门移到底部以下。
5. 缓慢下降。
6. 着陆。
7. 将油门完全拉低。
8. 如果这是既定的上锁流程,切换至 Stabilized 模式。
9. 上锁。
警告 不要在空中上锁。
紧急恢复
如果飞行器爬升过快、下降、振荡、漂移或产生里程计警告:
1. 立即从 Offboard 切换回 Position 模式。
2. 初始保持油门接近中位。
3. 手动控制。
4. 逐渐下降并着陆。
5. 在空中时不要突然将油门完全拉低。
6. 如果 Position 模式不可用或不稳定(外部里程计已失效):
• 切换至 Stabilized 模式
• 手动控制姿态和油门
• 降落并上锁
2. 初始保持油门接近中位。
3. 手动控制。
4. 逐渐下降并着陆。
5. 在空中时不要突然将油门完全拉低。
6. 如果 Position 模式不可用或不稳定(外部里程计已失效):
• 切换至 Stabilized 模式
• 手动控制姿态和油门
• 降落并上锁
停止并保存 bag
# 仅着陆并上锁后:
# 终端 2:停止控制器
Ctrl-C
# 返回终端 1 并分离 tmux:
Ctrl-b
# 释放按键,然后按:
d
警告 不要在主动飞行录制时使用
tmux kill-session 停止。 检查保存的 rosbag
source /opt/ros/humble/setup.bash
LATEST_BAG=$(cat ~/rosbags/.latest_indoor_hover)
echo "$LATEST_BAG"
ls -lah "$LATEST_BAG"
ros2 bag info "$LATEST_BAG"
有效 bag 应包含:
/Odometry · /mavros/odometry/out · /mavros/odometry/in · /mavros/local_position/odom · /mavros/state · /mavros/extended_state · /mavros/imu/data · /mavros/setpoint_position/local · /tf · /tf_static · /diagnostics
/Odometry · /mavros/odometry/out · /mavros/odometry/in · /mavros/local_position/odom · /mavros/state · /mavros/extended_state · /mavros/imu/data · /mavros/setpoint_position/local · /tf · /tf_static · /diagnostics
# 最终确认关闭
pgrep -af \
'livox_ros_driver2_node|fastlio_mapping|fastlio_to_mavros|mavros_node|rosbag2_recorder' \
|| echo "PASS: no stack processes remain"
通过 关键确认
通过 在 Position 模式下解锁 → 居中油门 → 等待 → 切换 Offboard
这是此自动起飞控制器已验证的正确工作流程。
这是此自动起飞控制器已验证的正确工作流程。
平台:Jetson · ROS2 Humble · Livox Mid360 · FAST-LIO · PX4 · livox_offboard_takeoff
(c) 卓博泰科技 · Automatic Offboard Takeoff 测试流程
(c) 卓博泰科技 · Automatic Offboard Takeoff 测试流程