• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

ubuntu16.04下ROS操作系统学习笔记(三 / 四)ROS基础-ROS中的关键组件

人工智能 小小何先生 1969次浏览 0个评论

ROS当中的关键组件:

  1. Launch文件
  2. TF坐标变换
  3. Qt工具箱
  4. Rviz可视化平台
  5. Gazebo物理仿真环境

 

Launch文件

我们之前都是使用rosrun命令来运行具体的节点的。当我们启动一个比较复杂的功能的时候,我们需要启动很多个节点。很多时候这种方法非常麻烦。ROS提供了另一种机制来实现多个节点的启动,同时也可以具体地配置每个节点之间的参数。比rosrun这样的命令要方便地多。并且launch文件可以自动启动ros master。我们接下来看一个比较简单的launch文件:  
ubuntu16.04下ROS操作系统学习笔记(三 / 四)ROS基础-ROS中的关键组件   这个文件里面有两个标签,launch的标签和node的标签。 launch标签是整个launch文件中的根元素。也就是说内容都要在launch文件里面。 node标签的意思就是启动ros当中的一个节点。  
ubuntu16.04下ROS操作系统学习笔记(三 / 四)ROS基础-ROS中的关键组件   格式如上图所示,其中含有以下参数:

  • pkg:节点所在功能包名称。要启动的节点的功能包的名字。
  • type:节点的可执行文件名称。功能包下面的可执行文件。
  • name:节点运行时的名称。节点运行成功之后的名字。这个名字会覆盖代码当中的名字的。
  • output、respawn、required、ns、args。除了上述参数之外还有这些参数。output表示的是节点当中的一些内部信息是否要打印到屏幕上。或者说打印到日志文件里面去。respawn表示的是如果当前节点启动失败他会重新启动。required节点表示的是如果这个节点不启动的话,那么整个launch文件将不会启动。ns表示的是name space表示节点空间的命名属性。args表示的是节点当中具体有哪些参数,比如说从命令行输入两个参数的加数这样的。

  除了launch标签和node标签之外还有另外的一些标签,比如像参数设置的标签等  
ubuntu16.04下ROS操作系统学习笔记(三 / 四)ROS基础-ROS中的关键组件  
ubuntu16.04下ROS操作系统学习笔记(三 / 四)ROS基础-ROS中的关键组件   更多的标签可以在以下链接中进行学习:http://wiki.ros.org/roslaunch/xml  

TF坐标变换

 
ubuntu16.04下ROS操作系统学习笔记(三 / 四)ROS基础-ROS中的关键组件     在ros里面TF功能包能够帮助我们更好地管理使用坐标变换。那么TF功能包具体可以做什么呢?

  • 我们可以查询五秒钟之前,机器人头部坐标系相对于全局坐标系的关系是什么样的?
  • 机器人夹取的物体相对于机器人中心坐标的位置在哪里?
  • 机器人中心坐标系相对于全局坐标系的位置在哪里?

  我们可以通过广播TF变换或者监听TF变换实现坐标变换。 接下来我们通过一个简单的例子来具体说明一下: 安装一个功能包,是关于小海龟的一个例子  

sudo apt-get install ros-kinetic-turtle-tf

  接下来运行demo:  

roslaunch turtle_tf turtle_tf_demo.launch

  这里报了一个错误:ImportError: No module named rospkg。这是由于anaconda里面的环境变量设置导致的。可以由以下方法解决:  

conda install setuptools
pip install -U rosdep rosinstall_generator wstool rosinstall six vcstools

  之后我们运行demo,可以看到以下场景:  
ubuntu16.04下ROS操作系统学习笔记(三 / 四)ROS基础-ROS中的关键组件   之后我们启动键盘控制节点:  

rosrun turtlesim turtle_teleop_key 

  之后我们控制小海龟移动,你会发现一个是跟随着另一个在做移动的:  
