机器人操作系统ROS2的Docker安装

机器人操作系统ROS2Docker安装

陈拓 2024/10/26-2024/12/03

1. ROS概述

ROS官网:https://www.ros.org/

机器人操作系统Robot Operating System (ROS)是一套开源的软件库和工具,可帮助你构建机器人应用程序。从驱动程序到最先进的算法,再到强大的开发人员工具,ROS可满足你下一个机器人项目的所有需求。

1.1 ROS版本

ROS有多个大版本和小版本。以下是主要的ROS版本信息:

  • ROS 1

ROS 1是ROS的第一个主要版本系列,包含多个发行版。主要的发行版包括:

  - ROS 1.0 (C Turtle)

  - ROS 1.1 (Diamondback)

  - ROS 1.2 (Electric Emys)

  - ROS 1.3 (Fuerte)

  - ROS 1.4 (Groovy)

  - ROS 1.5 (Hydro)

  - ROS 1.6 (Indigo)

  - ROS 1.7 (Jade)

  - ROS 1.8 (Kinetic)

  - ROS 1.9 (Lunar)

  - ROS 1.10 (Melodic)

  - ROS 1.11 (Noetic)

  • ROS 2

ROS 2是ROS的第二个主要版本系列,旨在提供更好的实时性、跨平台支持和安全性。主要的发行版包括:

  - ROS 2.0 (Ardent Apalone)

  - ROS 2.1 (Bouncy Bolson)

  - ROS 2.2 (Crystal Clemmys)

  - ROS 2.3 (Dashing Diademata)

  - ROS 2.4 (Eloquent Elusor)

  - ROS 2.5 (Foxy Fitzroy)

  - ROS 2.6 (Galactic Geochelone)

  - ROS 2.7 (Humble Hawksbill)

  - ROS 2.8 (Iron Irwini)

小版本更新通常用于修复bug、添加小功能或进行性能改进。这些小版本通常不会改变API或引入不兼容的更改。

  • 版本命名

ROS 1和ROS 2的版本命名通常使用动物名称,且每个版本的名称都是按字母顺序排列的。

  • 版本支持

ROS 1的最后一个版本是Noetic,计划在2025年停止支持。

ROS 2的每个版本都有不同的支持周期,通常是每个版本支持大约一年半到两年。

ROS的版本管理相对清晰,用户可以根据自己的需求选择合适的版本进行开发和部署。对于新项目,推荐使用ROS 2,因为它是未来的发展方向,提供了更好的功能和支持。

1.2 ROS 1和 ROS 2的主要区别

1.2.1 通信机制

ROS 1:基于 TCPROS 和 UDPROS 进行节点间通信,主要依赖于中心式的主节点(master)进行节点的注册和发现。

ROS 2:使用基于 DDS(Data Distribution Service)的通信中间件,实现了去中心化的通信架构,节点可以直接发现和通信,提高了系统的可靠性和可扩展性。

1.2.2 实时性

ROS 1:在实时性方面有一定的局限性,虽然可以通过一些实时扩展来改善,但实现较为复杂。

ROS 2:从设计上考虑了实时性要求,支持硬实时和软实时应用,可以更好地满足机器人等对实时性要求较高的场景。

1.2.3 编程语言支持

ROS 1:主要使用C++和Python进行开发。

ROS 2:除了C++和Python外,还增加了对其他编程语言的更好支持,如C和Java等,使得开发者可以根据自己的需求选择更合适的编程语言。

1.3 使用Docker安装多个不同的ROS版本

使用Docker安装多个ROS版本是一种很好的方法,可以隔离不同项目的依赖,确保它们不会相互冲突。

2. 在Docker中安装ROS2

2.1 当前官方推荐的ROS2版本

ROS以发行版(也称为distros)的形式发布,一次支持多个ROS发行版。一些发行版提供长期支持(LTS),这意味着它们更稳定并且经过了广泛的测试。其他发行版较新,生命周期较短,但支持较新的平台及其组成ROS包的较新版本。有关更多详细信息,请参阅发行版列表。通常,每年的世界海龟日(5月23日)都会发布一个新的ROS发行版,而LTS发行版则会在偶数年发布。

