跳到主要内容Jetson Orin NX 搭载 Fast-LIO2 的自主无人机系统部署实战 | 极客日志C++AI算法
Jetson Orin NX 搭载 Fast-LIO2 的自主无人机系统部署实战
Jetson Orin NX 结合 Fast-LIO2 算法构建自主飞行四旋翼系统,涵盖实时 SLAM 定位、A*路径规划及势场法避障。方案基于 ROS2 Humble 框架,集成 PX4 飞控与 Livox MID360 激光雷达,实现高精度地图构建与动态环境导航。文档详述硬件选型、编译环境搭建、核心模块配置及系统集成步骤,提供常见问题排查指南,适用于边缘计算平台上的机器人开发实践。
SqlMaster15 浏览 Jetson Orin NX + Fast-LIO2 自主无人机完整部署方案
在自主无人机领域,实现高精度定位和自主飞行一直是重要研究课题。本项目结合最新的 SLAM 算法(Fast-LIO2)、高效的路径规划和实时避障,在 Jetson Orin NX 这个边缘计算平台上实现了完整的自主飞行系统。
一、系统概述
1.1 核心特性
- 实时 SLAM 定位:Fast-LIO2 算法,100Hz 频率,<2% 漂移
- 自主路径规划:A*算法实现的全局路径规划,1-5Hz
- 动态避障:势场法实现实时避障,<200ms 反应时间
- PX4 集成:通过 MAVLink 高效通信与飞控集成
- ROS2 框架:完整的中间件和通信栈支持
1.2 系统性能指标
| 指标 | 数值 | 说明 |
|---|
| SLAM 频率 | 100Hz | 实时定位更新速率 |
| 定位精度 | <2% | 累积漂移率 |
| 处理延迟 | 30-40ms | 点云到输出 |
| 最大速度 | 2-3 m/s | 自主飞行速度 |
| 续航时间 | 15-20 分钟 | 典型任务 |
| CPU 占用 | 60-70% | Orin NX 利用率 |
| 避障反应 | <200ms | 障碍物检测到避开 |
二、硬件配置
2.1 核心硬件清单
├─ 计算单元
│ ├─ Jetson Orin NX 16GB (Ubuntu 22.04)
│ ├─ 冷却风扇
│ └─ NVMe SSD 256GB+
├─ 飞控系统
│ ├─ PX4 飞控板 (Pixhawk 4)
│ ├─ GPS/GNSS 模块
│ └─ 遥测模块 (433MHz/3DR)
├─ 传感器系统
│ ├─ Livox MID360 激光雷达 (主传感器)
│ ├─ IMU (集成在飞控)
│ ├─ 气压计 (集成在飞控)
│ └─ 光流传感器 (可选)
├─ 无人机平台
│ ├─ 四轴机体
│ ├─ 4×无刷电机
│ ├─ 电调 (ESC)
│ ├─ 锂电池
│ └─ 螺旋桨
└─ 通信模块
├─ USB-C 线缆
├─ UART 转 USB 适配器
└─ USB 集线器 (有源)
2.2 硬件连接拓扑
UART 921600bps
USB 3.0
MAVLink
🛩️ PX4 Flight Controller (Pixhawk 4)
💻 Jetson Orin NX 16GB (Ubuntu 22.04 + ROS2)
🔴 Livox MID360 Laser Lidar
📡 Telemetry Module (433MHz/3DR)
2.3 关键参数
| 连接 | 接口 | 参数 | 备注 |
|---|
| Orin → MID360 | USB 3.0 | 5Gbps | 使用有源集线器 |
| Orin → PX4 | UART1 | 921600 bps | TTL 电平,不可接 5V |
| PX4 → 电机 | PWM | 50Hz | 通过 ESC 驱动 |
| PX4 ↔ GPS | UART2 | 38400 bps | 可选 |
| PX4 ↔ 指南针 | I2C | 400kHz | 可选 |
三、软件架构
3.1 系统三层架构
graph TB
subgraph Decision["🎯 Decision & Planning Layer"]
PathPlanning["📍 Path Planning<br/>A* / RRT / Dijkstra"]
LocalAvoid["🚧 Obstacle Avoidance<br/>Potential Field"]
end
subgraph Navigation["🧭 Navigation & Control Layer"]
SLAM["🗺️ SLAM Fast-LIO2<br/>Localization & Mapping<br/>100Hz"]
Controller["⚙️ PID Controller<br/>Trajectory Tracking"]
end
subgraph Hardware["🔧 Hardware Interface Layer"]
PX4Driver["🛩️ PX4 (MAVLink)<br/>Firmware Interface"]
LivoxDriver["📡 Livox Driver<br/>MID360 SDK"]
end
Decision --> Navigation
Navigation --> Hardware
SLAM -.->|Odometry| PathPlanning
SLAM -.->|Odometry| LocalAvoid
PathPlanning -.->|Global Path| Controller
LocalAvoid -.->|Avoid Velocity| Controller
Controller -.->|Control Command| PX4Driver
style Decision fill:#fff9c4
style Navigation fill:#c8e6c9
style Hardware fill:#bbdefb
3.2 数据流处理
Feedback 🔴 MID360 (100Hz)
📡 Livox Driver
☁️ Point Cloud (/livox/lidar)
🗺️ Fast-LIO2 (100Hz)
📍 Odometry (/fastlio2/odometry)
📍 Path Planning (1-5Hz)
🛣️ Global Path
🚧 Local Planner (20Hz)
👁️ Obstacle Detect
⬆️ Avoid Velocity
🎛️ Decision Fusion
➡️ Final Command
🎬 RViz Visualize
四、环境配置
4.1 Jetson Orin NX 初始化
Orin NX 内存有限,增加交换空间是编译大型项目的必要步骤。
sudo apt update && sudo apt upgrade -y
sudo apt install -y build-essential cmake git curl wget \
python3-dev python3-pip libssl-dev libopencv-dev
sudo fallocate -l 12G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
nvcc --version
nvidia-smi
4.2 ROS 2 Humble 安装
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key | \
sudo apt-key add -
echo "deb [arch=$(dpkg --print-architecture)] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" | \
sudo tee /etc/apt/sources.list.d/ros2-latest.list > /dev/null
sudo apt update
sudo apt install -y ros-humble-desktop
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc
ros2 --version
4.3 核心依赖库安装
sudo apt install -y libpcl-dev pcl-tools ros-humble-pcl-ros
sudo apt install -y libeigen3-dev
sudo apt install -y libopencv-dev opencv-data
sudo apt install -y libyaml-cpp-dev
cd ~/workspace
git clone https://github.com/ceres-solver/ceres-solver.git
cd ceres-solver && mkdir build && cd build
cmake .. -DBUILD_TESTING=OFF -DBUILD_EXAMPLES=OFF
make -j$(nproc) && sudo make install
4.4 创建 ROS2 工作空间
mkdir -p ~/uav_ws/src
cd ~/uav_ws
colcon build --symlink-install
echo "source ~/uav_ws/install/setup.bash" >> ~/.bashrc
source ~/.bashrc
五、关键模块部署
5.1 Fast-LIO2 SLAM 部署
5.1.1 源码编译
cd ~/uav_ws/src
git clone https://github.com/hku-mars/Fast-LIO2.git
cd ~/uav_ws
colcon build --packages-select fast_lio2 \
--cmake-args -DCMAKE_BUILD_TYPE=Release
ros2 pkg list | grep fast_lio2
5.1.2 MID360 配置文件
创建 ~/.ros/fast_lio2_mid360.yaml:
common:
lidar_type: 1
time_sync_en: false
imu_en: true
scan_pub_en: true
lidar:
lidar_cov: 0.03
blind: 0.5
imu:
gyr_cov: 0.1
acc_cov: 0.1
b_gyr_cov: 0.0001
b_acc_cov: 0.0001
mapping:
res_mean_size: 0.05
cube_len: 200
max_cov: 100.0
min_cov: 0.001
5.1.3 启动命令
ros2 launch livox_ros2_driver livox_ros2_driver.launch.py
ros2 run fast_lio2 fastlio2_node --ros-args \
-p config_file:=~/.ros/fast_lio2_mid360.yaml
ros2 topic hz /fastlio2/odometry
5.2 路径规划模块
5.2.1 A*算法实现核心
这里我们采用 C++ 实现核心逻辑,确保计算效率。
#include<rclcpp/rclcpp.hpp>
#include<nav_msgs/msg/path.hpp>
#include<sensor_msgs/msg/point_cloud2.hpp>
#include<queue>
#include<map>
class PathPlanner : public rclcpp::Node {
public:
PathPlanner() : Node("path_planner") {
cloud_sub_ = this->create_subscription<sensor_msgs::msg::PointCloud2>(
"/fastlio2/cloud_registered", 10,
std::bind(&PathPlanner::cloud_callback, this, std::placeholders::_1));
path_pub_ = this->create_publisher<nav_msgs::msg::Path>("/planned_path", 10);
}
nav_msgs::msg::Path plan_path(const geometry_msgs::msg::Point& start,
const geometry_msgs::msg::Point& goal) {
std::priority_queue<Node> open_set;
std::map<std::string, Node> closed_set;
return path;
}
private:
rclcpp::Subscription<sensor_msgs::msg::PointCloud2>::SharedPtr cloud_sub_;
rclcpp::Publisher<nav_msgs::msg::Path>::SharedPtr path_pub_;
void cloud_callback(const sensor_msgs::msg::PointCloud2::SharedPtr msg) {
}
};
5.2.2 启动配置
import os
from launch import LaunchDescription
from launch_ros.actions import Node
def generate_launch_description():
return LaunchDescription([
Node(
package='uav_autonomous_flight',
executable='path_planner',
name='path_planner',
parameters=[{
'planning_rate': 1.0,
'goal_tolerance': 0.1,
'grid_resolution': 0.2,
}],
output='screen'),
])
5.3 避障模块
5.3.1 势场法避障
void LocalPlanner::compute_avoidance_velocity() {
std::vector<geometry_msgs::msg::Point> obstacles = extract_obstacles(latest_cloud_);
double force_x = 0.0, force_y = 0.0;
for(const auto& obs : obstacles) {
double dist = std::hypot(obs.x, obs.y);
if(dist < COLLISION_THRESHOLD) {
double repulsion = (COLLISION_THRESHOLD - dist) / COLLISION_THRESHOLD;
force_x -= repulsion * std::cos(std::atan2(obs.y, obs.x));
force_y -= repulsion * std::sin(std::atan2(obs.y, obs.x));
}
}
geometry_msgs::msg::Twist cmd_vel;
cmd_vel.linear.x = force_x;
cmd_vel.linear.y = force_y;
cmd_vel_pub_->publish(cmd_vel);
}
六、系统集成
6.1 完整启动脚本
为了方便管理,我们将所有模块封装在一个 Shell 脚本中自动拉起。
#!/bin/bash
source ~/uav_ws/install/setup.bash
echo "Starting UAV Autonomous Flight System..."
gnome-terminal -- bash -c "ros2 launch livox_ros2_driver livox_ros2_driver.launch.py; bash" &
sleep 2
gnome-terminal -- bash -c "ros2 launch fast_lio2 mid360_config.launch.py; bash" &
sleep 3
gnome-terminal -- bash -c "ros2 launch mavros apm.launch fcu_url:=/dev/ttyTHS1:921600; bash" &
sleep 2
gnome-terminal -- bash -c "ros2 launch uav_autonomous_flight autonomous_flight.launch.py; bash" &
gnome-terminal -- bash -c "rviz2 -d $(ros2 pkg prefix uav_autonomous_flight)/rviz/config.rviz; bash" &
echo "All modules started!"
6.2 系统健康检查
运行前建议先执行一次健康检查,确保各节点状态正常。
#!/bin/bash
echo "=== UAV System Health Check ==="
echo "[1] Active Nodes:"
ros2 node list | tail -10
echo "[2] Key Topics:"
echo " - SLAM: $(ros2 topic hz /fastlio2/odometry 2>/dev/null | head -1)"
echo " - LiDAR: $(ros2 topic hz /livox/lidar 2>/dev/null | head -1)"
echo "[3] System Resources:"
free -h | grep Mem
nvidia-smi --query-gpu=memory.used,memory.total --format=csv,nounits
echo "[4] PX4 Status:"
ros2 topic echo /mavros/state -n 1 | grep mode
echo "=== Check Complete ==="
七、常见问题
问题 1: Fast-LIO2 运行缓慢(频率不稳定)
症状: ros2 topic hz /fastlio2/odometry 显示频率波动大
- Orin NX CPU 负载过高
- ROS 2 中间件配置不优化
sudo nvpmodel -m 0
sudo jetson_clocks
export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
问题 2: MID360 无法连接
lsusb | grep -i livox
sudo usermod -a -G dialout $USER
newgrp dialout
ls /etc/udev/rules.d/ | grep -i livox
ros2 launch livox_ros2_driver livox_ros2_driver.launch.py
问题 3: PX4 通信失败
stty -F /dev/ttyTHS1 921600
ls -l /dev/ttyTHS1
ros2 launch mavros apm.launch fcu_url:=/dev/ttyTHS1:921600
问题 4: 内存泄漏导致系统崩溃
八、参考资源
8.1 官方文档
8.2 推荐论文
- Fast-LIO2: 'Fast Direct LIO SAM'
- 路径规划: 'Optimal RRT-based Motion Planning'
- 避障: 'Obstacle Avoidance using Artificial Potential Fields'
相关免费在线工具
- 加密/解密文本
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
- RSA密钥对生成器
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
- Mermaid 预览与可视化编辑
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
- 随机西班牙地址生成器
随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online
- Gemini 图片去水印
基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online
- Base64 字符串编码/解码
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online