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 安装步骤
- 设置locale:确保系统支持UTF-8
- 添加ROS2源:从官方仓库或镜像站添加
- 安装ROS2基础包:我建议装
ros-humble-desktop,包含可视化工具 - 安装编译工具:
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。这些是后续所有开发的基础。别嫌麻烦,环境搭好了,后面写代码才顺畅。