【ROS入门教程】—- 06 ROS海龟命令行基本操作及编程测试

【ROS入门教程】---- 06 ROS海龟命令行基本操作及编程测试

一、小海龟的命令行操作

1. 节点创建与命名重映射

  • 新建终端,启动master:roscore注意此终端与master共存,即窗口不可关闭,否则会终止master

  • 启动海龟节点:rosrun turtlesim turtlesim_node;小海龟出现

  • 查看当前节点:rosnode list
    此时我们可以看到结果如图所示:
    【ROS入门教程】---- 06 ROS海龟命令行基本操作及编程测试
    我们可以看到第二个:/turtlesim,即小海龟进程对应的节点名称

  • 命名重映射:rosrun turtlesim turtlesim_node __name:=my_turtle
    此时我们再次查看节点清单可以得到:
    【ROS入门教程】---- 06 ROS海龟命令行基本操作及编程测试
    出现了新的节点my_turtle,说明命名重映射成功,但是turtlesim仍然存在,即假死节点仍存在;

  • 清楚假死节点:rosnode cleanup,发现假死节点后会提示是否继续,此时按Y并回车,再次查看就会消失。

2. 话题通讯

  • 前提:ROS master已启动,海龟节点已启动;

  • 启动键盘控制节点:rosrun turtlesim turtle_teleop_key
    在开启此节点后,就可以将光标置于终端内,通过方向键控制海龟运动;

  • 观察节点通讯关系:rosrun rqt_graph rqt_graph,界面如下:
    【ROS入门教程】---- 06 ROS海龟命令行基本操作及编程测试此图的含义:/teleop_turtle这个节点将方向键的信息发布到/turtle1/cmd_vel这个话题,/turtlesim节点订阅了同样的话题,完成了一种异步通讯

  • 查看话题类型:rostopic type /turtle1/cmd_vel
    结果如图所示:
    【ROS入门教程】---- 06 ROS海龟命令行基本操作及编程测试
    ROS自带的标准消息类型:gemetry_msgs/Twist,作用类似于C语言的结构体,该类型的具体形式可以通过如下命令查看:rosmsg show geometry_msgs/Twist

  • 从图片中我们可以得出该消息类型内容有三个平动向量、三个转动向量
    【ROS入门教程】---- 06 ROS海龟命令行基本操作及编程测试

  • 命令行发送消息:重新启动roscore和海龟节点,新建终端输入命令如下:

rostopic pub /turtle1/cmd_vel geometry_msgs/Twist "linear:
  x: 0.0
  y: 0.0
  z: 0.0
angular:
  x: 0.0
  y: 0.0
  z: 2.0" 

命令令z轴转动操作变化,故小海龟原地进行旋转,如果想要令海龟保持运动,则需要按照固定频率发送消息,命令如下:

rostopic pub -r 1 /turtle1/cmd_vel geometry_msgs/Twist "linear:
  x: 0.0
  y: 0.0
  z: 0.0
angular:
  x: 0.0
  y: 0.0
  z: 2.0" 

同样,我们也可以使用rqt工具箱进行图形化操作,首先输入命令rosrun rqt_publisher rqt_publisher,进入界面后:

【ROS入门教程】---- 06 ROS海龟命令行基本操作及编程测试
选择话题和消息类型,设置频率,通过加号增加指令,并修改具体内容,消息就开始按照指定频率发送,满足要求。

3. 服务通讯

  • 服务通讯机制的核心在于同步性,通讯的两方中,一方作为客户端,向服务端发送请求,而另一方的服务端收到请求后,就会进行数据处理,然后发送回应给客户端。
  • 简单实例:创建第二只小海龟,命令如下:
rosservice call /spawn "x: 1.0
y: 0.0
theta: 0.0
name: ''" 
name: "turtle2"

此时在原屏幕的右下角就会出现新的一只小海龟

4. Launch文件

  • 关键:在对于海龟操作的学习过程中,我们能够发现,每次在启动时需要打开大量的终端,在进行复杂操作时,这样是完全不现实的,故我们可以通过roslaunch启动节点,来集成化操作;
  1. 进入功能包文件夹,创建launch文件夹:
    mkdir launch
    cd launch
  2. 创建launch文件:
    touch turtle_ctrl.launch
  3. 编写对应文件:
