树莓派 ROS 学习(二)小乌龟 turtlesim

添加链接描述

目录

创建catkin工作空间

小乌龟turtlesim节点

启动节点

turtlesim节点

turtlesim 话题与消息

查看话题的消息类型

查看消息类型的具体内容

查看话题的值

改变背景颜色

获取参数列表

 获取参数值

修改颜色

控制乌龟运动

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

通过键盘控制乌龟运动

通过服务控制乌龟的移动


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

env | grep ROS
    
    
     
     

result:


    
    
     
     
  1. ROS_VERSION = 1
  2. ROS_PYTHON_VERSION = 3
  3. ROS_PACKAGE_PATH = /opt /ros /noetic /share
  4. ROSLISP_PACKAGE_DIRECTORIES =
  5. ROS_ETC_DIR = /opt /ros /noetic /etc /ros
  6. ROS_MASTER_URI =http: / /localhost: 11311
  7. ROS_ROOT = /opt /ros /noetic /share /ros
  8. ROS_DISTRO =noetic

创建catkin工作空间

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


    
    
     
     
  1. mkdir -p ~/catkin_ws/src
  2. cd ~/catkin_ws/src
  3. catkin_init_workspace

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


    
    
     
     
  1. cd ~/catkin_ws/
  2. catkin_make

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


    
    
     
     
  1. echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
  2. 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 可以修改颜色:


    
    
     
     
  1. rosparam set turtlesim/background_b 0
  2. rosparam set turtlesim/background_g 0
  3. rosparam set turtlesim/background_r 255
  4. 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
    
    
     
     

运行结果如下图:

 

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

文章知识点与官方知识档案匹配,可进一步学习相关知识
CS入门技能树Linux入门初识Linux 29726 人正在系统学习中

目录

创建catkin工作空间

小乌龟turtlesim节点

启动节点

turtlesim节点

turtlesim 话题与消息

查看话题的消息类型

查看消息类型的具体内容

查看话题的值

改变背景颜色

获取参数列表

 获取参数值

修改颜色

控制乌龟运动

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

通过键盘控制乌龟运动

通过服务控制乌龟的移动


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

env | grep ROS
    
    
  
  

result:


    
    
  
  
  1. ROS_VERSION = 1
  2. ROS_PYTHON_VERSION = 3
  3. ROS_PACKAGE_PATH = /opt /ros /noetic /share
  4. ROSLISP_PACKAGE_DIRECTORIES =
  5. ROS_ETC_DIR = /opt /ros /noetic /etc /ros
  6. ROS_MASTER_URI =http: / /localhost: 11311
  7. ROS_ROOT = /opt /ros /noetic /share /ros
  8. ROS_DISTRO =noetic

创建catkin工作空间

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


    
    
  
  
  1. mkdir -p ~/catkin_ws/src
  2. cd ~/catkin_ws/src
  3. catkin_init_workspace

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


    
    
  
  
  1. cd ~/catkin_ws/
  2. catkin_make

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


    
    
  
  
  1. echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
  2. 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 可以修改颜色:


    
    
  
  
  1. rosparam set turtlesim/background_b 0
  2. rosparam set turtlesim/background_g 0
  3. rosparam set turtlesim/background_r 255
  4. 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
    
    
  
  

运行结果如下图:

 

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

猜你喜欢

转载自blog.csdn.net/luoganttcc/article/details/130134990
今日推荐