跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Python

Jetson Orin NX + Fast-LIO2 自主无人机完整部署方案

综述由AI生成Jetson Orin NX + Fast-LIO2 自主无人机完整部署方案 一、系统概述 1.1 项目背景 在自主无人机领域,实现高精度定位和自主飞行一直是重要研究课题。本项目结合最新的 SLAM 算法(Fast-LIO2)、高效的路径规划和实时避障,在 Jetson Orin NX 这个边缘计算平台上实现了完整的自主飞行系统。 1.2 核心特性 **实时 SLAM 定位** - Fast-LI…

林间仙子发布于 2026/4/6更新于 2026/5/2396K 浏览

Jetson Orin NX + Fast-LIO2 自主无人机完整部署方案

一、系统概述

1.1 项目背景

在自主无人机领域,实现高精度定位和自主飞行一直是重要研究课题。本项目结合最新的 SLAM 算法(Fast-LIO2)、高效的路径规划和实时避障,在 Jetson Orin NX 这个边缘计算平台上实现了完整的自主飞行系统。

1.2 核心特性
  • 实时 SLAM 定位 - Fast-LIO2 算法,100Hz 频率,<2% 漂移
  • 自主路径规划 - A*算法实现的全局路径规划,1-5Hz
  • 动态避障 - 势场法实现实时避障,<200ms 反应时间
  • PX4 集成 - 通过 MAVLink 高效通信与飞控集成
  • ROS2 框架 - 完整的中间件和通信栈支持
1.3 系统性能指标
指标数值说明
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 )
💻 Jetson Orin NX GB (Ubuntu  + ROS2)
🔴 Livox MID360 (Laser Lidar)
📡 Telemetry Module (MHz/DR)
4
16
22.04
433
3
2.3 关键参数
连接接口参数备注
Orin → MID360USB 3.05Gbps使用有源集线器
Orin → PX4UART1921600 bpsTTL 电平,不可接 5V
PX4 → 电机PWM50Hz通过 ESC 驱动
PX4 ↔ GPSUART238400 bps可选
PX4 ↔ 指南针I2C400kHz可选

三、软件架构

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 初始化(5 分钟)
# 1. 系统更新
sudo apt update && sudo apt upgrade -y

# 2. 安装基础开发工具
sudo apt install -y \
    build-essential cmake git curl wget \
    python3-dev python3-pip libssl-dev libopencv-dev

# 3. 增加交换空间(重要!)
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

# 4. 验证 CUDA
nvcc --version
nvidia-smi

💡 Tip: Orin NX 内存有限,增加交换空间是编译大型项目的必要步骤。

4.2 ROS 2 Humble 安装(10 分钟)
# 1. 添加 ROS2 源
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

# 2. 安装 ROS 2 Humble
sudo apt update
sudo apt install -y ros-humble-desktop

# 3. 配置环境变量
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc

# 4. 验证安装
ros2 --version
4.3 核心依赖库安装(15 分钟)
# PCL - 点云库
sudo apt install -y libpcl-dev pcl-tools ros-humble-pcl-ros

# Eigen - 线性代数
sudo apt install -y libeigen3-dev

# OpenCV - 计算机视觉
sudo apt install -y libopencv-dev opencv-data

# YAML - 配置文件处理
sudo apt install -y libyaml-cpp-dev

# Ceres Solver - 优化库(可选但推荐)
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

# 编译 Fast-LIO2
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 # 1=Livox
  time_sync_en: false
  imu_en: true
  scan_pub_en: true
lidar:
  lidar_cov: 0.03 # 激光雷达噪声
  blind: 0.5 # 盲点距离 (m)
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 启动命令
# 启动 MID360 驱动
ros2 launch livox_ros2_driver livox_ros2_driver.launch.py

# 启动 Fast-LIO2(新终端)
ros2 run fast_lio2 fastlio2_node --ros-args \
    -p config_file:=~/.ros/fast_lio2_mid360.yaml

# 验证输出(第三个终端)
ros2 topic hz /fastlio2/odometry
# 预期:100Hz
5.2 路径规划模块
5.2.1 A*算法实现核心
// src/path_planner.cpp
#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) {
        // A*算法实现
        std::priority_queue<Node> open_set;
        std::map<std::string, Node> closed_set;
        // ... 完整的 A*实现 ...
        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 启动配置
# launch/path_planning.launch.py
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 势场法避障
// src/local_planner.cpp - 关键部分
void LocalPlanner::compute_avoidance_velocity() {
    // 1. 提取障碍物
    std::vector<geometry_msgs::msg::Point> obstacles = extract_obstacles(latest_cloud_);
    
    // 2. 计算排斥力
    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));
        }
    }
    
    // 3. 输出避障速度
    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 完整启动脚本
