3. 环境搭建:ROS2安装、Python3环境配置、必备库安装与验证
说实话,做机器人算法这么多年,我见过太多同学卡在环境搭建这一步。代码写得再好,环境配不好,跑不起来,全是白搭。这一章咱们就把地基打牢。
我个人习惯把环境搭建分成三个层次:操作系统层(ROS2)、语言层(Python3)、工具库层(numpy、open3d、matplotlib)。一层一层来,别急。
本章核心目标:在 Ubuntu 22.04 上完成 ROS2 Humble + Python3 + 三大必备库的安装,并跑通验证程序。整个过程预计 30-40 分钟。
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 半天,最后发现是环境问题——那种感觉,真的挺崩溃的。