目录

创建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

运行结果如下图:

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