目标检测与跟踪(12)-- Jetson Xavier NX / Orin NX ROS及视觉检测环境配置、移植、部署指南

前言

在边缘计算与机器人开发中,NVIDIA Jetson系列(如Xavier NX和Orin NX)凭借其强大的算力与低功耗优势,成为了ROS机器人、视觉检测等项目的首选平台。然而,每次更换新设备时,重复配置环境(ROS、PyTorch、YOLO等)既耗时又容易出错。

本文将基于实际开发经验,整理一套完整的环境配置、代码移植与快速部署流程。内容涵盖ROS1(使用鱼香ROS一键安装)、Miniforge管理Python环境、PyTorch适配、YOLO视觉检测、IMU及机械臂控制模块的移植,助你实现"开箱即用"的开发体验。


1. 系统基础准备

Jetson设备建议刷写 JetPack SDK(Xavier NX推荐5.1.2以上,Orin NX推荐6.0以上)。系统安装完成后,确保网络畅通并进行基础更新:

bash 复制代码
sudo apt update
sudo apt upgrade -y
sudo apt install vim git curl cmake build-essential

2. ROS1 安装:鱼香ROS一键安装(高效、避坑)

手动编译ROS在Jetson上容易遇到依赖问题,推荐使用"鱼香ROS"大佬的一键安装脚本,支持Melodic/Noetic。

bash 复制代码
wget http://fishros.com/install -O fishros && bash fishros

操作指引

  1. 选择 [1]: 一键安装ROS1

  2. 根据你的Ubuntu版本选择:

    • Ubuntu 18.04 -> ROS Melodic

    • Ubuntu 20.04 -> ROS Noetic

  3. 选择 [1]: desktop-full 安装完整桌面版。

  4. 脚本会自动处理依赖并配置环境变量。

安装完成后,验证ROS环境:

bash 复制代码
source /opt/ros/<distro>/setup.bash
roscore

移植小技巧 :如果多台设备需要统一ROS版本,可将 /opt/ros/ 对应文件夹打包,但易出现硬件依赖问题,建议在新设备上直接运行一键安装脚本保持一致性。


3. Miniforge 安装与虚拟环境管理

Jetson的架构是 aarch64,Anaconda官方不支持,需要使用 Miniforge (conda-forge的ARM版本)。这里我们借助 pipconda 来隔离开发环境,便于移植。

3.1 安装 Miniforge

bash 复制代码
# 下载对应版本
wget https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-aarch64.sh
bash Miniforge3-Linux-aarch64.sh
# 按提示进行,建议默认安装
source ~/.bashrc

3.2 创建虚拟环境(用于视觉检测)

yolo_env 为例:

bash 复制代码
conda create -n yolo_env python=3.8 -y
conda activate yolo_env

4. PyTorch + torchvision 配置(Jetson专用)

Jetson平台需安装NVIDIA预编译的PyTorch wheel,而非官方版本。

4.1 安装 PyTorch

访问 NVIDIA Jetson PyTorch 官方页面 获取对应JetPack版本的whl链接。

JetPack 5.1.2 (Python 3.8) 为例:

bash 复制代码
# 安装依赖
sudo apt install libopenblas-base libopenmpi-dev libjpeg-dev zlib1g-dev
# 下载并安装 torch (此处以 v2.1.0 为例)
wget https://developer.download.nvidia.com/compute/redist/jp/v512/pytorch/torch-2.1.0a0+41361538.nv23.06-cp38-cp38-linux_aarch64.whl
pip install torch-2.1.0a0+41361538.nv23.06-cp38-cp38-linux_aarch64.whl

4.2 安装 torchvision

需从源码编译以匹配PyTorch版本:

bash 复制代码
git clone --branch v0.16.0 https://github.com/pytorch/vision.git torchvision
cd torchvision
export BUILD_VERSION=0.16.0
python setup.py install --user
cd ..

注意:编译过程较慢,需耐心等待。

详细安装教程请参考系列博客:

https://blog.csdn.net/hhaowang/article/details/159160567?spm=1001.2014.3001.5501https://blog.csdn.net/hhaowang/article/details/159160567?spm=1001.2014.3001.5501


5. YOLO 环境配置与代码移植

YOLO(如YOLOv5/v8)依赖PyTorch。这里以 YOLOv8为例说明移植流程。

5.1 环境配置

yolo_env 中安装YOLO依赖:

bash 复制代码
pip install ultralytics  # YOLOv8
# 或 YOLOv5
git clone https://github.com/ultralytics/yolov8
cd yolov8
pip install -r requirements.txt

