ROS笔记----ros一些常用工具及构造记录

一、ROS wiki

ROS wiki系列|ROS wiki初探(自用)_MMMMMaxine的博客-CSDN博客_ros wiki

ROS wiki是每个ROS人都必不可少会使用到的工具,在ROS学习中我们也经常要使用ROS wiki来查阅一些语法的解析、功能包的使用等。登录的链接为:

ROS Wiki——http://wiki.ros.org/http://wiki.ros.org/ROS wiki首页结构

在这里插入图片描述

 在这里把ROS wiki的首页粗略的分为三个部分,顶部选项卡、蓝色选项卡以及正文内容,方便后面进行讲解,先看蓝色选项卡中各项对应的内容

Documentation:首页像一个索引目录,在这里可以任意跳转到我们想要查阅的页面,同时这部分也是使用频率最高的部分

二、ros介绍

结点:每一个工作进程都看做是一个节点,使用结点管理统一管理

消息:节点之间通过消息实现彼此的逻辑联系与数据交换

话题:话题是一种传递消息(发布/订阅)的方式。每一条消息都要发布到相应的主题上,每一个话题都是强类型的

服务:服务用于请求应答模型,也必须有一个唯一的名称。当一个节点提供某个服务时,所有的节点都可以通过使用ROS客户端所编写的代码与之通讯。

消息记录包:是一种用于保存和回放ROS消息数据的文件格式,保存在.bag文件中。是一种用于存储数据的重要机制。

通信的机制分为话题和服务

2.1 文件系统级

功能包之间可以配置依赖关系。如果功能包A依赖功能包B,那么在ROS构建系统时,B一定要早于A的构建,并且A可以使用B中的头文件和库文件。

文件系统级的概念如下:

  • 功能包清单:

这个清单是指明功能包的依赖关系、源文件编译标志信息等。功能包中的package.xml文件就是一个功能包清单。

  • 功能包:

功能包是ROS系统中软件组织的基本形式,包含运行的节点以及配置文件等。

ROS package 相关命令

rospack 命令作用
rospack help显示rospack的用法
rospack list列出本机所有package
rospack depends [package]显示package的依赖包
rospack find [package]定位某个package
rospack profile刷新所有package的位置记录
  • 综合功能包

将几个功能包组织在一起,即可形成综合功能包。

  • 消息类型

ROS中节点之间发送消息时需要事先进行消息说明。ROS中提供了标准类型消息,也可以自行定义。消息类型的说明存储在功能包下的msg文件内。

  • 服务类型

定义了在ROS系统中由每个进程提供的关于服务请求和响应的数据结构。

1.2.3、开源社区级

  • 发行版(Distribution):ROS发行版是可以独立安装、带有版本号的一系列综合功能包。ROS发行版像Linux发行版一样发挥类似的作用。这使得ROS软件安装更加容易,而且能够通过一个软件集合维持一致的版本。
  • 软件库(Repository):ROS依赖于共享开源代码与软件库的网站或主机服务,在这里不同的机构能够发布和分享各自的机器人软件与程序。
  • ROS维基(ROS Wiki):ROS Wiki是用于记录有关ROS系统信息的主要论坛。任何人都可以注册账户、贡献自己的文件、提供更正或更新、编写教程以及其他行为。
  • Bug提交系统(Bug Ticket System):如果你发现问题或者想提出一个新功能,ROS提供这个资源去做这些。
  • 邮件列表(Mailing list):ROS用户邮件列表是关于ROS的主要交流渠道,能够像论坛一样交流从ROS软件更新到ROS软件使用中的各种疑问或信息。
  • ROS问答(ROS Answer):用户可以使用这个资源去提问题

2.2、通讯机制

Topic

ros中广为使用的是异步的 publish-subscribe 通讯模式。Topic 一般 用于单向,消息流通讯。Topic 一般拥有很强的类型定义:一种类型的topic只能接受/ 发送特定数据类型(message type)的message。Publisher 没有被要求类型一致性,但是接受时subscriber会检查类型 的md5,进而报错。

Service

service 用于处理ros通讯中的同步通讯,采用server/client 语义。每个service type拥 有 request 与 response两部分,对于service中的 server,ros不会检查重名(name conflict),只有最后注册的server会生效,与client建立连接。

Action

action使用多个topic组成,用于定义任务,任务定义包括目标(Goal)、任务执行过程状态反馈(Feedback)和结果(Result)等。编译action将会自动产生7个结构体分别为:Action、ActionGoal、ActionFeedback、ActionResult、Goal、Feedback、Result结构体。

Action的特点:

  • 一种问答通讯机制
  • 带有连续反馈
  • 可以在任务中终止进行
  • 基于ROS的消息机制实现

Action的接口:

  • goal:发布任务目标
  • cancel:请求取消任务
  • status:通知客户端当前状态
  • feedback:周期反馈任务运行的监控数据
  • result:向客户端发送任务的执行结果,只发布一次。

通讯模式特点对比

