zoukankan      html  css  js  c++  java
  • 一起学ROS之启动文件及ROS命令汇总

    我们接着上一节的继续,上一节主要讲了ROS最重要的部分也是优势最明显的部分----他的通信机制,包括消息传递机制和服务调用机制,两者的异同在上一节中也已经详细介绍到了,那么在我们了解了这些之后呢,我们如何来调用这些节点,大概可以分为两种方式,一种是终端命令行的方式,另一种就是本节要着重介绍的启动文件的方式。

    启动文件的方式相对于直接在终端命令行中直接输入命令相比有明显的优势,尤其是在复杂的机器人系统中,我们所调用的节点往往比较多,在终端命令行下输入命令比较繁琐,但为了保持行文的完整性我们在这里也简单总结一下命令行方式的调用方法。

    一、终端命令行

    ROS软件包命令:

    rospack list 列出系统中所有软件包的目录

    rospack findpackage-name 寻找一个包的目录

    roslspackage-name  查看软件包的目录下的文件列表

    roscdpackage-name 进入软件包的目录

    节点管理器命令:

    roscore 启动节点管理器,在整个过程中一般都会先运行这个命令并保持窗口一直运行

    roslaunch 一次性启动多个节点,如果没有节点管理器,将会默认启动新的节点管理器,如果有就用现在的

    注:节点管理器在关闭后重新启动挂在他上边的节点必须也得重新启动

    启动节点命令:

    rosrun package-nameexecutable-name 启动节点 package-name是功能包的名称 executable-name该软件包中的可执行文件的名称

    注://rosrun 没有什么“神奇”的:它只不过是一个 shell脚本,能够理解 ROS 的文件组织结构,知道到哪里能找到与给定包名称对应的可执行文件。一旦它找到你要的程序,rosrun 就会正常启动节点。例如,如果你真的想要,你可以像执行任何其他程序一样直接执行 turtlesim_node:/opt/ros/indigo/lib/turtlesim/turtlesim_node

    这里还要强调一点,通过节点管理器注册成为ROS 节点发生在程序的内部,而不是通过 rosrun 命令。

    rosnode list 查看节点列表

    rosnode infonode-name 查看节点的信息

    rosnode killnode-name 终止节点   //与直接在节点运行的终端下用ctrl+c的区别:ctrl+c也可以终止节点,但不能在rosnode列表中提出该节点,如果想剔除该节点必须再运行rosnode cleanup

    注:节点在终止之后在重新启动不会对其他节点有什么影响,即使该节点正在传输数据过程中终止也会在重新启动后重新链接传输数据

    话题和消息相关命令:

    rqt_graph 以图的形式查看这些节点的关系

    rostopiclist    获得当前活跃话题列表

    rostopic echotopic-name      该命令将会在终端里显示出指定该话题发布的任何消息

    rostopic hztopic-name   查看消息发布的频率

    rostopic bwtopic-name  查看这些消息占用的带宽

    rostopic infotopic-name  查看话题的信息

    此命令输出为

    Type:(消息类型)

    Publishers:

    Subscribers:

    rosmsg showmessage-type-name  查看消息类型

    rostopic pub –r rate-in-hztopic-name message-type message-content 用命令行发布消息 例:rostopic pub –r 1/turtle1/cmd_vel geometry_msgs/Twist ’[2,0,0]’ ’[0,0,0]’

    与服务相关的终端命令

    列出所有服务  reservice list  

    查看提供服务的节点 rosservicenode service-name

    查找服务的详情 rosserviceinfo service-name

    查询服务的数据类型 rossrv showservice-data-type-name

    例:rossrv showturtlesim/Spawn

    输出结果为:

    float32 x

    float32 y

    float 32 theta

    string name

    ---

    string name

    这里横线之前为请求项的数据,横线之后的为响应项的数据

    从命令行调用服务  rosservice call service-name request-content

    例:rosservice call  /spawn  3 3 0 Mikey

    该命令创建了一个位置为(3,3)角度为0,名字为Mikey的新海龟,他的默认命名空间为Mikey他是一个新的节点

    与参数相关的终端命令:

    rosparam list  查看参数列表

    rosparam getparameter_name 查询某个参数的值

    rosparam setparameter_name parameter_value  设置参数的值

    rosparam dumpfilename namespace 创建参数文件,使得参数以yaml的方式存储在命名空间中

    rosparam loadfilename namespace   加载参数文件,将参数文件中的参数读入到计算机中

    二、启动文件

    调用驱动文件的命令:

    roslaunchpackage-name launch-file-name

    package-name包名称   launch-file-name启动文件名称

    启动文件书写方式:

    1.主体框架:

    <launch>

    ……

    <launch>

    2.定义节点:

    <node

    pkg=”package-name”

    type=”executable-name”

    name=”node-name”/>

    <node>

    pkg=”package-name”

    type=”executable-name”

    name=”node-name”

    </node>

    3.节点属性

    respawn="true"   为真时说明在节点停止时,relaunch会重新启动该节点

    output=”screen”   意思是将标准输出到屏幕上而不是记录在日志文档中

    required=”true”    证明该节点为必要节点,当必要节点终止时,roslaunch会终止所有其他活跃节点并退出。

    launch-prefix=”xetrm-e”   为该节点维护独立的窗口

    ns=”namespace”        该节点的命名空间

    4. 命名重映射

    <remap

    from=”original-name”

    to =”new-name”

    />

    5. 包含其他文件

    <include

    file=”$(find package-name)/launch-file-name”

    />

    或<includefile=”path-to-launch-file”/>

    6. 启动参数

    <arg

    name=”arg-name”

    default=”arg-value”

    />

    <arg

    name=”arg-name”

    value=”arg-value”

    />

    定义参数并赋值

    default可以通过命令行赋值来覆盖默认值,value不可以覆盖

    获取参数值${arg arg-name}

    参数值的命名地方说明了该参数的作用域,如果该参数声明在节点内则说明该参数属于该节点,在其他节点内就没有该参数的相关内容,如果某参数声明在节点外就证明在该启动文件中所有的节点内该参数都有效,如果要将其他启动文件中的参数引入到该节点中,那么我们需要做在启动文件include中重新引入该节点。

    <arg name=”arg-name” value=”$(argarg-name)”>

    7.创建组

    <group ns=”namespace”/>

    </group>

    组的意义在于将一个组内的节点共用同样的命名空间

    8. 在启动文件中定义参数

    <param

    name="param-name"

    value="param-value"

    />

    这个与之前6中的参数不同之处在于。此参数存储在参数服务器中,每个活跃的节点都可以通过ros::param::get函数来获取parameter的值,用户也可以通过rosparam来获取parameter的值,而argument只在启动文件内存在意义,他的值不能被节点直接获取。

    本文显得有些啰嗦而且散碎的知识点太多,但本文的主要目的是在于希望能够将如何调用节点这件事描述清楚,通过命令行和启动文件两种方式进行。我们借用本节也将常用的ROS命令行命令给梳理了一下,方便大家查阅。老铁们,本文到这里也就结束了,欢迎大家批评指正!咱们下期再见。

  • 相关阅读:
    学习工具
    Qt 之 QApplication
    Qt中常用的类
    关于在Qt里让程序休眠一段时间的方法总结
    Qt setWindow setViewPort
    ajax回调数据 Structs has detected an unhandled exception 问题
    Struts2配置拦截器自定义栈时抛异常:Unable to load configuration.
    es6之map解构数组去重
    ES6之对象的方法
    ES6之genorator和yield使用(迭代器)
  • 原文地址:https://www.cnblogs.com/liumantang/p/11830393.html
Copyright © 2011-2022 走看看