Ros2有foxy、Galactic、Humble Hawksbil与Iron Irwini多个版本。

‌其中Humble Hawksbill‌发布于2022年11月18日,是一个LTS版本,支持时间为5年。Humble更加稳定且易于维护,包括许多新的质量等级1的软件包,以及对不同平台和体系结构的改进。它还改进了安全性,引入了对DDS安全插件的支持。支持Ubuntu 22.04 (Jammy Jellyfish)、macOS 12 (Monterey)和Windows 11‌。

我们安装Humble Hawksbill。

官方Humble安装文档

https://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debs.html

2.2 通过SSH操作Linux服务器

参考《Win10命令窗口的SSH和SFTP操作》

https://blog.youkuaiyun.com/chentuo2000/article/details/119918637?spm=1001.2014.3001.5502

2.3 Tier层级和系统要求

https://www.ros.org/reps/rep-2000.html

  • Tier层级与操作系统的对应关系

Humble Hawksbill目前基于Debian的目标平台是:

Tier 1: Ubuntu Linux - Jammy (22.04) 64-bit

Tier 3: Ubuntu Linux - Focal (20.04) 64-bit

Debian Linux - Bullseye (11) 64-bit

在ROS社区中,Tier 1和Tier 3通常指的是支持和维护的不同级别,这主要适用于ROS的软件包和工具。这些级别帮助用户了解哪些软件包得到了积极的支持和维护,以及它们在不同ROS发行版中的可用性。以下是这些级别的官方定义:

Tier 1:平台会频繁接受我们的单元测试套件和其他测试工具的测试,包括持续集成作业、夜间作业、打包作业和性能测试。开发团队会优先修复这些平台中发现的错误或缺陷。Tier 1平台中发现的重大错误可能会影响发布日期,我们会努力在新版本发布之前解决Tier 1平台中所有已知的高优先级错误。

Tier 2:平台需要定期进行CI测试,该测试会同时运行构建和测试,并公开结果。预计CI将在ROS发行版当前状态发生相关变化后至少一周内运行。可能不会提供软件包级别的二进制软件包,但鼓励提供已构建工作区的可下载存档。Tier 2平台的已发布产品版本中可能存在错误。Tier 2平台中的已知错误将根据资源可用性尽最大努力解决,并且可能会也可能不会在新版本发布之前得到纠正。一个或多个实体应承诺继续支持该平台。

Tier 3:3层平台是指社区报告表明版本功能正常的平台。开发团队不会在第3层平台上运行单元测试套件或执行任何其他测试。平台必须提供最新安装说明才能列入此类别。社区成员可以为这些平台提供帮助。

  • 查看我的系统架构和版本

lsb_release -a

符合Tier 1。

2.4 Ubuntu升级

以Tier 1安装ROS2要求Ubuntu22.04。如果你的系统版本目前是Ubuntu20.4,可以参考《ssh远程升级Ubuntu20.04到Ubuntu 22.04》一文进行升级。

https://blog.youkuaiyun.com/chentuo2000/article/details/144306625?spm=1001.2014.3001.5501

2.5 安装Docker

见《Ubuntu 22.04安装Docker》一文。

https://blog.youkuaiyun.com/chentuo2000/article/details/144750082?spm=1001.2014.3001.5501

  • 查看Docker服务的状态

Docker服务在每次系统重启后会自动启动。可以用下面的命令查看Docker服务的状态:

sudo systemctl status docker

2.6 ROS2官方Docker镜像osrf/ros

2.6.1 ROS2官方Docker镜像osrf/ros介绍

ROS2官方Docker镜像osrf/ros是由开源机器人基金会Open Source Robotics Foundation (OSRF) 提供的,用于简化ROS2环境搭建和部署的一系列Docker镜像。这些镜像包含了不同版本的ROS2,以及一些预装的依赖和工具,使得用户可以快速开始ROS2的开发和测试工作,而无需手动配置环境。