5.2 代码与模型移植

为了在新设备上快速部署YOLO检测:

  1. 打包环境依赖

    bash 复制代码
    conda activate yolo_env
    pip freeze > requirements.txt
  2. 移植代码:将整个YOLO项目文件夹(或你的推理代码)打包,通过U盘或scp传到新设备。

  3. 新设备部署

    bash 复制代码
    conda create -n yolo_env python=3.8
    conda activate yolo_env
    pip install -r requirements.txt
    # 注意PyTorch需单独安装(参考第4节),因为requirements中可能只包含torch默认版本

6. IMU 模块移植

IMU(如9轴姿态传感器)通常通过串口或I2C通信,依赖ROS驱动包。

产品特点

  • 模块集成高精度的陀螺仪、加速度计、地磁场传感器和气压计,采用高性能的微处理器和先进的动力学解算与卡尔曼动态滤波算法,能够快速求解出模块当前的实时运动姿态。
  • 采用先进的数字滤波技术,能有效降低测量噪声,提高测量精度。
  • 模块内部集成了姿态解算器,配合动态卡尔曼滤波算法,能够在动态环境下准确输出模块的当前姿态, 姿态测量精度静态 0.05 度,动态 0.1 度,稳定性极高,性能甚至优于某些专业的倾角仪。
  • Z轴航向角加入地磁传感器滤波融合,解决了6轴算法中,由于陀螺仪积分的漂移引起的累计误差,可长期稳定输出航向角数据。注意:要由于有磁场检测,使用前需要校准,而且使用时需要远离磁干扰区域、电子设备、磁铁、扬声器等硬磁性物体至少20cm的距离。
  • 模块内部自带电压稳定电路,工作电压3.3~5V,引脚电平兼容3.3V/5V的嵌入式系统,连接方便。
  • 支持串口和IIC两种数字接口。方便用户选择最佳的连接方式。串口速率4800bps~921600bps可调,IIC接口支持全速400K速率。
  • 最高200Hz数据输出速率。输出内容可以自由选择,输出速率0.2~200Hz可调节。
  • 保留4路扩展端口,可以分别配置为模拟输入,数字输入,数字输出等功能。
  • 具备GPS连接能力。可接受符合NMEA-0183标准的串口GPS数据,形成GPS-IMU组合导航单元。

传感器参数指标

1.加速度计参数

参数 条件 典型值
量程 ±16g
分辨率 ±16g 0.0005(g/LSB)
RMS噪声 带宽=100Hz 0.75~1mg-rms
静止零漂 水平放置 ±20~40mg
温漂 -40°C ~ +85°C ±0.15mg/℃
带宽 5~256Hz

2.陀螺仪参数

参数 条件 典型值
量程 ±2000°/s
分辨率 ±2000°/s 0.061(°/s)/(LSB)
RMS噪声 带宽=100Hz 0.028~0.07(°/s)-rms
静止零漂 水平放置 ±0.5~1°/s
温漂 -40°C ~ +85°C ±0.005~0.015 (°/s)/℃
带宽 5~256Hz

3.磁力计参数

参数 条件 典型值
量程 ±2Gauss
分辨率 ±2Gauss 0.0667mGauss/LSB

4.气压计参数

参数 条件 典型值
量程 300~1100hPa
RMS噪声 标准模式 0.5Pa-RMS
相对精度 ±0.06hPa

5.俯仰角、横滚角参数

参数 条件 典型值
量程 X:±180°,Y:±90°
倾角精度 静态 0.1°
倾角精度 动态 0.5°
分辨率 水平放置 0.0055°
温漂 -40°C ~ +85°C ±0.5~1°

6.航向角参数

参数 条件 典型值
量程 Z:±180°
航向精度 9轴算法,磁场校准,动/静态 1°(不受磁场干扰情况下)【1】
航向精度 6轴算法,静态 0.5°(动态存在积分累计误差)【2】
分辨率 水平放置 0.0055°

6.1 常用IMU驱动(如 razkal/razor_imu_9dof)

ubuntu 20.04,ROS Noetic,python3 :

bash 复制代码
sudo apt-get install ros-noetic-imu-tools ros-noetic-rviz-imu-plugin
pip3 install pyserial

安装ROS串口驱动