#!/bin/bash
# launch_autonomous_flight.sh
source ~/uav_ws/install/setup.bash
echo "Starting UAV Autonomous Flight System..."

# 终端 1: MID360 驱动
gnome-terminal -- bash -c "ros2 launch livox_ros2_driver livox_ros2_driver.launch.py; bash" &
sleep 2

# 终端 2: Fast-LIO2
gnome-terminal -- bash -c "ros2 launch fast_lio2 mid360_config.launch.py; bash" &
sleep 3

# 终端 3: MAVROS (PX4 通信)
gnome-terminal -- bash -c "ros2 launch mavros apm.launch fcu_url:=/dev/ttyTHS1:921600; bash" &
sleep 2

# 终端 4: 路径规划和避障
gnome-terminal -- bash -c "ros2 launch uav_autonomous_flight autonomous_flight.launch.py; bash" &

# 终端 5: RViz 可视化
gnome-terminal -- bash -c "rviz2 -d $(ros2 pkg prefix uav_autonomous_flight)/rviz/config.rviz; bash" &

echo "All modules started!"
6.2 系统健康检查
#!/bin/bash
# check_system.sh
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

# 检查 PX4 状态
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 中间件配置不优化

解决方案:

# 1. 启用最高性能模式
sudo nvpmodel -m 0
sudo jetson_clocks

# 2. 使用高效的 DDS 实现
export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp

# 3. 关闭不必要的发布
# 在 fast_lio2 配置文件中:
# feat_pub_en: false
# dense_publish_en: false
问题 2: MID360 无法连接

症状: lsusb 看不到 MID360 设备

解决方案:

# 1. 检查 USB 设备
lsusb | grep -i livox

# 2. 检查 USB 权限
sudo usermod -a -G dialout $USER
newgrp dialout

# 3. 重新插拔设备
# 检查 udev 规则
ls /etc/udev/rules.d/ | grep -i livox

# 4. 测试连接
ros2 launch livox_ros2_driver livox_ros2_driver.launch.py
问题 3: PX4 通信失败

症状: MAVROS 无法连接 PX4

原因: 波特率设置不匹配或权限问题

解决方案:

# 1. 验证波特率
stty -F /dev/ttyTHS1 921600

# 2. 检查 UART 权限
ls -l /dev/ttyTHS1

# 3. 在 QGroundControl 中验证 PX4 波特率设置
# 应设为 921600 bps

# 4. 测试连接
ros2 launch mavros apm.launch fcu_url:=/dev/ttyTHS1:921600
问题 4: 内存泄漏导致系统崩溃

症状: 运行时间越长,可用内存越少

解决方案:

# 1. 减少点云缓冲
# fast_lio2 配置中:cube_len: 100
# 从 200 改为 100

# 2. 优化 ROS 2 QoS
# 创建 qos_config.yaml 并在 launch 中引用

# 3. 定期监控
watch -n 1 'free -h'

八、参考资源

8.1 官方文档
项目链接说明
Fast-LIO2https://github.com/hku-mars/Fast-LIO2核心 SLAM 算法
Livox SDKhttps://github.com/Livox-SDK/Livox-SDK2激光雷达驱动
ROS 2https://docs.ros.org/en/humble/中间件框架
PX4https://docs.px4.io飞控系统
Jetsonhttps://developer.nvidia.com/jetson硬件平台
8.2 推荐论文
  1. Fast-LIO2: 'Fast Direct LIO SAM'
    • 关键贡献:紧耦合的 SLAM 系统,无需预扫描
  2. 路径规划: 'Optimal RRT-based Motion Planning'
    • 关键贡献:高效的采样算法
  3. 避障: 'Obstacle Avoidance using Artificial Potential Fields'
    • 关键贡献:实时避障方法