镜像osrf/ros通常包含以下几个方面的功能:

  • 预装ROS2:镜像中已经预装了指定版本的ROS2,用户可以直接使用ROS2提供的功能和工具。
  • 预装依赖:为了运行ROS2,镜像中还包含了必要的依赖库和工具,如Python、pip、git等。
  • 环境配置:镜像中可能已经配置好了环境变量,如ROS_PACKAGE_PATH、LD_LIBRARY_PATH等,以便用户可以直接使用ROS2命令。
  • 桌面环境:某些标签的镜像,如humble-desktop-full,提供了完整的桌面环境,包括图形用户界面和一些桌面应用程序,如RViz和rqt,这些工具对于ROS2的可视化和调试非常有用。
  • 易于扩展:用户可以基于这些官方镜像创建自己的定制镜像,添加特定的软件包或工具,以满足特定的开发需求。
  • 跨平台:Docker镜像可以在不同的操作系统上运行,这意味着你可以在Windows、Linux或macOS上使用相同的ROS2环境。
2.6.2 查看ROS2官方Docker镜像osrf/ros中所有可用的ROS2 Humble版本

在官方Docker网址:

https://hub.docker.com/r/osrf/ros/tags

中查看 osrf/ros 镜像的所有可用标签(对应不同的ROS2版本)

Ctrl + F搜索Humble

  • humble-desktop-full

点击Copy复制拉取命令:

docker pull osrf/ros:humble-desktop-full

  • humble-desktop-full-jammy

拉取命令:

docker pull osrf/ros:humble-desktop-full-jammy

  • humble-simulation

拉取命令:

docker pull osrf/ros:humble-simulation

  • humble-simulation-jammy

拉取命令:

docker pull osrf/ros:humble-simulation-jammy

  • humble-desktop

拉取命令:

docker pull osrf/ros:humble-desktop

  • humble-desktop-jammy

拉取命令:

docker pull osrf/ros:humble-desktop-jammy

2.6.3 Ros2 humble各版本的区别
  • 关于-jammy后缀

通过查看Ubuntu版本:lsb_release -a

可知jammy代表Ubuntu 22.04 LTS,所以,带有-jammy后缀的镜像是针对Ubuntu 22.04 LTS构建的。

  • humble-desktop、humble-simulation和humble-desktop-full的区别

humble-desktop:这个镜像提供了ROS2 Humble版本的基础桌面环境,包括了ROS2的核心库、命令行工具以及一些基本的GUI工具,如RViz和rqt。它适合需要图形界面进行开发和测试的用户。

humble-simulation:这个镜像专门针对需要进行仿真工作的ROS2用户。它除了包含humble-desktop的所有功能外,还额外包含了用于仿真的工具和软件包,适合需要进行机器人仿真的用户。

humble-desktop-full:这个镜像提供了一个完整的ROS2 Humble版本桌面环境,包括了所有桌面版的功能,可能还包含了更多的工具和软件包,适合需要全面开发环境的用户。

2.7 在Docker中安装ROS2

  • 拉取ROS2 Humble镜像

使用以下命令来拉取2个ROS2 Humble镜像:

docker pull osrf/ros:humble-desktop-full

docker pull osrf/ros:humble-desktop

  • 查看osrf/ros镜像

重新打开一个命令窗口查看。

docker images osrf/ros

  • 查看Docker中所有的镜像

docker images

或者

docker image ls

  • 单独安装软件包

查找可以的软件包:

apt-catche search ros-kinetic

安装指定的软件包,例如安装:slam-gmapping

sudo apt install ros-kinetic.slam-gmapping

slam-gmapping是ROS2的一个导航和SLAM(同时定位与地图构建)软件包,它提供了使用gmapping算法进行SLAM的功能。

3. 从Docker容器中运行ROS2

3.1 启动容器

在Docker中安装ROS2之后,可以运行一个新容器来使用humble镜像:

语法:docker run -it --rm <镜像名称>:<标签>

docker run -it --rm osrf/ros:humble-desktop-full

其中:osrf/ros:humble-desktop-full是Docker中的一个ROS2镜像。

osrf/ros是镜像名称。

