大家好,我是虎哥,从今天开始,我将花一段时间,开始将自己从ROS1切换到ROS2,在上一篇中,我们Jeston TX1 核心模块,JetPack_4.6.3刷机后环境中安装了 ROS2 eloquent版本,并完成了初步的验证,这一章,我们依托Turtlesim演示节点来逐步展开。

        Turtlesim是用于学习ROS 2的轻量级模拟器。它说明了ROS 2在最基本的层面上所做的工作,让您了解以后将如何使用真实的机器人或机器人模拟。rqt是ROS2的GUI工具。在rqt中完成的所有操作都可以在命令行上完成,但它提供了一种更简单、更用户友好的方式来操作ROS2元素。本教程涉及核心ROS2概念,如节点、主题和服务的分离。所有这些概念将在以后的教程中详细阐述;本章,你只需设置工具并了解它们。

目录

一、硬件平台和测试环境说明

二、介绍Turtlesim

2.1 Turtlesim 安装 (确认已经安装的可以跳过)

2.2 Turtlesim 启动

2.3 Turtlesim 键盘控制运动

三、介绍rqt(ROS2的图形用户界面)

3.1 rqt安装(确认已经安装,可以跳过)

3.2 rqt 使用

3.3 尝试派生服务(Try the spawn service)

3.4 尝试set_pen服务(Try the set_pen service)

3.5 Remapping

一、硬件平台和测试环境说明

我自己使用的是TX1核心模块,安装ubuntu 18.04 的环境,采用了官方的最小系统安装,并完成了一些换源等基础操作。Jeston TX1 核心模块,JetPack_4.6.3刷机后,安装jtop。

jtop

 

nvidia@nvidia-desktop:~$ sudo lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.5 LTS
Release:    18.04
Codename:   bionic

安装完ROS2 eloquen版本后,打印环境变量:

printenv | grep -i ROS
LD_LIBRARY_PATH=/opt/ros/eloquent/opt/yaml_cpp_vendor/lib:/opt/ros/eloquent/opt/rviz_ogre_vendor/lib:/opt/ros/eloquent/lib/aarch64-linux-gnu:/opt/ros/eloquent/lib
AMENT_PREFIX_PATH=/opt/ros/eloquent
ROS_VERSION=2
ROS_LOCALHOST_ONLY=0
ROS_PYTHON_VERSION=3
PYTHONPATH=/opt/ros/eloquent/lib/python3.6/site-packages
PATH=/opt/ros/eloquent/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
ROS_DISTRO=eloquent

以上最基本确保了,我们的系统已经正确的安装了ROS2 eloquen版本。

注意:后续的所有指令都只是适用次环境,对于更高版本,有些命令未必适用,请自行匹配好对应的版本。

二、介绍Turtlesim

2.1 Turtlesim 安装 (确认已经安装的可以跳过)

安装

sudo apt update
​
sudo apt install ros-eloquent-turtlesim

确认是否已经安装

ros2 pkg executables turtlesim

有如下打印,就说明已经安装

2.2 Turtlesim 启动

打开终端,输入如下命令:我是使用nomachine 链接了EHub_tx1_tx2_E100系统。

ros2 run turtlesim turtlesim_node

模拟器窗口应该出现,中间有一只随机的乌龟。

 在命令下的终端中,您将看到来自节点的消息:

nvidia@ubuntu:~$ ros2 run turtlesim turtlesim_node
[INFO] [turtlesim]: Starting turtlesim with node name /turtlesim
[INFO] [turtlesim]: Spawning turtle [turtle1] at x=[5.544445], y=[5.544445], theta=[0.000000]

2.3 Turtlesim 键盘控制运动

打开一个新的终端,现在,你将运行一个新节点来控制第一个节点中的乌龟:

