3. 感知算法概览
说实话,ROS2的环境搭建是很多人入门时第一个坎。我记得自己第一次装ROS1的时候,折腾了一整天,各种依赖冲突、源的问题,搞得头大。到了ROS2,情况好了不少,但坑还是有的。这一节,我就带你一步步把环境搭起来,顺便聊聊我踩过的那些坑。
3.1 ROS2的安装——选对版本很重要
ROS2的版本跟Ubuntu系统是绑定的。我个人习惯用Ubuntu 22.04,对应的ROS2版本是Humble Hawksbill。为什么选这个?因为Humble是LTS版本,稳定,社区支持好,我在项目里用了两年没出过大问题。
安装其实就几步,我直接贴命令:
# 1. 设置编码
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
# 2. 添加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
# 3. 安装ROS2
sudo apt update
sudo apt install ros-humble-desktop
# 4. 安装开发工具(后面编译工作空间要用)
sudo apt install ros-dev-tools
嗯,这里要注意:ros-humble-desktop 包含了常用的工具和库,大概2-3GB。如果你空间紧张,可以装 ros-humble-ros-base,但后面很多功能就得自己补了。我建议一步到位。
3.2 工作空间配置——你的代码仓库
ROS2的工作空间,说白了就是你放代码、编译代码的地方。我习惯叫它 colcon_ws,因为ROS2用colcon来编译。
创建工作空间很简单:
mkdir -p ~/colcon_ws/src
cd ~/colcon_ws
colcon build
第一次编译会生成 build、install、log 三个文件夹。你想想看,src 放源码,build 放中间文件,install 放编译结果,log 放日志。结构很清晰。
每次打开终端,都要source一下环境变量,不然ROS2找不到你的包:
source ~/colcon_ws/install/setup.bash
我建议把这行加到 ~/.bashrc 里,省得每次手动敲:
echo "source ~/colcon_ws/install/setup.bash" >> ~/.bashrc
source ~/.bashrc
3.3 话题与服务——ROS2的通信灵魂
ROS2里,节点之间怎么说话?靠话题(Topic)和服务(Service)。
话题是发布/订阅模式。一个节点发消息,其他节点收消息。比如摄像头节点发图像数据,图像处理节点订阅它。这是单向的、持续的。
服务是请求/响应模式。客户端发请求,服务端处理完返回结果。比如你让机器人抓个东西,它抓完了告诉你「好了」。这是双向的、一次性的。
我画个图帮你理解:
3.4 动手试试——跑一个话题示例
光说不练假把式。我们启动两个终端,看看话题怎么玩。
终端1:启动一个发布者
ros2 run demo_nodes_cpp talker
你会看到它每隔0.5秒发一条消息:Publishing: 'Hello World: 1'
终端2:启动一个订阅者
ros2 run demo_nodes_py listener
它会收到消息并打印:I heard: 'Hello World: 1'
你看,两个节点之间通过话题 /chatter 通信,一个发一个收,就这么简单。
ros2 topic list 查看当前所有话题,用 ros2 topic echo /chatter 直接监听话题内容。这些命令在调试时特别有用。
3.5 服务示例——一问一答
服务怎么用?我们跑一个加法服务。
终端1:启动服务端
ros2 run demo_nodes_cpp add_two_ints_server
终端2:调用服务
ros2 run demo_nodes_py add_two_ints_client 5 3
客户端发请求 5 + 3,服务端返回 8。这就是服务的典型用法。
source /opt/ros/humble/setup.bash 再试。我刚开始学的时候经常忘这步,后来养成习惯,开终端第一件事就是source。
3.6 避坑指南——我踩过的那些坑
- Python版本冲突: ROS2 Humble要求Python 3.8以上。我曾经在Ubuntu 20.04上装了Python 3.10,结果colcon编译报错。后来发现系统自带的Python 3.8最稳,别乱升级。
- 工作空间嵌套: 不要在
src里再建src,colcon会找不到包。我见过有人把代码放在~/colcon_ws/src/my_pkg/src,编译死活不通过。 - 话题名字写错: 发布者和订阅者的话题名字必须完全一致,大小写敏感。我调试时经常用
ros2 topic list确认名字对不对。
好了,环境搭好了,基本通信也跑通了。接下来你就可以开始写自己的节点了。记住,ROS2的核心就是节点之间的通信,把话题和服务玩熟了,后面就顺了。
- 安装ROS2:选对版本,用
ros-humble-desktop - 工作空间:
mkdir -p ~/colcon_ws/src,然后colcon build - 话题:发布/订阅,单向持续
- 服务:请求/响应,双向一次性
- 调试命令:
ros2 topic list、ros2 topic echo、ros2 service list
可可精品资料库