特点TopicServiceAction
响应机制结果响应进度响应,结果响应
同步性异步同步异步
通讯模型PublisherSubscriberClientServerClientServer
Node对应关系多对多多(Client)对一(Server)多(Client)对一(Server)

常用组件

launch启动文件;TF坐标变换;Rviz;Gazebo;QT工具箱;Navigation;MoveIt!

launch:启动文件(Launch File)是ROS中一种同时启动多个节点的途径,它还可以自动启动ROS Master节点管理器,并且可以实现每个节点的各种配置,为多个节点的操作提供很大便利。

TF坐标变换:机器人本体和机器人的工作环境中往往存在大量的组件元素,在机器人设计和机器人应用中都会涉及不同组件的位置和姿态,TF是一个让用户随时间跟踪多个坐标系的功能包,它使用树形数据结构,根据时间缓冲并维护多个坐标系之间的坐标变换关系,可以帮助开发者在任意时间、在坐标系间完成点、向量等坐标的变换。

QT工具箱:为了方便可视化调试和显示,ROS提供了一个Qt架构的后台图形工具套件——rqt_common_plugins,其中包含不少实用工具:日志输出工具(rqt_console)、计算图可视化工具(rqt_graph)、数据绘图工具(rqt_plot)、参数动态配置工具(rqt_reconfigure)

Rviz:rviz是一款三维可视化工具,很好地兼容了各种基于ROS软件框架的机器人平台。在rviz中,可以使用XML对机器人、周围物体等任何实物进行尺寸、质量、位置、材质、关节等属性的描述,并且在界面中呈现出来。同时,rviz还可以通过图形化方式,实时显示机器人传感器的信息、机器人的运动状态、周围环境的变化等。

Gazebo:Gazebo是一个功能强大的三维物理仿真平台,具备强大的物理引擎、高质量的图形渲染、方便的编程与图形接口,最重要的还有其具备开源免费的特性。虽然Gazebo中的机器人模型与rviz使用的模型相同,但是需要在模型中加入机器人和周围环境的物理属性,例如质量、摩擦系数、弹性系数等。机器人的传感器信息也可以通过插件的形式加入仿真环境、以可视化的方式显示。

Navigation:navigation是ROS的二维导航功能包,简单来说,就是根据输入的里程计等传感器的信息流和机器人的全局位置,通过导航算法,计算得出安全可靠的机器人速度控制指令。

Moveit:Moveit!功能包是最常用的工具包,主要用来进行轨迹规划。Moveit!配置助手用来配置一些在规划中需要用到的文件,非常关键。

三、ROS的工作空间

     工作空间就是管理和组织ROS工程项目文件的地方,直观的形容就是一个仓库,里面装载着ROS的各种项目工程,便于系统组织管理调用。在可视化图形界面里是一个文件夹。我们自己写的ROS代码通常就放在工作空间中。其下主要的一级目录有四个:

3.1 功能包

 src中存放的都是功能包,package是一种特定的文件结构和文件夹组合。通常将实现同一个具体功能的程序代码放到一个package中。只有 CMakeLists.txt 和 package.xml 是【必须】的,其余路径根据软件包是否需要来决定。

CMakeLists.txt

catkin的CMakeLists.txt与CMake的基本一致。CMakeLists.txt的基本语法都还是按照CMake,而Catkin在其中加入了少量的宏,总体的结构如下:

package.xml

具有最小标签的包清单不指定对其他包的任何依赖关系。软件包可以有六种依赖关系:

构建依赖关系<build_depend>指定构建此包所需的包。在构建时需要这些软件包中的任何文件时才是这种情况。这可以包括在编译时的头文件,链接到这些包的库文件或在构建时需要任何其他资源(特别是当这些包在CMake 中是find_package()时)。在交叉编译场景中,构建依赖关系针对目标体系结构。

构建导出依赖关系<build_export_depend>指定根据此包构建库所需的包。当您将此头文件包含在此包中的公用头文件中时(特别是当CMake中的catkin_package()中声明为(CATKIN_DEPENDS 时),就是这种情况。

执行依赖关系<exec_depend>指定在此程序包中运行代码所需的软件包。当您依赖此程序包中的共享库(尤其是当CMake 中的catkin_package()中声明为(CATKIN_DEPENDS )时),就是这种情况。

测试依赖关系<test_depend>仅指定单元测试的附加依赖项。他们不应该将已经提到的任何依赖关系重复为构建或运行依赖关系。

构建工具依赖关系<buildtool_depend>指定此软件包需要构建自身的构建系统工具。通常唯一的构建工具是catkin。在交叉编译场景中,构建工具依赖关系用于执行编译的架构。

文档工具依赖关系<doc_depend>指定此软件包需要生成文档的文档工具。

四、常用命令与工具

4.1 启动结点方式

launch文件

1)、借助 ros package 路径启动

格式如下:

roslaunch package名称 launch文件名称
roslaunch pkg_name launchfile_name.launch 

2)、直接给出 launch 文件的绝对路径

格式如下:

roslaunch path_to_launchfile

