ROS2入门¶
本指南将帮助你快速上手 ROS2,包括安装、配置和基本使用。
1.1 安装ROS2¶
系统要求: Ubuntu 22.04, Ubuntu 24.04。
1.1.1 明确你的系统版本¶
使用下面的命令明确你安装的 Linux 系统和系统版本。
系统 | 版本 | 版本代号 | 对应的 ROS2 版本 |
---|---|---|---|
Ubuntu | 20.04 | Focal Fossa (focal) | Foxy |
Ubuntu | 22.04 | Jammy Jellyfish(jammy) | Humble |
Ubuntu | 24.04 | Noble Numbat(noble) | Jazzy Jalisco |
关于这个表格,我想补充以下几点说明:
- Ubuntu 20.04 (Focal Fossa) 确实对应 ROS2 Foxy 版本。
- Ubuntu 22.04 (Jammy Jellyfish) 通常对应 ROS2 Humble 版本。
- Ubuntu 24.04 (Noble Numbat) 是最新的 LTS 版本,目前还没有明确对应的 ROS2 固定版本。它可能会使用 ROS2 的 Rolling 版本,这是一个持续更新的版本。
1.1.2 更新软件库并确保已经安装了 locale¶
更新软件
确保安装了 locale:
locale # 检查已安装的 locale
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
1.1.3 添加 ROS2 源¶
首先,确保启用了 Ubuntu Universe 软件库:
然后,添加 ROS 2 GPG 密钥:
sudo apt update && sudo apt install curl gnupg2 -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] https://mirrors.tuna.tsinghua.edu.cn/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
更新 apt 缓存:
1.1.4 安装 ROS 2 软件包。¶
您可以选择 桌面安装(推荐) 或者 基础安装:
桌面安装(推荐):包含 ROS、RViz、示例和教程。
# 20.04
sudo apt install ros-foxy-desktop
# 22.04
sudo apt install ros-humble-desktop
# 24.04
sudo apt install ros-jazzy-desktop
基础安装:包含通信库、消息包、命令行工具。没有 GUI 工具。
# 20.04
sudo apt install ros-foxy-ros-base
# 22.04
sudo apt install ros-humble-ros-base
# 24.04
sudo apt install ros-jazzy-ros-base
安装 colcon :
1.1.5 设置环境变量¶
每次打开新的 shell 时设置环境变量:
# 对于 20.04
source /opt/ros/foxy/setup.bash
# 对于 22.04
source /opt/ros/humble/setup.bash
# 对于 24.04
source /opt/ros/jazzy/setup.bash
你可以把它添加到你的 ~/.bashrc
或者 ~/.zshrc
中,这样每次启动一个终端就会自动加载 ROS2。
1.2 配置开发环境¶
1.2.1 本地安装 ROS2 和 VS Code¶
- 安装 VS Code 使用Microsoft的官方仓库安装VS Code:
sudo apt-get install wget gpg
wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > packages.microsoft.gpg
sudo install -o root -g root -m 644 packages.microsoft.gpg /etc/apt/trusted.gpg.d/
sudo sh -c 'echo "deb [arch=amd64,arm64,armhf signed-by=/etc/apt/trusted.gpg.d/packages.microsoft.gpg] https://packages.microsoft.com/repos/code stable main" > /etc/apt/sources.list.d/vscode.list'
rm -f packages.microsoft.gpg
sudo apt install apt-transport-https
sudo apt update
sudo apt install code
- 配置 VS Code 的 ROS2 插件
- 打开 VS Code
- 转到扩展页面(Ctrl+Shift+X)
- 搜索并安装以下插件:
- ROS
- C/C++
- Python
1.2.2 使用 VS Code Remote 远程连接¶
如果您已经在远程服务器上安装了ROS2,可以使用VS Code的Remote-SSH插件进行远程开发:
-
在本地VS Code中安装Remote-SSH插件
-
按下F1,输入”Remote-SSH: Connect to Host…”,然后输入远程服务器的SSH连接信息
-
VS Code将打开一个新窗口连接到远程服务器
-
在远程VS Code中安装ROS、C/C++和Python插件
-
打开远程服务器上的ROS2工作空间,开始开发
1.2.3 使用 Docker 安装 ROS2¶
-
安装 Docker: 官方教程
-
拉取 ROS2 Docker 镜像
-
运行 ROS2 容器
-
在容器中安装开发工具
-
使用 VS Code 的 Remote-Containers 插件连接到 Docker 容器 - 安装 Remote-Containers 插件 - 按 F1,输入 “Remote-Containers: Attach to Running Container…” - 选择之前创建的 ROS2 容器 - VS Code 将在容器内打开一个新窗口
-
在容器内的 VS Code 中安装 ROS、C/C++ 和 Python 插件
1.3 第一个ROS2程序: Hello World¶
1.3.1 创建ROS2工作空间¶
-
打开一个新的终端窗口
-
创建工作空间目录:
- 构建空工作空间:
- 设置环境变量:
1.3.2 创建一个简单的Publisher包¶
- 进入src目录:
- 使用ros2 pkg create命令创建一个新的包:
- 进入新创建的包目录:
- 在
py_pubsub
目录下创建一个新文件publisher_member_function.py
:
- 使用文本编辑器(如VS Code)打开
publisher_member_function.py
,并添加以下代码:
import rclpy
from rclpy.node import Node
from std_msgs.msg import String
class MinimalPublisher(Node):
def __init__(self):
super().__init__('minimal_publisher')
self.publisher_ = self.create_publisher(String, 'topic', 10)
timer_period = 0.5 # seconds
self.timer = self.create_timer(timer_period, self.timer_callback)
self.i = 0
def timer_callback(self):
msg = String()
msg.data = 'Hello World: %d' % self.i
self.publisher_.publish(msg)
self.get_logger().info('Publishing: "%s"' % msg.data)
self.i += 1
def main(args=None):
rclpy.init(args=args)
minimal_publisher = MinimalPublisher()
rclpy.spin(minimal_publisher)
minimal_publisher.destroy_node()
rclpy.shutdown()
if __name__ == '__main__':
main()
- 修改
setup.py
文件,在entry_points
部分添加以下内容:
1.3.3 构建和运行Publisher¶
- 回到工作空间根目录:
- 构建包:
- 设置环境变量:
- 运行talker节点:
你应该会看到类似以下的输出:
[INFO] [minimal_publisher]: Publishing: "Hello World: 0"
[INFO] [minimal_publisher]: Publishing: "Hello World: 1"
[INFO] [minimal_publisher]: Publishing: "Hello World: 2"
...
1.3.4 验证Publisher是否正常工作¶
-
打开一个新的终端窗口
-
运行以下命令来查看发布的消息:
你应该会看到类似以下的输出:
这就完成了创建和运行第一个ROS2程序的过程。这个简单的Publisher每隔0.5秒发布一条”Hello World”消息,并带有一个递增的计数器。
如果你想进一步扩展这个例子,可以考虑创建一个相应的Subscriber节点来接收和处理这些消息。这将帮助你更好地理解ROS2中的发布/订阅模式。
1.4 故障排除¶
在使用ROS2的过程中,你可能会遇到一些常见问题。以下是一些典型问题及其解决方法:
1.4.1 环境变量问题¶
症状: 运行ROS2命令时出现”Command not found”错误。
解决方法: 1. 确保已经source了ROS2的setup文件:
将<distro>
替换为你的ROS2版本(如foxy, humble等)。
- 将上述命令添加到你的
~/.bashrc
文件中,以便每次打开新终端时自动执行:
1.4.2 包找不到¶
症状: 使用ros2 run
或ros2 launch
时出现”Package not found”错误。
解决方法: 1. 确保你已经构建了包并source了工作空间:
- 检查包名是否正确,使用以下命令列出所有可用的包:
1.4.3 节点通信问题¶
症状: 发布者发布消息,但订阅者没有接收到。
解决方法: 1. 检查发布者和订阅者是否在同一个ROS域(ROS_DOMAIN_ID)中:
如果未设置,可以在~/.bashrc
中添加:
- 使用
ros2 topic list
和ros2 topic echo
命令检查话题是否正确发布:
1.4.4 编译错误¶
症状: 使用colcon build
时出现编译错误。
解决方法: 1. 检查是否安装了所有必要的依赖:
- 尝试清理构建文件夹后重新构建:
1.4.5 权限问题¶
症状: 运行ROS2命令时出现权限错误。
解决方法: 1. 检查文件权限:
- 如果需要,更改文件权限:
1.4.6 版本兼容性问题¶
症状: 不同计算机之间的节点无法通信。
解决方法: 1. 确保所有计算机使用相同版本的ROS2:
- 检查消息类型是否一致:
1.4.7 网络配置问题¶
症状: 在多机器设置中,节点无法发现或通信。
解决方法: 1. 检查防火墙设置,确保ROS2使用的端口(通常是7400和7401)是开放的。
-
在
~/.bashrc
中设置ROS_LOCALHOST_ONLY变量为0: -
确保所有机器都在同一个网络中,并且可以相互ping通。
如果你遇到的问题不在此列表中,建议查阅ROS2官方论坛或ROS Answers寻求更多帮助。记录错误信息和你尝试过的解决方法,这将有助于社区成员更好地帮助你解决问题。
参考资料¶
编辑者: 邓岂 孟世杰 创建时间: 2024-10-07 20:32 修改时间: 2024-10-07 20:32