ros2 run turtlesim turtle_teleop_key

 此时,你应该已经打开三个窗口:运行turtlesim_node的终端、运行turtle_teleop_key的终端和turtlesim窗口。排列这些窗口,以便您可以看到turtlesim窗口。

 同时还可以激活运行turtle_teleop_key的终端,以便您能够控制turtlesim中的乌龟使用键盘上的箭头键控制乌龟。它将在屏幕上移动,使用其附带的“笔”绘制到目前为止所遵循的路径。

 注意:按一下箭头键只会使乌龟移动一小段距离,然后停止。长按,小乌龟会一直运动,直到边界。这么设定是因为,实际上,如果例如操作员失去了与机器人的连接,您不希望机器人继续执行指令。

您可以使用list命令查看节点及其关联的服务、主题和操作:

ros2 node list
ros2 topic list
ros2 service list
ros2 action list

你会在接下来的教程中了解有关这些概念的更多信息。由于本章节的目标仅是对turtlesim进行总体概述,因此我们将使用rqt(ROS2的图形用户界面)来进一步了解服务。

三、介绍rqt(ROS2的图形用户界面)

3.1 rqt安装(确认已经安装,可以跳过)

打开新终端以安装rqt及其插件:

sudo apt update
sudo apt install ros-eloquent-rqt*

安装完毕后,运行

rqt

3.2 rqt 使用

第一次运行rqt后,窗口将为空白。别担心;只需从顶部的菜单栏中选择Plugins>Services>Service Caller

 注意:rqt查找所有插件本身可能需要一些时间。如果单击插件,但没有看到服务或任何其他选项,则应关闭rqt,在终端中输入命令rqt--force discover。

 使用服务下拉列表左侧的刷新按钮,,以确保您的turtlesim节点的所有服务都可用。单击“服务”下拉列表以查看turtlesim的服务,然后选择/派生服务。

3.3 尝试派生服务(Try the spawn service)

让我们使用rqt来调用/派生服务。你可以从它的名字中猜到/spring将在turtlesim窗口中创建另一只海龟。

通过双击“表达式”列中的空单引号,为新海龟起一个独特的名字,如“turtle2”。您可以看到该表达式对应于name值,并且是string类型。

输入海龟的新坐标,如x=1.0和y=1.0。

 注意:如果您尝试生成一只与现有海龟同名的新海龟,如默认的“turtle1”,则在运行turtlesim_node的终端中会收到一条错误消息:

[ERROR] [turtlesim]: A turtle named [turtle1] already exists

编译完参数,你就可以调用了。要生成turtle2,您必须通过单击rqt窗口右上方的call按钮来调用服务。

         您将看到一只新海龟(同样是随机设计的)在您输入的x和y坐标处出现。如果您刷新rqt中的服务列表,您还将看到现在除了/turtle1/…之外,还有与新乌龟/turtle2/…相关的服务…。

3.4 尝试set_pen服务(Try the set_pen service)

尝试set_pen服务现在让我们使用/set_pen服务为turtle1提供一支独特的笔:

 r、g和b的值介于0和255之间,将设置画笔绘制的颜色,宽度设置线条的粗细。要让画笔1绘制一条清晰的红线,请将r值更改为255,将宽度值更改为5。更新值后不要忘记调用服务。

如果返回到运行turtle_teleop_node的终端并按下箭头键,您将看到turtle1的笔已更改。

 你可能已经注意到,没有办法移动turtle2。您可以通过将turtle1的cmd_vel主题重新映射( remapping)到turtle2来实现这一点。下面我将实现这点。

3.5 Remapping

打开一个新的终端,执行如下命令:

ros2 run turtlesim turtle_teleop_key --ros-args --remap turtle1/cmd_vel:=turtle2/cmd_vel

现在,当这个终端处于活动状态时,您可以移动turtle2,当运行turtle_teleop_key的另一个终端处于活动时,可以移动turtle 1。

 要停止模拟,只需关闭运行turtlesim_node和turtle_teleop_key的终端窗口。如果要保持这些终端打开,但结束模拟,可以在turtlesim_node终端中输入Ctrl+C,在遥操作终端中输入q。

以上就是我今天要分享的内容。纠错,疑问,交流: 911946883@qq.com