不论用上述哪种方式启动 launch 文件,都可以在后边添加参数,比较常见的参数有

  • --screen: 令 ros node 的信息(如果有的话)输出到屏幕上,而不是保存在某个 log 文件中,这样比较方便调试
  • arg:=value: 如果 launch 文件中有待赋值的变量,可以通过这种方式赋值,例如:

roslaunch 命令运行时首先会检测系统的rosmaster是否运行,如果已经启动,就用现有的 rosmaster;如果没有启动,会先启动rosmaster,然后再执行 launch 文件中的设置,一次性把多个节点按照我们预先的配置启动起来。

需要注意的是, launch 文件不需要编译,设置好之后可以直接用上述方式运行。

launch 文件本质上是一种 xml 文件,在某些编辑器中可以高亮显示关键字,方便阅读,可以在头部添加,也可不添加

<?xml version="1.0"?>

与其他 xml 格式的文件类似,launch 文件也是通过标签 (tag) 的方式书写, 主要的 tag 如下:

1.标签【node】

标签【node】是 launch 文件的核心部分。

 注意: roslaunch 不能保证 node 的启动顺序,因此 launch 文件中所有的 node 都应该对启动顺序有鲁棒性。

还可以设置更多参数,如下:

 

 

2.标签【remap】

经常作为node 标签的子标签出现,可以用来修改topic。在很多rosnode源文件中,可能并没有指定接收的或者发送的topic,而仅仅是用 input_topicoutput_topic 代替,这样在使用中需要将抽象的topic名字替换成具体场景中的 topic 名字。

简单地说, remap 的作用就是方便同一个 node 文件被应用到不同的环境中,用 remap 从外部修改一下 topic 即可,不需要改变源文件。

remap 常见的使用格式如下:

<node pkg="some" type="some" name="some">
    <remap from="origin" to="new" />
</node>

3.标签【include】

这个标签的作用是将另外一个 launch 文件添加到本 launch 文件中,类似 launch 文件的嵌套。基本格式:

<include file="path-to-launch-file" />

上边的文件路径可以给具体路径,但是一般来说为了程序的可移植性,最好借助 find 命令给出文件路径:

<include file="$(find package-name)/launch-file-name" />

上述命令中,$(find package-name) 等价于本机中相应 package 的路径。这样即使换了其他主控,只要安装了同样的 package,就可以找到对应的路径。

有时,另一个 launch 引入的 node 可能需要统一命名,或者具有类似特征的 node 名字,比如 /my/gps, /my/lidar, /my/imu,即 node 具有统一的前缀,方便查找。这可以通过设置 ns (namespace)属性来实现,命令如下:

<include file="$(find package-name)/launch-file-name " ns="my" />

4.标签【arg】

通过【arg】可以使参数重复使用,也便于多处同时修改。 【arg】三种常用方法:

  • <arg name="foo">: 声明一个 【arg】,但不赋值。稍后可以通过命令行赋值,或者通过【include】标签赋值。
  • <arg name="foo" default="1">: 赋默认值。
  • <arg name="foo" value="1">: 赋固定值。

通过命令行赋值

roslaunch package_name file_name.launch arg1:=value1 arg2:=value2

5.变量替换

在 launch 文件中常用的变量替换形式有两个

  • $(find pkg): 例如$(find rospy)/manifest.xml. 如果可能,强烈推荐这种基于 package 的路径设置
  • $(arg arg_name): 先设置默认值,如果没有额外的赋值,就用这个默认值了

例如:

<arg name="gui" default="true" />  
<!-- 先设置默认值,如果没有额外的赋值,就用这个默认值了 -->
<param name="use_gui" value="$(arg gui)"/>

另一个例子:

<node pkg="package_name" type="executable_file" name="node_name" args="$(arg a) $(arg b)" />

这样设置之后,在启动 roslaunch 时,可以为 args 参数赋值

roslaunch package_name file_name.launch a:=1 b:=5

 

rosrun

 

 五、实例说明

1.rqt_graph计算图可视化

rosrun rqt_graph rqt_graph

 

 2.rqt_topic 查看话题

rosrun rqt_topic rqt_topic

 

 

 

 

 

 

 

【Set initial pose】、【Set target pose】、【Publish location point】:一般在建图导航时使用。

rviz界面主要包含以下几个部分:

1:3D视图区,用于可视化显示数据,目前没有任何数据,所以显示黑色。

2:工具栏,提供视角控制、目标设置、发布地点等工具。

3:显示项列表,用于显示当前选择的显示插件,可以配置每个插件的属性。

4:视角设置区,可以选择多种观测视角。

5:时间显示区,显示当前的系统时间和ROS时间。

 

  • 添加显示

 

第一步:点击【Add】按钮。会弹出一个选框。

第二步:可以通过显示类型【By display type】选择添加,不过需要自己修改对应话题,坐标系才可以显示出来;也可以通过选择话题【By topic】的方式,直接添加就可以正常显示。

第三步:点击【OK】即可。

 

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值