第二章:环境准备——Ubuntu系统安装与配置、NVIDIA驱动与CUDA安装、ROS/ROS2环境搭建

说实话,做自动驾驶仿真,最怕什么?

最怕环境没搭好,代码跑不起来,最后发现是驱动版本不对。

我刚开始搞仿真的时候,就吃过这个亏。装了个Ubuntu 20.04,兴冲冲地装好ROS,结果一跑仿真,GPU死活不干活。查了两天,发现是NVIDIA驱动和内核版本打架。嗯,从那以后,我每次装环境都老老实实按步骤来。

这一章,我就把这几年的踩坑经验给你捋一遍。你跟着做,基本不会出问题。

2.1 Ubuntu系统安装与配置

我个人习惯用Ubuntu 20.04 LTS。为什么?因为ROS 1的Noetic版本官方支持的就是20.04,ROS 2的Foxy也兼容。你想想看,要是装个22.04,ROS 1直接不支持,ROS 2还得折腾版本,何必呢?

安装步骤其实很简单:

  1. 去Ubuntu官网下载20.04.6 LTS的ISO镜像。
  2. 用Rufus或balenaEtcher做个启动U盘。
  3. BIOS里关掉Secure Boot,设置U盘启动。
  4. 分区建议:/ 分50GB,/home 分剩余空间,swap 给个8GB就够。
  5. 安装时选「最小安装」,省得一堆用不上的软件占地方。
我的小技巧: 装完系统第一件事,换国内源。我用的是清华源,速度飞快。命令就一行:sudo sed -i 's/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list,然后 sudo apt update && sudo apt upgrade -y

装完系统,记得装几个必备工具:

sudo apt install -y vim git curl wget net-tools htop

为什么要装这些?vim改配置文件,git拉代码,curl和wget下载东西,net-tools看IP,htop监控系统。我在项目里经常要远程连仿真机,没这些工具寸步难行。

2.2 NVIDIA驱动与CUDA安装

做自动驾驶仿真,GPU是核心。不管是Carla、AirSim还是自己写的渲染引擎,都离不开CUDA。

第一步:装NVIDIA驱动

我建议你别用Ubuntu自带的「附加驱动」工具,那个版本太老。直接去NVIDIA官网查你的显卡型号,下载对应驱动。

但更省事的方法是用PPA:

sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
sudo apt install nvidia-driver-535

装完重启,跑 nvidia-smi 看看。如果能看到显卡信息,说明驱动装好了。

注意: 我曾经遇到过装完驱动黑屏的情况。后来发现是Secure Boot没关。如果你也遇到,进BIOS关掉Secure Boot,或者给驱动签名。建议直接关掉,省心。

第二步:装CUDA

CUDA版本别追新。我推荐CUDA 11.8,兼容性最好。ROS 2的很多包、PyTorch、TensorFlow都支持这个版本。

去NVIDIA官网下载CUDA 11.8的runfile:

wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run
sudo sh cuda_11.8.0_520.61.05_linux.run

安装时注意:不要选安装驱动,只选CUDA Toolkit。因为驱动我们已经装好了。

装完配置环境变量:

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

验证一下:nvcc --version,看到版本号就对了。

避坑指南: 我曾经在装CUDA时选了全部组件,结果把驱动覆盖了,导致显卡不工作。所以记住:驱动和CUDA分开装,驱动用PPA或官网runfile,CUDA只装Toolkit。

2.3 ROS/ROS2环境搭建

ROS是自动驾驶仿真的灵魂。消息通信、节点管理、数据录制,全靠它。

ROS 1 Noetic 安装:

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
sudo apt update
sudo apt install ros-noetic-desktop-full

装完初始化:

sudo rosdep init
rosdep update
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc

ROS 2 Foxy 安装:

ROS 2和ROS 1可以共存。我一般两个都装,ROS 1跑老项目,ROS 2搞新开发。

sudo apt install software-properties-common
sudo add-apt-repository universe
sudo apt update && sudo apt install curl gnupg lsb-release
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 $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
sudo apt update
sudo apt install ros-foxy-desktop

配置环境:

echo "source /opt/ros/foxy/setup.bash" >> ~/.bashrc
我的习惯:~/.bashrc 里写个别名,方便切换。比如 alias ros1='source /opt/ros/noetic/setup.bash'alias ros2='source /opt/ros/foxy/setup.bash'。这样想用哪个就敲哪个,不用来回改文件。

验证安装:

开三个终端:

  1. 终端1:roscore(ROS 1)或 ros2 run demo_nodes_cpp talker(ROS 2)
  2. 终端2:rosrun turtlesim turtlesim_node(ROS 1)或 ros2 run demo_nodes_cpp listener(ROS 2)
  3. 终端3:rosrun turtlesim turtle_teleop_key(ROS 1)

如果能看到小乌龟动起来,或者节点间能通信,说明环境搭好了。

注意: ROS 1和ROS 2的通信机制不同,不能直接互通。如果你需要桥接,得装 ros1_bridge。我一般在项目初期就定好用哪个版本,避免后期来回折腾。

好了,环境准备就到这里。你跟着装完,应该能跑起一个基础的仿真环境了。下一章,我们开始搭建仿真场景,到时候会用到这些工具。