2. 开发环境搭建

说实话,搞机器人视觉协同控制,环境搭不好后面全是坑。我见过太多同学卡在依赖冲突上,一卡就是两三天。这一章咱们就把地基打牢。

先看整体架构,心里有个谱:

开发环境整体架构 Ubuntu 20.04 LTS ROS Noetic OpenCV 4.x PCL 1.12 MoveIt! 视觉定位 + 机械臂协同控制 Ubuntu 20.04 + ROS Noetic 是长期支持组合,稳定可靠

2.1 为什么选 Ubuntu 20.04 + ROS Noetic

你可能要问:为什么不用更新的 Ubuntu 22.04?

原因很简单——生态兼容性。ROS Noetic 是最后一个基于 Python 2/3 双支持的版本,也是 ROS 1 的最终 LTS 版本。我去年在一个项目里试过 Ubuntu 22.04 强行装 Noetic,结果依赖库打到一半就崩了,最后还是乖乖回退到 20.04。

组件推荐版本说明
操作系统Ubuntu 20.04.6 LTS2025年4月前安全更新
ROS 版本Noetic NinjemysROS 1 最终 LTS,2025年5月 EOL
Python3.8.10(系统自带)Noetic 原生支持 Python 3
编译器GCC 9.4.0与 PCL 1.12 完美兼容

2.2 Ubuntu 20.04 安装要点

我个人习惯用 最小安装 模式,不装多余软件包。这样系统干净,后面 ROS 编译时少很多冲突。

我的经验: 分区时给 / 分 40GB,/home 分 60GB 以上。你想想看,后面装 PCL 和 OpenCV 源码编译时,临时文件动不动就占 10GB+。

安装完成后,先做三件事:

  1. 换源——用清华或阿里源,apt 速度能快 10 倍
  2. 更新系统——sudo apt update && sudo apt upgrade -y
  3. 装基础工具——git、vim、curl、cmake、build-essential
sudo apt install -y git vim curl cmake build-essential \
  python3-pip python3-dev python3-venv \
  libeigen3-dev libflann-dev libboost-all-dev

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'
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
sudo apt update
注意: 如果密钥服务器连不上,试试 hkp://pgp.mit.edu:80。我在国内遇到过几次超时,换这个就好了。

2.3.2 安装完整桌面版

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

这个包包含了 ROS、rviz、gazebo、navigation stack 等核心组件。大概 2-3GB,看网速等 20-40 分钟。

2.3.3 初始化 rosdep

sudo rosdep init
rosdep update

rosdep 是用来解决依赖的。如果你在墙内,rosdep update 可能会失败。我当时的解决办法是:

# 使用代理或修改 rosdep 源
export ROSDISTRO_INDEX_URL=https://mirrors.tuna.tsinghua.edu.cn/rosdistro/index-v4.yaml
rosdep update

2.3.4 配置环境变量

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

验证安装:

roscore
# 看到 "started core service [/rosout]" 就对了

2.4 创建工作空间

ROS 的工作空间结构很清晰。我习惯用 catkin_ws 这个名字:

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws
catkin_make
source devel/setup.bash

记得把工作空间的 setup.bash 也加到 ~/.bashrc:

echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc

2.5 OpenCV 安装与配置

ROS Noetic 自带了 OpenCV 4.2,但版本偏老。咱们项目需要 4.5+ 才能用上最新的 SIFT 和 AKAZE 特性。

我推荐源码编译安装:

# 安装依赖
sudo apt install -y libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev

# 下载源码
cd ~
git clone https://github.com/opencv/opencv.git -b 4.5.5
git clone https://github.com/opencv/opencv_contrib.git -b 4.5.5

# 编译
cd opencv
mkdir build && cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
      -D CMAKE_INSTALL_PREFIX=/usr/local \
      -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
      -D WITH_TBB=ON \
      -D WITH_V4L=ON \
      -D WITH_QT=ON \
      -D WITH_OPENGL=ON ..
make -j$(nproc)
sudo make install
避坑指南: 编译时加上 -D WITH_QT=ON,这样 OpenCV 的 highgui 窗口能用 Qt 后端,显示图像更流畅。我曾经没加这个选项,调试时图像窗口卡得要命。

验证安装:

python3 -c "import cv2; print(cv2.__version__)"
# 输出 4.5.5

2.6 PCL 1.12 安装

PCL(Point Cloud Library)是点云处理的核心。ROS Noetic 的 apt 源里有 PCL 1.12,直接装就行:

sudo apt install -y ros-noetic-pcl-ros ros-noetic-pcl-conversions
sudo apt install -y libpcl-dev pcl-tools

验证:

pcl_viewer --version
# 输出 PCL 1.12 相关信息
注意: 不要从源码编译 PCL 1.13+,它和 ROS Noetic 的 pcl_ros 有 ABI 不兼容。我踩过这个坑,编译通过了,运行时 segfault,查了两天才发现是版本问题。

2.7 MoveIt! 安装与配置

MoveIt! 是机械臂运动规划的核心框架。安装命令很简单:

sudo apt install -y ros-noetic-moveit ros-noetic-moveit-msgs ros-noetic-moveit-visual-tools

但配置才是关键。我建议装完后跑一下官方 demo 验证:

roslaunch moveit_setup_assistant setup_assistant.launch

如果能正常启动图形界面,说明 MoveIt! 核心组件都装好了。

2.8 环境验证清单

全部装完后,我习惯跑一个快速验证脚本,确保所有组件能协同工作:

#!/bin/bash
echo "=== 环境验证 ==="
echo "ROS 版本: $(rosversion -d)"
echo "OpenCV 版本: $(python3 -c 'import cv2; print(cv2.__version__)')"
echo "PCL 版本: $(pcl_viewer --version 2>&1 | head -1)"
echo "MoveIt! 版本: $(dpkg -l ros-noetic-moveit-core 2>/dev/null | tail -1 | awk '{print $3}')"
echo "Python 版本: $(python3 --version)"
echo "=== 完成 ==="
组件验证命令预期输出
ROS Coreroscore启动成功,无报错
OpenCVpython3 -c "import cv2; print(cv2.__version__)"4.5.x
PCLpcl_viewer --version1.12.x
MoveIt!roslaunch moveit_setup_assistant setup_assistant.launchGUI 正常启动

2.9 常见问题与解决

  • roscore 启动失败: 检查 ~/.bashrc 里有没有 source /opt/ros/noetic/setup.bash,以及 ROS_MASTER_URI 是否被覆盖
  • OpenCV 编译报错: 多半是缺少依赖,sudo apt build-dep opencv 一键补齐
  • PCL 运行时 segfault: 检查是否混装了多个版本的 PCL,用 ldd 查看链接库路径
  • MoveIt! 启动黑屏: 检查显卡驱动,glxinfo | grep "OpenGL renderer"

我的建议: 环境搭建别急,每一步装完都验证一下。我见过太多人一口气装完所有东西,最后出问题了不知道从哪查起。分步验证,出了问题能精准定位。