humble-desktop-full是标签。

这个命令将启动一个新的容器来运行ROS2,在Docker容器中就好像在操作一个虚拟机一样。

3.2 查看帮助

ros2 -h

3.3 查看Docker中已经在运行的容器

  • 查看容器基本信息

另外打开一个命令窗口,执行命令:

docker ps -a

容器ID:8abad7386fed

NAMES:Docker随机生成,每次都不一样,名字可以代替ID使用,而且更容易记忆。

  • 查看更多的容器信息

如果你想了解容器的更多信息,比如它们运行的镜像、创建时间、状态等,你可以使下面的命令:

docker inspect 8abad7386fed

3.4 ROS2测试

  • 在上面创建的容器中运⾏demo_nodes_cpp的listener

通过以下命令启动一个数据的订阅者节点:

ros2 run demo_nodes_cpp listener

开始监听talker。

  • 新建⼀个terminal,创建容器,运⾏demo_nodes_cpp的talker

docker run -it --rm osrf/ros:humble-desktop-full

通过以下命令启动一个数据的发布者节点:

ros2 run demo_nodes_cpp talker

listener接收到talker的消息:

3.5 退出容器

exit

退出容器后通常这个运行的容器也就停止了,用docker ps -a命令查看一下如果容器没有停止,可以用下面的命令停止。

3.6 停止正在运行的容器

指定ID停止:

docker stop 8abad7386fed

3.7 删除容器

删除容器之前应先停止。通常容器停止之后就自动删除了:

如果没有删除,可以用下面的命令手动删除容器:

docker container rm 8abad7386fed

4. 启用Windows上的X11服务器VcXsrv

我们的远程Linux服务器上没有安装图形界面,而后面的小海龟测试需要在我本地的Windows系统上显示图形界面,我们可以利用X11服务进行图形界面的显示。

我们的ROS2是安装在Docker中的,我们需要用X11方式实现的Docker容器中的应用图形界面可视化。

X服务的安装、启动见《Windows通过X11转发显示远程Linux上的图形界面》一文。

https://blog.youkuaiyun.com/chentuo2000/article/details/144892375?spm=1001.2014.3001.5501

4.1 启动Windows的X Server

在Windows上运行Xlaunch,启动Windows的X11服务器VcXsrv。

X Server启动后,开始监听远程X转发。桌面右下角会出现X服务图标:

4.2 测试

在Ubuntu上运行xeyes:

在windows系统界面上显示Ubuntu系统上运行的图形界面app:

OK!

现在我们就可以在Windows系统上看到在远程Linux系统命令行中运行的图形界面程序了。Linux有无桌面都可以。

5. 创建工作目录

mkdir ~/ros2_humble

cd ~/ros2_humble

6. 安装Qt平台插件

因为下面要演示的小海龟程序Turtlesim使用了Qt,所以需要安装支持库。

  • 安装所有与libxcb相关的库

sudo apt install libxcb-*

  • 查看所有已安装的libxcb-*包

dpkg -l | grep libxcb

  • 查看详细安装情况:

sudo apt policy libxcb-*

7. 用小海龟模拟器TurtleSim测试

在ROS 2中,Turtlesim是一个用于学习ROS 2的轻量级2D模拟器,可以通过键盘控制小海龟的移动,通常用于演示和测试基本的ROS 2功能,帮助理解ROS的工作原理。安装操作要在Docker容器内部进行。

7.1 启动Docker容器

  • 启动humble-desktop-full的Docker容器

docker run -it --rm osrf/ros:humble-desktop-full

这将启动一个新的容器,在Docker容器中就好像在操作一个虚拟机一样。

参数说明:

-it:是两个参数的组合

-i:选项表示在容器中打开一个交互式会话。

-t:选项表示为会话分配一个伪tty。

--rm:参数是用来在容器退出之后自动删除容器的。

osrf/ros:镜像名称(REPOSITORY 代码仓库)

humble-desktop-full:标签(TAG)

  • 查看Docker中已经在运行的容器

ssh登录一个新的窗口

docker ps -a