<launch>
    <node pkg="turtlesim" type="turtlesim_node" name="turtle1"/>
    <node pkg="turtlesim" type="turtle_teleop_key" name="key_ctrl"/>
</launch>
  • 新建终端,输入:roslaunch beginner_tutorials turtle_ctrl.launch,此时我们就直接创建了海龟,并且可以通过方向键完成控制,故大大简化了操作。

二、基本编程操作

1. VSCode配置

  • 在先前的博客中我们已经讲述了如何安装VSCode,在本节内容主要将会介绍一些编译配置,借鉴了Winter大佬的博客ROS教程,原文地址奉上。
  • 在工作空间目录下启动vscodevscode .
  • 修改配置文件:
  1. 打开编译选项:快捷键Ctrl + shift + B,选择catkin_make:build点击右侧齿轮进入调整配置文件:
  2. 将tasks.json内容修改为如下内容(默认编译选项):
{
   // 有关 tasks.json 格式的文档,请参见
   // https://go.microsoft.com/fwlink/?LinkId=733558
       "version": "2.0.0",
       "tasks": [
           {
               "label": "catkin_make:debug", //代表提示的描述性信息
               "type": "shell",  //可以选择shell或者process,如果是shell代码是在shell里面运行一个命令,如果是process代表作为一个进程来运行
              "command": "catkin_make",//这个是我们需要运行的命令
              "args": [],//如果需要在命令后面加一些后缀,可以写在这里,比如-DCATKIN_WHITELIST_PACKAGES=“pac1;pac2”
               "group": {"kind":"build","isDefault":true},
               "presentation": {
                   "reveal": "always"//可选always或者silence,代表是否输出信息
               },
               "problemMatcher": "$msCompile"
           }
       ]
   }
  1. 修改c_cpp_properties.json(主要与头文件、库文件有关):

在includePath中添加:

	"/usr/include/**",
    "/usr/lib/**",
    "/usr/local/include",
    "${workspaceFolder}/**"

在name后添加:

	 "defines": [],
     "compilerPath": "/usr/bin/g++",
     "cStandard": "gnu17",
     "cppStandard": "c++17",
     "intelliSenseMode": "linux-gcc-x64"

2. 测试代码与CMake文件

  • 在先前创建的功能包对应src下创建cpp文件:
#include "ros/ros.h"
# 只有一个hellowworld的输出功能
int main(int argc, char *argv[])
{
    ros::init(argc, argv, "helloWorld");
    ROS_INFO("hello ROS world");
    return 0;
}
  • 对应修改CMakelist.txt文件:(在##install##前添加如下命令)
# 设置需要编译的代码和生成的可执行文件,前面是目标名称,后面是文件位置
add_executable(helloworld src/test.cpp)
# 设置链接库
target_link_libraries(helloworld
  ${catkin_LIBRARIES}
)
  • 编译:
  1. 使用vscode:Ctrl + shift + B,编译文件
    【ROS入门教程】---- 06 ROS海龟命令行基本操作及编程测试
  2. 命令行:切换到catkin_ws目录:catkin_make编译(二者效果相同)
    【ROS入门教程】---- 06 ROS海龟命令行基本操作及编程测试
  • 命令操作:
    首先打开roscore,紧接着输入rosrun pkg_ts helloworld,即可完成控制,效果如下:
    【ROS入门教程】---- 06 ROS海龟命令行基本操作及编程测试

总结

【ROS入门教程】---- 06 ROS海龟命令行基本操作及编程测试

本文主要对于小海龟的基本命令行操作进行了实战演示,更加深刻的体会了各命令以及通讯机制的作用,通过细致的图示完成对于ROS操作的学习,并在最后完成了使用VSCode进行代码编程以及编译的流程,为之后的C++和python代码编辑奠定了基础。

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
上一篇 2022年6月15日 上午10:43
下一篇 2022年6月15日 上午10:46

相关推荐

本站注重文章个人版权,不会主动收集付费或者带有商业版权的文章,如果出现侵权情况只可能是作者后期更改了版权声明,如果出现这种情况请主动联系我们,我们看到会在第一时间删除!本站专注于人工智能高质量优质文章收集,方便各位学者快速找到学习资源,本站收集的文章都会附上文章出处,如果不愿意分享到本平台,我们会第一时间删除!