2. 开发环境搭建:Ubuntu系统配置、ROS2安装、Python虚拟环境、CUDA与TensorRT安装

说实话,环境搭建这事儿,看着琐碎,但真能卡住不少人。我见过太多同学在群里问“为什么我编译不过”“为什么检测模型跑不起来”,最后发现都是环境没配好。咱们这一章,就把这些基础工作一次性搞定。

我的习惯是:先搭系统,再装ROS2,然后配置Python虚拟环境,最后搞定CUDA和TensorRT。按这个顺序来,不容易出冲突。

本章核心目标:搭建一个可用于机械臂目标检测开发的完整环境,确保ROS2节点能正常通信、Python依赖不冲突、GPU推理能跑起来。

2.1 Ubuntu系统配置

我推荐用 Ubuntu 22.04 LTS。为什么?因为ROS2 Humble正好支持它,而且CUDA 12.x也能完美运行。我之前在20.04上折腾过,有些新库不支持,后来换了22.04,省心不少。

2.1.1 系统安装要点

  • 磁盘分区:建议至少给根目录 / 分配 80GB,/home 分配 100GB 以上。模型文件、数据集、编译中间产物都很占空间。
  • 换源:安装完第一件事,换国内镜像源。我用的是清华源,速度稳定。
  • 显卡驱动:在“软件与更新”的“附加驱动”里选NVIDIA官方驱动,别用开源的nouveau。

小技巧:装完系统后,先执行 sudo apt update && sudo apt upgrade -y,把系统包都更新到最新。这一步能避免很多依赖问题。

2.1.2 基础工具安装

# 安装编译工具和常用库
sudo apt install -y \
  build-essential \
  cmake \
  git \
  vim \
  curl \
  wget \
  net-tools \
  htop \
  terminator

嗯,这里有个坑:terminator 是我个人习惯用的终端模拟器,支持分屏,调试ROS2节点时特别方便。你可以换成自己顺手的。

2.2 ROS2 Humble 安装

ROS2版本很多,为什么选Humble?因为它对Ubuntu 22.04支持最好,而且生命周期长,到2027年才结束。咱们做机械臂项目,稳定性是第一位的。

2.2.1 安装步骤

  1. 设置locale:确保系统支持UTF-8
  2. 添加ROS2源:从官方仓库或镜像站添加
  3. 安装ROS2基础包:我建议装 ros-humble-desktop,包含可视化工具
  4. 安装编译工具:colcon 是ROS2的标配构建工具
# 设置locale
sudo apt update && sudo apt install locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8

# 添加ROS2源
sudo apt install software-properties-common
sudo add-apt-repository universe
sudo apt update && sudo apt install curl -y
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

# 安装ROS2 Humble
sudo apt update
sudo apt install ros-humble-desktop python3-colcon-common-extensions

注意:安装过程中如果遇到依赖冲突,别急着用 apt --fix-broken install 暴力解决。先看看具体是哪个包冲突,手动处理更稳妥。我曾经因为一个libssl的版本问题,折腾了整整一下午。

2.2.2 环境变量配置

每次打开终端都要source一下,太麻烦。我习惯把它写到 ~/.bashrc 里:

echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc

验证安装:

ros2 run demo_nodes_cpp talker

如果能看到节点在发布消息,说明ROS2装好了。

2.3 Python虚拟环境配置

为什么要用虚拟环境?说白了,就是怕不同项目之间的Python包打架。我之前做目标检测时,一个项目用TensorFlow 1.x,另一个用PyTorch 2.0,如果不隔离,根本没法共存。

2.3.1 创建虚拟环境

我推荐用 conda 或者 venv。这里我用 venv 演示,因为它轻量,而且ROS2官方也推荐:

# 安装python3-venv
sudo apt install python3-venv python3-pip

# 创建虚拟环境
python3 -m venv ~/ros2_ws/venv

# 激活环境
source ~/ros2_ws/venv/bin/activate

2.3.2 安装Python依赖

咱们这个课程需要的核心Python库:

库名 版本要求 用途
numpy >=1.21 数值计算
opencv-python >=4.5 图像处理
torch 2.0+ 深度学习框架
torchvision 0.15+ 模型与数据预处理
onnxruntime-gpu >=1.15 ONNX模型推理
pip install numpy opencv-python torch torchvision onnxruntime-gpu

避坑指南:安装PyTorch时,一定要去官网根据你的CUDA版本选择对应的命令。别直接用 pip install torch,它可能给你装CPU版本。我曾经在服务器上跑了一周才发现模型用的是CPU推理,那叫一个慢啊。