7.2 在容器中安装turtlesim

  • 安装

sudo apt update

sudo apt install ros-humble-turtlesim

  • 检查是否安装了该软件包

ros2 pkg executables turtlesim

这里列出了turtlesim包的可执行文件:

turtlesim draw_square

turtlesim mimic

turtlesim turtle_teleop_key

turtlesim turtlesim_node

ROS2的可执行文件由两部分组成前面一部分是包名<package_name>,后面一部分是可执行文件 <executable_name>。

其中:包turtlesim是小海龟仿真器,最为核心可执行文件是turtlesim_node节点,该节点提供小海龟仿真器的可视化界面。

turtlesim包的可执行文件路径:

7.3 设置ROS2环境变量

在Docker终端中配置ROS2环境。

  • ROS2的环境变量bash脚本文件/opt/ros/humble/setup.bash

ls -l /opt/ros/humble/setup.bash

在打开一个新的bash shell会话时,需要加载这些环境变量。这样,当前会话就能使用ROS2的各种工具和功能了。

  • 设置ROS2的环境变量

在容器内执行命令:

source /opt/ros/humble/setup.bash

这将在当前会话中加载Ros2的环境变量。

详细说明见官方文档:

https://docs.ros.org/en/humble/Tutorials/Beginner-CLI-Tools/Configuring-ROS2-Environment.html

7.4 设置X11服务环境变量DISPLAY

有关X11的详细说明见《什么是X11转发》

https://blog.youkuaiyun.com/chentuo2000/article/details/144420392

《Windows通过X11转发显示远程Linux上的图形界面》。

https://blog.youkuaiyun.com/chentuo2000/article/details/144892375

我们的远程Linux服务器上没有安装图形界面,而后面的小海龟测试需要在我本地的Windows系统上显示图形界面,我们可以利用X11进行图形界面的显示。

X11由服务器和客户端组成,如下图所示。

服务器X server computer是本地Windows系统,用来显示图形界面,客户端X client computer是远程Linux系统上运行的程序。

  • 获取显示号和屏幕号

在后面“通过XLaunch配置X11服务”小节中,配置完X11服务后,桌面右下角会出现X服务图标,将鼠标悬停在X服务的图标上,即可看到显示号和屏幕号,如图:

  • 设置DISPLAY的环境变量

export DISPLAY=192.168.137.1:0.0

其中局域网连接的X服务是192.168.137.1:0.0,显示号和屏幕号是:0.0。

X服务器的IP地址192.168.137.1,也就是我的Windows系统的IP地址。

  • 查看当前的DISPLAY环境变量设置:

echo $DISPLAY

  • 宿主机系统的环境变量和Docker内部的环境变量

在《Windows通过X11转发显示远程Linux上的图形界面》一文中我们已经为宿主机设置过环境变量DISPLAY,但是在Docker内部相当于在一个虚拟机内部,环境变量需要重新设置。

7.5 启动turtlesim节点

  • ROS2 run

ros2 run命令从包中启动可执行文件,其格式为:

ros2 run <package_name> <executable_name>

  • 在Docker中运行以下命令来启动turtlesim节点

ros2 run turtlesim turtlesim_node

这里,包名称为turtlesim,可执行文件名称为turtlesim_node。

生成一个名为turtle1的小海龟,所处位置是x=5.54y=5.54,朝向角度为0度。

Windows屏幕上弹出小海龟窗口:

此窗口时2D仿真平台,里面有一只小海龟。每次运行turtlesim_node会随机出现不同的小海龟。

  • 查看turtlesim节点发布的话题

ros2 topic list

  • 查看/turtle1/pose发布的数据

ros2 topic echo /turtle1/pose

数据显示会一直持续,直到按下Ctrl +C

7.6 启动控制turtlesim节点的两种方式介绍

  • 使用docker exec命令连接到运行ROS 2的Docker容器
  • 直接打开一个独立的ROS 2 Docker容器并执行命令

这两种方法的主要区别在于容器的生命周期和上下文环境。

7.6.1 使用docker exec命令连接到已经运行的ROS2容器
  • 容器复用

