大家好,我是虎哥,从今天开始,我将花一段时间,开始将自己从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