目录

  1. Jetson Orin NX + Fast-LIO2 自主无人机完整部署方案
  2. 一、系统概述
  3. 1.1 项目背景
  4. 1.2 核心特性
  5. 1.3 系统性能指标
  6. 二、硬件配置
  7. 2.1 核心硬件清单
  8. 2.2 硬件连接拓扑
  9. 2.3 关键参数
  10. 三、软件架构
  11. 3.1 系统三层架构
  12. 3.2 数据流处理
  13. 四、环境配置
  14. 4.1 Jetson Orin NX 初始化(5 分钟)
  15. 1. 系统更新
  16. 2. 安装基础开发工具
  17. 3. 增加交换空间(重要!)
  18. 4. 验证 CUDA
  19. 4.2 ROS 2 Humble 安装(10 分钟)
  20. 1. 添加 ROS2 源
  21. 2. 安装 ROS 2 Humble
  22. 3. 配置环境变量
  23. 4. 验证安装
  24. 4.3 核心依赖库安装(15 分钟)
  25. PCL - 点云库
  26. Eigen - 线性代数
  27. OpenCV - 计算机视觉
  28. YAML - 配置文件处理
  29. Ceres Solver - 优化库(可选但推荐)
  30. 4.4 创建 ROS2 工作空间
  31. 创建工作空间
  32. 初始化工作空间
  33. 配置环境
  34. 五、关键模块部署
  35. 5.1 Fast-LIO2 SLAM 部署
  36. 5.1.1 源码编译
  37. 编译 Fast-LIO2
  38. 验证
  39. 5.1.2 MID360 配置文件
  40. 5.1.3 启动命令
  41. 启动 MID360 驱动
  42. 启动 Fast-LIO2(新终端)
  43. 验证输出(第三个终端)
  44. 预期:100Hz
  45. 5.2 路径规划模块
  46. 5.2.1 A*算法实现核心
  47. 5.2.2 启动配置
  48. launch/path_planning.launch.py
  49. 5.3 避障模块
  50. 5.3.1 势场法避障
  51. 六、系统集成
  52. 6.1 完整启动脚本
  53. launchautonomousflight.sh
  54. 终端 1: MID360 驱动
  55. 终端 2: Fast-LIO2
  56. 终端 3: MAVROS (PX4 通信)
  57. 终端 4: 路径规划和避障
  58. 终端 5: RViz 可视化
  59. 6.2 系统健康检查
  60. check_system.sh
  61. 检查节点
  62. 检查话题
  63. 检查系统资源
  64. 检查 PX4 状态
  65. 七、常见问题
  66. 问题 1: Fast-LIO2 运行缓慢(频率不稳定)
  67. 1. 启用最高性能模式
  68. 2. 使用高效的 DDS 实现
  69. 3. 关闭不必要的发布
  70. 在 fast_lio2 配置文件中:
  71. featpuben: false
  72. densepublishen: false
  73. 问题 2: MID360 无法连接
  74. 1. 检查 USB 设备
  75. 2. 检查 USB 权限
  76. 3. 重新插拔设备
  77. 检查 udev 规则
  78. 4. 测试连接
  79. 问题 3: PX4 通信失败
  80. 1. 验证波特率
  81. 2. 检查 UART 权限
  82. 3. 在 QGroundControl 中验证 PX4 波特率设置
  83. 应设为 921600 bps
  84. 4. 测试连接
  85. 问题 4: 内存泄漏导致系统崩溃
  86. 1. 减少点云缓冲
  87. fastlio2 配置中:cubelen: 100
  88. 从 200 改为 100
  89. 2. 优化 ROS 2 QoS
  90. 创建 qos_config.yaml 并在 launch 中引用
  91. 3. 定期监控
  92. 八、参考资源
  93. 8.1 官方文档
  94. 8.2 推荐论文
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • ThinkPad 笔记本安装 Ubuntu 系统完整教程
  • Shell 脚本基础:参数校验与退出状态码解析
  • 基于 nanobot 搭建轻量级 QQ AI 机器人及搜索功能优化
  • 智谱开源Open-AutoGLM模型本地部署与性能优化指南
  • Pixel Fashion Atelier 部署教程:Stable Diffusion 像素时装生成
  • AIGC 插画生成技术解析与 Python 实战
  • MySQL 核心原理与实战进阶指南
  • CSS 颜色函数与渐变应用详解
  • Vivado FPGA 逻辑设计实战:同步 FIFO 全流程解析
  • AgentScope Java 与 Spring AI Alibaba Workflow 集成指南
  • Pixel Fashion Atelier 部署教程:Stable Diffusion 像素时装生成
  • KES 数据库运维:资源回收与膨胀防治全攻略
  • 基于开源工具快速搭建商用级 AI 教育平台方案
  • 深入理解 Web Worker
  • 智能家居新体验:微信小程序如何通过阿里云IoT实现设备互联
  • UI-UX Pro Max Skill:AI 辅助 UI/UX 设计与代码生成指南
  • Python 网络爬虫实战:使用 Requests 抓取音乐数据教程
  • ComfyUI:构建高效 AI 绘画与图像生成工作流
  • AI 大模型 API 中转平台推荐与接入指南
  • Agentic AI 概念解析:与传统 AIGC 的核心区别

相关免费在线工具

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online