docker exec允许你在已经运行的容器中执行命令,这意味着你不需要为每个命令启动一个新的容器。这样可以节省资源,因为你不需要重复创建和销毁容器。

  • 上下文环境

使用docker exec时,你执行的命令将在现有的容器环境中运行,这意味着你可以直接访问容器内部的文件系统、网络设置和其他环境变量。

  • 交互性

docker exec通常用于执行短期的命令或脚本,而不是长期运行的服务或应用。如果你需要交互式会话,可以使用docker exec -it来启动一个交互式shell。

  • 容器生命周期

docker exec命令不会创建新的容器实例,它在现有的容器上执行命令。因此,当命令执行完毕后,容器仍然保持运行状态。

7.6.2 直接打开一个新的ROS 2 Docker容器实例

直接使用docker run启动一个新的容器会创建一个新的容器实例,这个实例有自己的文件系统和网络配置。

  • 独立环境

每个新容器都是独立的,有自己的环境变量和配置。这意味着你在一个干净的环境中运行ros2 run turtlesim turtle_teleop_key,不会受到其他容器状态的影响。

  • 容器生命周期

使用docker run启动的容器在命令执行完毕后通常会退出。如果你使用了--rm标志,容器在退出后会被自动删除。

  • 资源消耗

每次执行命令都需要创建和启动一个新的容器,这可能会消耗更多的系统资源,尤其是在频繁执行命令时。

总之,使用docker exec适合于需要在现有容器中执行命令,或者当你想要在一个持久化的环境中运行多个命令时。

直接打开一个独立的容器适合于需要隔离环境,或者执行一次性命令时。

在ROS 2的上下文中,如果你需要与turtlesim节点交互,并且希望保持交互式的控制,可能会更倾向于使用docker exec来连接到一个已经运行的容器。如果你需要一个干净的环境来运行turtle_teleop_key,或者你希望在每次运行时都有一个全新的环境,那么直接启动一个新的容器可能更合适。

7.7 使用docker exec命令连接已经运行的ROS2容器操作

  • 打开一个新的终端
  • 在宿主机系统中查看Docker中已经在运行的容器

docker ps -a

记住容器名为flamboyant_feynman,下面的命令要用到。

  • 使用docker exec命令连接到运行ROS2的Docker容器

docker exec -it flamboyant_feynman /bin/bash

这将打开一个bash会话,让你可以在容器内运行命令。

可以看到,在使用docker exec命令到已经运行ROS2的Docker容器时ID号是相同的。

  • 设置ROS2的环境变量

source /opt/ros/humble/setup.bash

 这将在当前会话中加载Ros2的环境变量。这样当前会话就能使用ROS2的各种工具和功能了。

  • 启动turtlesim turtle_teleop_key

ros2 run turtlesim turtle_teleop_key

执行上述命令后,我们就可以使用方向键来控制turtle的移动了。每按一次方向键,turtle就会移动一小段距离。

注意:鼠标的焦点在这个控制窗口中才能移动小海龟。

方向:

G|B|V|C|D|E|R|T

东|东南|南|西南|西|西北|北|东北

上箭头正走,下箭头倒走,向左箭头逆时针旋转,向右箭头顺时针旋转。

  • 查看运行小海龟的窗口

可以查看所进行的操作。

此时,你应该有三个打开的窗口:一个正在运行的终端turtlesim_node、一个正在运行的终端turtle_teleop_key和一个TurtleSim窗口。排列这些窗口,以便你可以看到TurtleSim 窗口,同时让正在运行的终端turtle_teleop_key处于活动状态,以便你可以控制TurtleSim中的海龟。

7.8 直接打开一个新的ROS 2 Docker容器实例

  • 打开一个新的终端
  • 启动容器

docker run -it --rm osrf/ros:humble-desktop-full

  • 配置ROS2环境

source /opt/ros/humble/setup.bash

  • 启动turtlesim turtle_teleop_key

ros2 run turtlesim turtle_teleop_key

其他操作和上面的方法相同。

7.9 使用命令行工具发送速度命令

