2. 环境搭建:Ubuntu + ROS Noetic 安装与工作空间配置

做机器人开发,第一步就是搭环境。说实话,这一步劝退了很多人。

我记得刚入行那会儿,光装ROS就折腾了两天,各种依赖冲突、源不对、版本不匹配。后来带团队时发现,新人几乎都会在这上面卡一下。所以这一章,我带你把环境一次搞定。

2.1 为什么选 Ubuntu 20.04 + ROS Noetic?

ROS Noetic 是 ROS1 的最后一个长期支持版本。它只支持 Ubuntu 20.04。你想想看,如果你装了 Ubuntu 22.04,那 ROS Noetic 就装不上。反过来,如果你非要装 ROS2,那又是另一套体系了。

我个人习惯是:做 ROS1 开发,就用 Ubuntu 20.04 + Noetic。这个组合最稳,社区支持也最全。我在项目中遇到过好几次因为系统版本不对导致包装不上的情况,后来干脆统一用这个组合,省心很多。

核心要求:
  • 操作系统:Ubuntu 20.04 LTS(64位)
  • ROS 版本:Noetic Ninjemys
  • Python 版本:Python 3.8(Noetic 默认)

2.2 安装 Ubuntu 20.04

如果你已经有 Ubuntu 20.04 系统,直接跳到下一节。如果没有,我建议用双系统或者虚拟机。

嗯,这里要注意:千万别用 WSL。WSL 虽然方便,但 ROS 的图形化工具(比如 rviz、gazebo)跑不起来。我见过有人折腾 WSL 三天,最后还是老老实实装了双系统。

2.2.1 下载与制作启动盘

  1. 去 Ubuntu 官网下载 20.04 LTS 桌面版镜像
  2. 用 Rufus(Windows)或 balenaEtcher(macOS)制作启动 U 盘
  3. 重启电脑,从 U 盘启动

2.2.2 安装过程中的关键设置

  • 分区建议:/ 分区至少 50GB,swap 分区设为内存大小
  • 用户名:不要用中文,避免终端路径乱码
  • 软件更新:安装时勾选「为图形和 Wi-Fi 安装第三方软件」
我的小技巧:安装完成后,先执行 sudo apt update && sudo apt upgrade -y,把系统更新到最新。这一步能避免很多依赖问题。

2.3 安装 ROS Noetic

ROS 的安装流程其实很固定。说白了就是三步:加源、装包、初始化。但每一步都有坑,我一个个说。

2.3.1 添加软件源

打开终端,执行以下命令:

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

2.3.2 添加密钥

sudo apt install curl
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
我曾经踩过的坑:如果密钥添加失败,很可能是网络问题。可以试试用 hkp://keyserver.ubuntu.com:80 替代默认方式。或者换个时间段再试。

2.3.3 安装 ROS Noetic 完整版

sudo apt update
sudo apt install ros-noetic-desktop-full -y

这个包包含了 rviz、gazebo、导航栈等常用工具。如果你硬盘空间紧张,可以只装 ros-noetic-desktop,但我建议一步到位。

2.3.4 初始化 rosdep

sudo rosdep init
rosdep update

rosdep 是用来解决依赖的。你想想看,如果你写了一个包,里面用到了某个第三方库,rosdep 会自动帮你装好。没有它,你后面编译时会遇到一堆「找不到头文件」的错误。

2.3.5 设置环境变量

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

这一步很关键。如果不加,每次打开终端都要手动 source 一次。我习惯在 .bashrc 里也加上 source ~/catkin_ws/devel/setup.bash,这样工作空间也能自动加载。

2.3.6 验证安装

roscore

如果看到类似 started core service [/rosout] 的输出,说明安装成功。按 Ctrl+C 退出。

2.4 创建工作空间

工作空间是 ROS 项目的根目录。所有代码、配置文件都放在里面。我习惯叫它 catkin_ws,你也可以叫别的名字。

2.4.1 创建并初始化

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws
catkin_make

第一次运行 catkin_make 会生成 build 和 devel 两个文件夹。build 是编译中间文件,devel 是编译产物。你平时写代码主要在 src 目录下。

2.4.2 工作空间的结构

一个标准的 ROS 工作空间长这样:

catkin_ws/
├── src/          # 源代码目录
│   ├── package1/
│   ├── package2/
│   └── CMakeLists.txt  # 顶层 CMake 文件
├── build/        # 编译中间文件
└── devel/        # 编译产物(可执行文件、库等)
    └── setup.bash
重要:每次新建了包,都要回到 catkin_ws 目录下执行 catkin_make,然后 source devel/setup.bash,新包才能被识别。

2.5 测试你的环境

我们来写一个最简单的 ROS 节点,验证整个环境是否正常。

2.5.1 创建功能包

cd ~/catkin_ws/src
catkin_create_pkg test_pkg std_msgs rospy roscpp
cd ~/catkin_ws
catkin_make
source devel/setup.bash

2.5.2 编写发布者节点

在 test_pkg/src 目录下创建 talker.cpp:

#include "ros/ros.h"
#include "std_msgs/String.h"
#include <sstream>

int main(int argc, char **argv)
{
  ros::init(argc, argv, "talker");
  ros::NodeHandle n;
  ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter", 1000);
  ros::Rate loop_rate(10);

  int count = 0;
  while (ros::ok())
  {
    std_msgs::String msg;
    std::stringstream ss;
    ss << "hello world " << count;
    msg.data = ss.str();
    ROS_INFO("%s", msg.data.c_str());
    chatter_pub.publish(msg);
    ros::spinOnce();
    loop_rate.sleep();
    ++count;
  }
  return 0;
}

2.5.3 修改 CMakeLists.txt

在 test_pkg 的 CMakeLists.txt 中找到以下部分,取消注释并修改:

add_executable(talker src/talker.cpp)
target_link_libraries(talker ${catkin_LIBRARIES})

2.5.4 编译并运行

cd ~/catkin_ws
catkin_make
source devel/setup.bash
roscore &
rosrun test_pkg talker

如果看到 [ INFO] hello world 0 不断输出,说明环境完全正常。

2.6 本章知识体系

下面这张图帮你理清整个环境搭建的逻辑:

环境搭建核心流程 Ubuntu 20.04 LTS ROS Noetic catkin_ws 系统更新 & 驱动安装 添加源 → 安装 → 初始化 创建 → 编译 → 测试 ⚠️ 常见问题 • 网络问题导致密钥添加失败 → 换源或换时间 • 忘记 source setup.bash → 命令找不到

2.7 避坑指南

最后,我总结几个我这些年遇到过的坑:

  • Python 版本冲突:Noetic 默认用 Python 3。如果你装了 Anaconda,可能会把默认 Python 改成别的版本。我建议在 .bashrc 里显式指定 alias python=python3。
  • 权限问题:不要在 sudo 下运行 catkin_make。如果遇到权限错误,检查 src 目录的所有者:sudo chown -R 你的用户名 ~/catkin_ws。
  • 多版本 ROS 共存:如果你同时装了 ROS1 和 ROS2,环境变量会打架。我习惯用别名切换:alias ros1='source /opt/ros/noetic/setup.bash'。
我的建议:装好环境后,先跑一遍 ROS 官方教程里的 talker/listener 例子。这能帮你快速确认所有组件都正常工作。别急着写复杂代码,基础打牢了,后面才顺。

好了,环境搭建就到这里。记住:环境搭好了,后面的事就顺了。如果遇到问题,多看看终端输出的错误信息,大部分问题都能自己解决。

可可精品资料库