树莓派 ROS 学习二小乌龟 turtlesim

目录

创建catkin工作空间

小乌龟turtlesim节点

启动节点

turtlesim节点

turtlesim 话题与消息

查看话题的消息类型

查看消息类型的具体内容

查看话题的值

改变背景颜色

获取参数列表

 获取参数值

修改颜色

控制乌龟运动

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

通过键盘控制乌龟运动

通过服务控制乌龟的移动


上次安装成功ROS之后,先确认一下ROS的安装环境正确:

env | grep ROS

result:

ROS_VERSION=1
ROS_PYTHON_VERSION=3
ROS_PACKAGE_PATH=/opt/ros/noetic/share
ROSLISP_PACKAGE_DIRECTORIES=
ROS_ETC_DIR=/opt/ros/noetic/etc/ros
ROS_MASTER_URI=http://localhost:11311
ROS_ROOT=/opt/ros/noetic/share/ros
ROS_DISTRO=noetic

创建catkin工作空间

其实就是创建一个文件夹,然后在这个文件夹下,我们可以生成或者修改现有的catkin工作空间。输入以下命令就可以创建catkin工作空间:

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace

注意这个时候其实工作空间是空的,但是还是可以编译它:

cd ~/catkin_ws/
catkin_make

在这一步之后最好是可以加载在devel文件夹下的源文件 setup.bash,也可以一步到位直接在.bashrc里面加入加载源文件的命令,这样不用每次都加载一遍:

echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc

使用以下命令确认源文件加载成功:

echo $ROS_PACKAGE_PATH

输出应该为:

 这里 ubuntu是安装时的用户名,上一篇安装ubuntu桌面版的时候默认用户名就是ubuntu了。

小乌龟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 0
rosparam set turtlesim/background_g 0
rosparam set turtlesim/background_r 255
rosservice 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

运行结果如下图:

 

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340