如果你不想使用键盘控制,也可以使用ros2 topic pub命令发送速度命令。

  • 打开一个新的终端
  • 启动容器

docker run -it --rm osrf/ros:humble-desktop-full

  • 配置ROS2环境

source /opt/ros/humble/setup.bash

  • 发送速度命令的例子

ros2 topic pub /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.0}}"

这个命令会让海龟以2米/秒的速度沿x轴正方向移动。

7.10 使用Python脚本发送速度命令

你还可以使用Python脚本来发送速度命令。

  • 安装nano编辑器

cd /opt/ros/humble/lib/turtlesim

apt update

apt install nano

  • 创建一个Python脚本文件turtle_teleop.py

nano turtle_teleop.py

  • 将下面的代码复制到turtle_teleop.py中
import rclpy
from rclpy.node import Node
from geometry_msgs.msg import Twist

class TurtleTeleop(Node):
    def __init__(self):
        super().__init__('turtle_teleop')
        self.publisher_ = self.create_publisher(Twist, '/turtle1/cmd_vel', 10)
        self.timer = self.create_timer(0.1, self.timer_callback)  # 100 Hz

    def timer_callback(self):
        msg = Twist()
        msg.linear.x = 2.0  # 2 m/s forward
        msg.angular.z = 0.0  # No rotation
        self.publisher_.publish(msg)
        self.get_logger().info('Published velocity command')

def main(args=None):
    rclpy.init(args=args)
    turtle_teleop = TurtleTeleop()
    rclpy.spin(turtle_teleop)
    turtle_teleop.destroy_node()
    rclpy.shutdown()

if __name__ == '__main__':
    main()

保存,退出。

这个Python脚本会创建一个节点,定期发布速度命令到/turtle1/cmd_vel话题,使海龟以2米/秒的速度沿x轴正方向移动。

  • 运行turtle_teleop.py

首先让小海龟复位:

ros2 service call /reset std_srvs/srv/Empty "{}"

运行Python脚本:

python3 turtle_teleop.py

7.11 关闭turtlesim

要停止模拟,你可以在turtlesim_node终端中输入Ctrl + C,然后在turtle_teleop_key终端中输入q。

8. 快速启动

熟悉了前面的内容,以后的操作按下面的步骤进行即可。

8.1 快速启动turtlesim节点

  • 启动容器

docker run -it --rm osrf/ros:humble-desktop-full

  • 配置ROS2环境

source /opt/ros/humble/setup.bash

  • 设置X11服务环境变量DISPLAY

export DISPLAY=192.168.137.1:0.0

  • 启动turtlesim节点

ros2 run turtlesim turtlesim_node

8.2 快速启动控制turtlesim的节点

8.2.1 连接到已经打开的ROS 2 Docker容器实例
  • 打开一个新的终端
  • 在宿主机系统中查看Docker中已经在运行的容器

docker ps -a

记住容器名为flamboyant_feynman,下面的命令要用到。

  • 使用docker exec命令连接到运行ROS2的Docker容器

docker exec -it flamboyant_feynman /bin/bash

  • 设置ROS2的环境变量

source /opt/ros/humble/setup.bash

  • 启动turtlesim turtle_teleop_key

ros2 run turtlesim turtle_teleop_key

8.2.2 打开一个新的ROS 2 Docker容器实例
  • 打开一个新的终端
  • 启动容器

docker run -it --rm osrf/ros:humble-desktop-full

  • 配置ROS2环境

source /opt/ros/humble/setup.bash

  • 启动turtlesim turtle_teleop_key

ros2 run turtlesim turtle_teleop_key

9. 删除Docker中的ROS2镜像

  • 查看所有可用的镜像

docker images

或者

docker image ls

  • 删除指定的镜像

docker rmi [镜像ID]

例如:

docker rmi dc5be911b375

或者

docker rmi <镜像名称>:<标签>

例如:

docker rmi osrf/ros:humble-desktop

参考文档

  1. Ubuntu22.04安装Docker并搭建ros2环境
    https://blog.youkuaiyun.com/Songqiang777/article/details/132686455

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晨之清风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值