bash 复制代码
sudo apt-get install ros-$ROS_DISTRO-serial
  • 原设备 :记录下驱动包名与参数(如串口号 /dev/ttyUSB0、波特率)。

  • 移植步骤

    1. 将IMU的ROS功能包复制到新设备工作空间 src 目录。

    2. 在新设备上安装依赖(如 python3-serial)。

    3. 编译工作空间,打开命令终端,运行下面指令:

      bash 复制代码
        #1、新建工作空间
        mkdir ros_imu_ws
        cd ros_imu_ws
        mkdir src
        cd src
        catkin_init_workspace
        #2、复制wit_ros_imu文件夹到~/ros_imu_ws/src目录下
        #3、编译
        cd ~/ros_imu_ws
        catkin_make
    4. 修改启动文件(launch)中的串口号,可通过 ls /dev/tty* 确认新设备的端口。

打开命令终端,运行下面指令:

bash 复制代码
cd ~/ros_imu_ws/src/wit_ros_imu
sudo chmod 777 bind_usb.sh
sudo sh bind_usb.sh

重新插拔连接IMU模块的USB数据线。以生效绑定的端口,输入以下指令检测绑定端口是否成功,

bash 复制代码
ll /dev/imu_usb

添加用户权限,重启后生效。

bash 复制代码
sudo usermod -a -G dialout $USER

6.2 修改参数配置

波特率根据实际使用设定,默认波特率baud的值为9600,如果用户通过上位机修改了波特率,需要对应修改成修改后的波特率。

进入功能包下的launch文件夹,打开rviz_and_imu.launch文件中的配置参数

bash 复制代码
cd ~/ros_imu_ws/src/wit_ros_imu/launch
sudo gedit rviz_and_imu.launch

修改成如下图所示,

可以看出,波特率设置成默认的9600,端口设置成绑定的**/dev/imu_usb**,话题重映射成**/imu/data.**

6.3 运行可视化界面

  1. 打开终端,运行launch文件,注意要在实际桌面打开,或者远程,不可在SSH远程终端中打开。
bash 复制代码
roslaunch wit_ros_imu rviz_and_imu.launch

**module 'serial' has no attribute 'Serial'

INFO\] \[1774491059.009024\]: Serial port opening failure** #### 模块冲突问题 Python环境中同时存在标准库`serial`模块与第三方库`pyserial`时,会导致导入混淆 。标准库的 `serial`模块不包含 `Serial`类,而 `pyserial`才是提供串口通信功能的正确库。 #### 错误安装情况 用户可能误安装了名为`serial`的无效包,而非正确的`pyserial`库 此情况下,即使安装成功,也无法调用 `Serial`类。 #### 文件名冲突 若脚本文件命名为`serial.py`,Python会优先导入当前目录的模块而非`pyserial`库,导致属性缺失 ### 系统解决方案 #### 清理冲突模块 执行以下命令卸载冲突模块: `pip uninstall serial pip uninstall pyserial` #### 重新安装正确库 安装官方`pyserial`库: `pip install pyserial` #### 验证安装结果 在Python中执行以下代码验证: `import serial print(serial.Serial) # 应输出 `

打开两个新终端输入分别输入下面两行命令,查看数据

bash 复制代码
rostopic echo /imu/data
rostopic echo /wit/mag

6.4 安装

当需要将IMU模块安装到其他设备上时,为了避免安装产生的误差,安装IMU模块时应注意以下几点:

1.要保证IMU模块安装面与被测量面完全紧靠,被测量面要尽可能水平,不能出现夹角产生。

2.IMU模块底边线和被测物体轴线不能有夹角产生,安装时应保持IMU模块底边线与被测无图转动轴线水平或正交。

3.IMU模块与被测量面必须固定紧密、接触平整。安装后连接到上位机查看是否稳定,如果不稳定请校准IMU模块。

6.5 PlotJuggler

PlotJuggler是一个独立的可视化工具,它支持ROS1和ROS2中的消息类型,并且可以处理大量的数据。与其他轨迹绘制工具相比,PlotJuggler具有以下显著特点:

  1. 支持多种消息类型:PlotJuggler支持多种ROS消息类型,包括点云、轨迹、图像等,使得用户可以在一个统一的界面中查看不同类型的数据。

  2. 实时数据更新:PlotJuggler可以实时接收ROS中的消息,并在图形界面中进行实时更新,从而让用户能够实时地观察机器人的运动轨迹。

  3. 丰富的可视化选项:PlotJuggler提供了多种可视化选项,包括折线图、散点图、柱状图等,用户可以根据需要选择合适的可视化方式。

  4. 灵活的交互界面:PlotJuggler具有一个灵活的交互界面,用户可以通过拖拽、缩放、平移等操作来自由地浏览和分析数据。

  5. 支持数据导入导出:PlotJuggler支持将数据导入和导出为多种格式,如CSV、PNG等,方便用户与其他工具进行交互和分享。

