3. 环境搭建:ROS2安装、Python3环境配置、必备库安装与验证

说实话,做机器人算法这么多年,我见过太多同学卡在环境搭建这一步。代码写得再好,环境配不好,跑不起来,全是白搭。这一章咱们就把地基打牢。

我个人习惯把环境搭建分成三个层次:操作系统层(ROS2)、语言层(Python3)、工具库层(numpy、open3d、matplotlib)。一层一层来,别急。

本章核心目标:在 Ubuntu 22.04 上完成 ROS2 Humble + Python3 + 三大必备库的安装,并跑通验证程序。整个过程预计 30-40 分钟。

环境搭建三层架构 第1层:操作系统层 Ubuntu 22.04 LTS + ROS2 Humble 提供底层通信、节点管理、消息传递机制 第2层:语言层 Python 3.10+(系统自带) 编写算法逻辑、调用ROS2接口、数据处理 第3层:工具库层 numpy + open3d + matplotlib 数值计算、点云可视化、数据图表绘制 安装顺序 ① ROS2 Humble ② Python3 确认 ③ pip 升级 ④ numpy ⑤ open3d ⑥ matplotlib ⑦ 联合验证

3.1 ROS2 Humble 安装

ROS2 版本很多,为什么选 Humble?因为它对应 Ubuntu 22.04,长期支持版,稳定。我之前在项目里用过 Galactic,踩了不少坑,后来切到 Humble 就再没折腾过版本兼容问题。

安装步骤其实就几条命令,但有几个细节容易翻车。我直接给脚本,你照着敲就行。

3.1.1 设置语言环境与源

# 设置 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
export 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
sudo apt update

注意:如果你在国内,ROS2 官方源可能很慢。我曾经等了一个小时没反应。建议换成国内镜像源,比如清华或中科大的。具体替换方法网上搜一下就有,这里不展开了。

3.1.2 安装 ROS2 Humble 桌面版

sudo apt install ros-humble-desktop -y

这个包大概 2-3 GB,取决于网速。安装过程中如果卡住,别慌,等就行。我建议你泡杯咖啡回来再看。

3.1.3 配置环境变量

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

嗯,这里有个小坑。如果你同时装了 ROS1,setup.bash 会冲突。我的做法是单独写个脚本,按需 source,而不是一股脑全塞进 .bashrc。不过初学者先这样用着,后面再优化。

3.1.4 验证安装

ros2 run demo_nodes_cpp talker

开另一个终端,运行:

ros2 run demo_nodes_py listener

如果看到 talker 在发 "Hello World",listener 在收,那就成了。我第一次看到这个的时候还挺激动的,虽然只是个 hello world,但意味着整个通信链路通了。

3.2 Python3 环境配置

Ubuntu 22.04 自带 Python 3.10,够用。但有几个点要确认。

3.2.1 确认 Python 版本

python3 --version

输出应该是 Python 3.10.x。如果版本低于 3.8,建议升级。不过 22.04 用户不用担心这个。

3.2.2 安装 pip 和虚拟环境

sudo apt install python3-pip python3-venv -y
pip3 install --upgrade pip

我的建议:每个项目单独建虚拟环境,别全局装库。我之前吃过亏——一个项目要 numpy 1.19,另一个要 1.24,全局装直接崩了。用 python3 -m venv 隔离,省心。

3.2.3 创建课程专用虚拟环境

python3 -m venv ~/ros2_lidar_env
source ~/ros2_lidar_env/bin/activate

激活后,终端前面会出现 (ros2_lidar_env) 字样。后面所有库都装在这个环境里。

3.3 必备库安装与验证

三大库,一个一个来。我按依赖关系排了顺序。

3.3.1 numpy

pip install numpy

验证:

python3 -c "import numpy as np; print(np.__version__); print(np.array([1,2,3]))"

输出类似 1.24.3 和 [1 2 3] 就对了。numpy 是后面所有计算的基础,点云处理、矩阵运算都靠它。

3.3.2 open3d

pip install open3d

这个库稍微大一点,因为它带了可视化前端。安装时间可能 1-2 分钟。

验证:

python3 -c "import open3d as o3d; print(o3d.__version__); print('Open3D works!')"

注意:如果你在服务器上装(没有显示器),open3d 的可视化功能会报错。但别担心,我们后面会教你怎么在无头模式下用 open3d 做点云处理。我曾在远程服务器上调试了整整两天才发现是显示的问题。

3.3.3 matplotlib

pip install matplotlib

验证:

python3 -c "import matplotlib.pyplot as plt; print('matplotlib ready')"

如果想看效果,可以跑个简单绘图:

python3 -c "
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
plt.plot(x, np.sin(x))
plt.title('Test Plot')
plt.savefig('test_plot.png')
print('Plot saved as test_plot.png')
"

3.4 联合验证:ROS2 + Python + 三大库

单独验证都过了,还得看它们能不能一起工作。我写了个小脚本,你跑一下:

#!/usr/bin/env python3
import rclpy
from rclpy.node import Node
import numpy as np
import open3d as o3d
import matplotlib.pyplot as plt

class EnvCheckNode(Node):
    def __init__(self):
        super().__init__('env_check_node')
        self.get_logger().info('环境验证节点启动')
        
        # numpy 验证
        arr = np.random.rand(3, 3)
        self.get_logger().info(f'numpy 随机矩阵:\n{arr}')
        
        # open3d 验证(不显示窗口)
        pcd = o3d.geometry.PointCloud()
        points = np.random.rand(100, 3)
        pcd.points = o3d.utility.Vector3dVector(points)
        self.get_logger().info(f'open3d 点云创建成功,点数: {len(pcd.points)}')
        
        # matplotlib 验证
        fig, ax = plt.subplots()
        ax.plot([0, 1], [0, 1])
        fig.savefig('/tmp/env_check_plot.png')
        self.get_logger().info('matplotlib 绘图保存成功')
        
        self.get_logger().info('✅ 所有库验证通过!')

def main(args=None):
    rclpy.init(args=args)
    node = EnvCheckNode()
    rclpy.spin_once(node, timeout_sec=1)
    node.destroy_node()
    rclpy.shutdown()

if __name__ == '__main__':
    main()

保存为 env_check.py,然后运行:

source ~/ros2_lidar_env/bin/activate
source /opt/ros/humble/setup.bash
python3 env_check.py

如果看到 ✅ 所有库验证通过!,恭喜你,环境搭建完成。

常见问题速查表

问题 原因 解决
ros2 命令找不到 未 source setup.bash 检查 ~/.bashrc 或手动 source
import open3d 报错 虚拟环境未激活 先 source 虚拟环境
matplotlib 中文乱码 缺少中文字体 安装 fonts-wqy-microhei
pip 安装超时 网络问题 使用国内镜像:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple

环境搭好了,后面就可以专心搞算法了。说实话,这一步虽然枯燥,但值得认真对待。我见过太多人后面 debug 半天,最后发现是环境问题——那种感觉,真的挺崩溃的。