ubuntu16.04下ROS操作系统学习笔记(三 / 四)ROS基础-ROS中的关键组件   在这个例子当中就是展示了坐标变换的关系,我们可以通过以下命令看一下它是如何体现坐标变换的。  
ubuntu16.04下ROS操作系统学习笔记(三 / 四)ROS基础-ROS中的关键组件   生成的pdf文件会放到终端运行的根目录下面:  
ubuntu16.04下ROS操作系统学习笔记(三 / 四)ROS基础-ROS中的关键组件   这里面是一个树型结构,可以看到里面有三个坐标系,一个world,一个turtle1和一个turtle2。这三个坐标系有什么关系呢?   我们已知turtle1的位置,也已知turtle2的位置。我们现在的目的是想让第二只海龟向第一只海龟移动。我们可以通过命令行来查找这两个坐标之间的关系:  
ubuntu16.04下ROS操作系统学习笔记(三 / 四)ROS基础-ROS中的关键组件   我们可以看到平移关系的距离为0,旋转角度有一点角度的偏差,角度的表示是通过三种方式来表达的。   我们如何来通过代码展示刚才的这样一个例子呢?

  • 定义TF广播器(TransformBroadcaster)
  • 创建坐标变换值
  • 发布坐标变换(sendTransform)

  我们在我们的工作空间下面单独编写一下关于tf的代码。创建功能包,然后编写代码:  
ubuntu16.04下ROS操作系统学习笔记(三 / 四)ROS基础-ROS中的关键组件   这两个文件分别是tf的给广播者和监听者。  
ubuntu16.04下ROS操作系统学习笔记(三 / 四)ROS基础-ROS中的关键组件   我们首先看一下TF的广播器: 我们看main函数:首先需要订阅具体的海龟位置,订阅成功之后调用回调函数。在回调函数里面调用广播器,之后封装一个海龟的坐标变换,这个海龟的坐标变换是与世界坐标系的变换,其实只有z轴有旋转,x,y轴都是0。之后的话我们通过sendTransform来将其发布出去。   之后我们看一下TF监听器:

  • 定义TF监听器(TransformListener);
  • 查找坐标变换(waitForTransform、lookupTransform)

 
ubuntu16.04下ROS操作系统学习笔记(三 / 四)ROS基础-ROS中的关键组件   写好代码之后就可以编译代码了  
ubuntu16.04下ROS操作系统学习笔记(三 / 四)ROS基础-ROS中的关键组件   之后在工作空间目录下对其进行catkin_make编译就可以了,编译成功之后就可以通过launch文件启动:  
ubuntu16.04下ROS操作系统学习笔记(三 / 四)ROS基础-ROS中的关键组件   在中国大学mooc上面,中科院有ROS公开课。也有讲坐标变换:   TF: TransFrom坐标变换 将视觉定位的物体的坐标位置x,y,z转换到机械臂的坐标x,y,z。实现坐标变换(位置+姿态),坐标系数据维护的工具。在ros中是坐标转换的标准、话题、工具、接口。通过tf树来维护各各坐标之间的关系。   TransformStamped.msg  
ubuntu16.04下ROS操作系统学习笔记(三 / 四)ROS基础-ROS中的关键组件   tf/tfMessage.msg: 第一代 tf2_msgs/TFMessage.msg: 第二代 rostopic info 命令可以查看tf属性。  
ubuntu16.04下ROS操作系统学习笔记(三 / 四)ROS基础-ROS中的关键组件   tf在C++中的实现:  
ubuntu16.04下ROS操作系统学习笔记(三 / 四)ROS基础-ROS中的关键组件  
ubuntu16.04下ROS操作系统学习笔记(三 / 四)ROS基础-ROS中的关键组件
ubuntu16.04下ROS操作系统学习笔记(三 / 四)ROS基础-ROS中的关键组件  
ubuntu16.04下ROS操作系统学习笔记(三 / 四)ROS基础-ROS中的关键组件  
ubuntu16.04下ROS操作系统学习笔记(三 / 四)ROS基础-ROS中的关键组件   tf在python中的实现:  
ubuntu16.04下ROS操作系统学习笔记(三 / 四)ROS基础-ROS中的关键组件  
ubuntu16.04下ROS操作系统学习笔记(三 / 四)ROS基础-ROS中的关键组件  
ubuntu16.04下ROS操作系统学习笔记(三 / 四)ROS基础-ROS中的关键组件  
ubuntu16.04下ROS操作系统学习笔记(三 / 四)ROS基础-ROS中的关键组件  
ubuntu16.04下ROS操作系统学习笔记(三 / 四)ROS基础-ROS中的关键组件  
ubuntu16.04下ROS操作系统学习笔记(三 / 四)ROS基础-ROS中的关键组件  