2.4 CUDA与TensorRT安装

这部分是重头戏。目标检测模型要在机械臂上实时运行,GPU加速是必须的。TensorRT能进一步优化推理速度,说白了就是让模型跑得更快。

2.4.1 CUDA安装

先确认你的显卡支持什么版本的CUDA:

nvidia-smi

看右上角的“CUDA Version”,比如显示12.2,那你就装CUDA 12.x系列。

我推荐用 runfile 方式安装,而不是deb包。为什么?因为runfile可以自定义安装路径,方便管理多个CUDA版本。

# 下载CUDA 12.2 runfile
wget https://developer.download.nvidia.com/compute/cuda/12.2.0/local_installers/cuda_12.2.0_535.54.03_linux.run

# 运行安装
sudo sh cuda_12.2.0_535.54.03_linux.run

安装时注意:不要安装驱动(因为之前已经装过了),只选CUDA Toolkit和CUDA Samples。

配置环境变量:

echo 'export PATH=/usr/local/cuda-12.2/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-12.2/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc

验证:

nvcc --version

2.4.2 cuDNN安装

cuDNN是深度神经网络的加速库,装完CUDA后必须配它。

# 下载cuDNN(需要NVIDIA账号,从官网下载)
# 解压并复制到CUDA目录
tar -xvf cudnn-linux-x86_64-8.9.4.25_cuda12-archive.tar.xz
sudo cp cudnn-*-archive/include/cudnn*.h /usr/local/cuda-12.2/include/
sudo cp -P cudnn-*-archive/lib/libcudnn* /usr/local/cuda-12.2/lib64/
sudo chmod a+r /usr/local/cuda-12.2/include/cudnn*.h /usr/local/cuda-12.2/lib64/libcudnn*

2.4.3 TensorRT安装

TensorRT是NVIDIA的推理优化引擎。咱们做目标检测,用TensorRT可以把模型推理速度提升2-5倍,这对机械臂的实时控制太重要了。

# 下载TensorRT(同样需要NVIDIA账号)
# 我用的版本是 TensorRT 8.6.1 for CUDA 12.x
tar -xzvf TensorRT-8.6.1.6.Linux.x86_64-gnu.cuda-12.0.tar.gz
sudo mv TensorRT-8.6.1.6 /usr/local/

# 配置环境变量
echo 'export LD_LIBRARY_PATH=/usr/local/TensorRT-8.6.1.6/lib:$LD_LIBRARY_PATH' >> ~/.bashrc
echo 'export PATH=/usr/local/TensorRT-8.6.1.6/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

# 安装Python包
cd /usr/local/TensorRT-8.6.1.6/python
pip install tensorrt-8.6.1-cp310-none-linux_x86_64.whl

重要提醒:TensorRT的Python包版本必须和你安装的TensorRT版本一致。我见过有人装了TensorRT 8.6,却用pip装了8.4的包,结果模型转换时各种报错。

2.5 环境验证

所有东西装完后,咱们跑一个简单的验证脚本,确保环境没问题:

import torch
import tensorrt as trt
import cv2

# 检查CUDA是否可用
print(f"CUDA available: {torch.cuda.is_available()}")
print(f"CUDA version: {torch.version.cuda}")

# 检查TensorRT版本
print(f"TensorRT version: {trt.__version__}")

# 检查OpenCV
print(f"OpenCV version: {cv2.__version__}")

# 创建一个简单的张量测试GPU
if torch.cuda.is_available():
    x = torch.randn(3, 640, 640).cuda()
    print(f"GPU tensor shape: {x.shape}")
    print("GPU test passed!")

如果输出都正常,恭喜你,环境搭建完成了。

总结一下:这一章我们搞定了Ubuntu系统、ROS2、Python虚拟环境、CUDA和TensorRT。这些是后续所有开发的基础。别嫌麻烦,环境搭好了,后面写代码才顺畅。

开发环境搭建整体流程 Ubuntu 22.04 LTS ROS2 Humble Python虚拟环境 CUDA 12.x + cuDNN TensorRT 8.6 关键说明 • 系统版本必须匹配 • ROS2 Humble + 22.04 • 虚拟环境隔离依赖 • CUDA版本看nvidia-smi • TensorRT需对应CUDA • 安装顺序不能乱 • 每步都要验证 • 环境变量配好 • 避免多版本冲突 • 用runfile装CUDA • 别装重复的驱动 • 虚拟环境独立管理