ROS初学之小乌龟

小乌龟turtlesim节点

启动节点

首先打开一个终端窗口,输入以下命令启动ROS节点管理器:

roscore

结果为:

然后再打开一个终端(不要关闭当前窗口),运行以下命令:

rosrun turtlesim turtlesim_node

执行输出类似:

然后会弹出turtlesim的界面如图:

然后将这几个终端最小化,记得不要关闭这两个终端。

turtlesim节点

新打开一个终端,输入如下命令找出所有的活动节点:

rosnode list

输出如下:

这里可以看到我们已经成功启动了 /turtlesim 节点。

如果需要查看turtlesim节点发布的话题、订阅话题和服务等内容,可以输入:

rosnode info /turtlesim

结果如图:

在publications下面可以看到,/turtlesim 发布了两个话题: /turtle1/color_sensor 和 /turtle1/pose, 分别控制了乌龟界面的北京颜色和乌龟在界面上的位置坐标,它们的消息类型分别是 [turtlesim/Color] 和 [turtlesim/Pose] 。

在Subscriptions下面可以看到 /turtlesim 订阅了一个未知类型的话题 turtle1/cmd_vel

turtlesim 话题与消息

输入如下命令来查看 /turtlesim 的话题:

rostopic list

输出结果为:

查看话题的消息类型

输入 rostopic type 命令查看话题类型,例如:

rostopic type /turtle1/color_sensor

输出结果为:

turtlesim/Color 为 /turtle1/color_sensor这一话题的消息类型 (ROS消息类型命名格式:[package name]/[message type]

查看消息类型的具体内容

刚刚看到话题 /turtle1/color_sensor 的消息类型为 turtlesim/Color , 可以通过 rosmsg shw命令来查看它的具体内容:

rosmsg show turtlesim/Color

输出结果为:

也就是说这里使用 unit8 来表示背景的RGB颜色。

查看话题的值

比如说想要查看背景的RGB颜色,或者小乌龟的位置,可以用 rostopic echo 命令,例如:

rostopic echo /turtle1/color_sensor

终端会持续输出如图:

直到按下 Ctrl+C才会停止。

改变背景颜色

获取参数列表

通过rosparam list 命令获取 /turtlesim 节点的参数列表:

rosparam list

输出为:

获取参数值

通过 rosparam get / 命令获得参数服务器上所有参数的数值:

rosparam get / 

输出结果为:

注意这里的RGB数值和之前用 rostopic echo [topic name] 得到的数值相同。

修改颜色

通过 rosparam set 可以修改颜色:

rosparam set turtlesim/background_b 0rosparam set turtlesim/background_g 0rosparam set turtlesim/background_r 255rosservice call /clear

可以看到背景变成了红色:

控制乌龟运动

红色的背景感觉有点刺眼,这里我关闭了之前的 turtlesim节点并结束了roscore 节点管理器。这里重新启动一下:

在终端一中运行:

roscore

在第二个终端中运行:

rosrun turtlesim turtlesim_node

得到:

(每次还都是不一样的小乌龟)

通过发布话题控制乌龟运动

之前提到 /turtlesim 节点订阅了一个位置类型的话题 turtle1/cmd_vel,这里先用 rostopic type来确定一下这个话题的消息类型,在一个新的终端窗口中运行如下命令:

rostopic type /turtle1/cmd_vel

得到:

运行如下命令确定该消息的数据格式:

rosmsg show geometry_msgs/Twist

得到输出:

可以看到我们可以规定的是乌龟的线速度和角速度,这里要注意在二维空间中,允许的运动是沿 x 方向的直线运动或者是沿 z (垂直于电脑屏幕)的旋转运动。比如说:规定线速度为 2m/s, 角速度为 1.8 rads/s,那么命令如下:

rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'

需要一个稳定的频率为1Hz的指令流才能保持移动状态。我们可以使用rostopic pub -r命令来发布源源不断的命令,1 代表 1Hz 的 速度指令发布频率。可以看到命令发布之后小乌龟开始做圆周运动:

通过 Ctrl+C停止圆周运动

通过键盘控制乌龟运动

在上面控制乌龟做圆周运动的终端重,输入以下命令:

rosrun turtlesim turtle_teleop_key

命令执行后显示:

然后就可以通过键盘的方向键来控制乌龟运动,方向键上下控制前后移动,左右控制移动方向:(注意这里需要活跃界面为这个终端窗口,而不是小乌龟的显示界面,如果鼠标电机小乌龟的显示界面 turtlesim 窗口,然后再用键盘控制,将不可用。)


结束后可以按q退出键盘控制。

通过服务控制乌龟的移动

首先通过 /turtle1/Pose 话题来获得乌龟的位置信息:

执行:

rostopic type /turtle1/pose

得到输出为:

然后执行:

rosmsg show turtlesim/Pose

输出:

然后可以通过以下命令得到乌龟的位置坐标、方位角度(theta)和速度参数:

rostopic echo /turtle1/Pose

输出为: 


这里需要注意这个小乌龟的原点在 TurtleSim 窗口的左下角。

然后我们就可以实用 rosservice 来移动乌龟,格式为: rosservice call <service name><service arguments>

比如服务 /turtle1/teleport_absolute 可以控制绝对位置的移动,这一服务的 service arguments 包含 x,y 坐标和方位角。例如将乌龟移动到绝对坐标 [1, 1] ,方位角为0,那么运行以下命令:

rosservice call /turtle1/teleport_absolute 1 1 0

执行结果如图:

可以看到乌龟移动到了绝对坐标 [1, 1] 的位置,并且头朝向是方位角为0的位置。

服务 /turtle1/teleport_relative 可以控制相对位置的移动,这一服务的 service arguments 包含移动距离和角度。例如将乌龟从绝对坐标 [1, 1] 移动到绝对坐标 [2, 1] ,那么相对位置移动了1,角度为 0 。运行以下命令:

rosservice call /turtle1/teleport_relative 1 0

运行结果如下图:


可以看到完成了相对位置的移动。大家也可以自己改变这两个服务的角度或者位移量(坐标值)来看看不同的数值对小乌龟位置的影响。

参考

原文链接:https://blog.csdn.net/liangforcold/article/details/126398244

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 创建一个ROS Package 这个教程包括使用roscreate-pkg或者catkin去创建一个新的packa...
    铁熊玩创客阅读 10,460评论 0 7
  • 1. 一个实例 打开三个终端,分别运行下面三条指令: 如果第2, 3条无法运行,则可能是环境变量未配置, 可以执行...
    lyc_pc阅读 4,829评论 0 2
  • 小乌龟节点启动 1. 启动小乌龟模拟器节点 2. 启动小乌龟键盘输入节点 启动完成后,可以通过键盘输入操控小乌龟移...
    送分童子笑嘻嘻阅读 7,255评论 1 0
  • 一. 构建自己的工作目录: 之所以要创建一个自己的工作目录,是为了避免直接在自己的home目录,也就是目录下创建项...
    读博之路阅读 5,228评论 0 0
  • Copyright (c) 陕西科技大学北斗机器人协会,版权所有 David Liu,2018-11-26(第一版...
    kinglee988阅读 12,013评论 0 5

友情链接更多精彩内容