Qt工具箱

一个可视化的工具,里面有多种可视化的工具,基于qt开发。 rqt__console:日志输出工具。 rqt_graph:计算图可视化工具。 rqt_plot:数据绘图工具。 rqt_reconfigure:参数动态配置工具。  

Rviz可视化平台

Rviz是一款三维可视化工具,可以很好的兼容基于ROS软件的机器人平台。用于显示数据的,如机器人模型,坐标信息,运动规划,导航,点云,图像,slam等。

  1. 在rviz中,可以使用可扩展标记语言xml对机器人、周围物体等任何实物进行尺寸、质量、位置、材质、关节等属性的描述,并且在界面中呈现出来。
  2. 同时,rviz还可以通过图形化的方式,实时显示机器人传感器的信息、机器人的运动状态、周围环境的变化等信息。
  3. 总而言之,rviz通过机器人模型参数、机器人发布的传感信息等数据,为用户进行所有可监测信息的图形化显示。用户和开发者也可以在rviz的控制界面下,通过按钮、滑动条,数值等方式,控制机器人的行为。

ubuntu16.04下ROS操作系统学习笔记(三 / 四)ROS基础-ROS中的关键组件   rviz还提供了插件机制,可以提供给我们一种可视化地编程效果。  
ubuntu16.04下ROS操作系统学习笔记(三 / 四)ROS基础-ROS中的关键组件  

Gazebo物理仿真引擎

Gazebo是一款强大的三维物理仿真平台。具备强大的物理引擎,高质量的图形渲染,方便的编程与图形接口,开源免费。   gazebo的界面如下图所示:  
ubuntu16.04下ROS操作系统学习笔记(三 / 四)ROS基础-ROS中的关键组件   我们可以通过以下命令启动一个gazebo的空的模型:  

roslaunch gazebo_ros empty_world.launch

  由于这个模型是放在国外的服务器上面的,我们加载它的话就会比较慢,显示的gazebo就是黑的,没有关系你可以等一会,或者在网上找找别的方法。在这里面我们就可以去添加一个机器人模型。   我们可以在左边添加一些模型:  
ubuntu16.04下ROS操作系统学习笔记(三 / 四)ROS基础-ROS中的关键组件   gazebo本身是一个开源软件。跟ros相比其实是比较独立的。跟ros之间有一个接口,来完成跟ros的连接。 gazebo_ros:主要用于gazebo接口封装、gazebo服务端和客户端的启动、URFD模型生成等。 gazeb_msg:是gazebo的Msg和Srv数据结构。 gazebo_plugins:用于gazebo的通用传感器插件。 gazebo_ros_api_plugin和gazebo_ros_path_plugin这两个gazebo的插件实现接口封转。  

如何使用gazebo来进行仿真?

创建仿真环境 配置机器人模型 开始仿真 我们以后再说  


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明ubuntu16.04下ROS操作系统学习笔记(三 / 四)ROS基础-ROS中的关键组件
喜欢 (0)

您必须 登录 才能发表评论!

加载中……