1.安装plotjuggler(ubuntu20.04+ros-noetic)

bash 复制代码
sudo apt-get install ros-noetic-plotjuggler

2. 安装ros插件(否则无法打开.bag文件)

bash 复制代码
sudo apt-get install ros-noetic-plotjuggler-msgs ros-noetic-plotjuggler-ros

3. 使用可视化工具

bash 复制代码
rosrun plotjuggler plotjuggler

7. 机械臂控制模块移植

机械臂(如UR、Aubo、睿尔曼)通常提供ROS包,依赖MoveIt或自定义控制器。

7.1 移植要点

  • 依赖同步:原设备上的ROS功能包可能依赖特定版本,新设备需安装相同依赖。

    bash 复制代码
    # 检查原设备已安装的ROS包
    dpkg -l | grep ros-
    # 在新设备上安装
    sudo apt install ros-<distro>-<package-name>
  • 参数文件 :机械臂的URDF、控制器配置文件(yaml)通常存放在功能包的 config 目录下,直接复制即可。

  • 固件/驱动 :部分机械臂需安装底层驱动库(如 libur_ros)。在新设备上重新编译驱动:

    bash 复制代码
    cd ~/catkin_ws/src
    git clone <driver_repo>
    cd ~/catkin_ws
    rosdep install --from-paths src --ignore-src -r -y
    catkin_make

8. 环境快速移植总结(脚本化建议)

为了后续新设备一键部署,建议编写一个 setup.sh 脚本,内容包括:

  1. 安装系统基础依赖。

  2. 一键安装ROS。

  3. 安装Miniforge并创建conda环境。

  4. 安装PyTorch + torchvision(Jetson专用)。

  5. 通过 pip install -r requirements.txt 安装Python依赖。

  6. 拉取代码仓库(Git)或解压代码包。

  7. 编译ROS工作空间。

示例脚本结构:

bash 复制代码
#!/bin/bash
set -e

# 1. ROS安装
wget http://fishros.com/install -O fishros && bash fishros

# 2. Miniforge 安装
wget https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-aarch64.sh
bash Miniforge3-Linux-aarch64.sh -b -p $HOME/miniforge3
eval "$($HOME/miniforge3/bin/conda shell.bash hook)"

# 3. 创建环境
conda create -n robot_env python=3.8 -y
conda activate robot_env

# 4. 安装PyTorch等
# ... 具体步骤

# 5. 克隆代码
git clone your_repo_url

echo "部署完成!"

结语

通过以上步骤,我们实现了Jetson Xavier NX/Orin NX上ROS及视觉检测环境的标准化配置与快速移植。核心思路是:

  • ROS:使用一键安装保证环境一致性。

  • Python环境 :Miniforge管理虚拟环境,通过 requirements.txt 导出依赖。

  • 硬件模块:重点关注驱动适配与参数文件(串口号、配置文件)的修改。

希望这篇指南能帮助你在多台Jetson设备之间高效迁移开发环境,让边缘计算项目的部署更加流畅。如果在移植过程中遇到其他问题,欢迎在评论区交流讨论!

相关推荐
杀生丸学AI2 小时前
【世界模型】video2world:从不一致视角重建世界
人工智能·三维重建·扩散模型·具身智能·视频生成·世界模型·空间智能
冬夜戏雪2 小时前
agent工程3 固定模板填充智能体
人工智能
梦星辰.2 小时前
大语言模型训练中的显存占用与优化方法简述
人工智能·深度学习·语言模型
deephub2 小时前
信息访问 vs. 推理能力:LLM Agent 性能归因的实验分析
人工智能·深度学习·大语言模型·agent
前端小张同学2 小时前
有了AI大家的日常是轻松了还是更焦虑了呢?
人工智能·程序员·ai编程
快手技术2 小时前
KAT-Coder-Pro V2:玩转龙虾,吃透美学
人工智能
新缸中之脑3 小时前
AI工程师成长路线图 (2026)
人工智能
商业数据派3 小时前
快手估值重构的“隐藏彩蛋”
大数据·人工智能·重构
新缸中之脑3 小时前
你的智能体技术栈中缺失的层
大数据·人工智能·数据挖掘