zoukankan      html  css  js  c++  java
  • 1.ROS启动小乌龟

       

    启动turtlesim

    在三个不同的终端中分别执行如下三个指令

    roscore

    rosrun turtlesim turtlesim_node

    rosrun turtlesim turtle_teleop_key

       

    查看软件包列表和定位软件包 package使用命令

    rospack list

       

    找到一个软件包的目录,使用rospack find命令

    rospack find package-name

    例如:rospack find turtle

    查看软件包

    rosls package-name

    例如:rosls turtlesim

    访问软件包roscd package-name

    例如:roscd turtlesim/images

    节点管理器:ROS的一个基本目标是使机器人专家设计的很多称为节点(node)的几乎相对独立的小程序能够同时运行。为此,这些节点必须能够彼此通信。ROS中实现通信的关键部分就是ROS节点管理器。

       

    启动节点管理器,使用如下命令

    roscore

       

       

     节点管理器应该在使用ROS的全部时间内持续运行(也就是说这个终端运行roscore之后就不要关闭!)。一个合理的工作流程是在一个终端启动roscore,然后打开其他终端运行其他程序。除非你已经完成ROS的相关工作,否则一般没有理由终止roscore命令。当结束时,可以通过在roscore终端键入Ctrl-C停止节点管理器。

       

    节点Nodes:一旦启动了roscore后,就可以运行ros程序了,ros运行程序的实例被称为节点。节点的名字都是唯一的。比如在turtlesim的例子中,我们要启动两个节点,分别为模拟turtle的程序turtlesim以及控制其运动的程序turtle_teleop_key。节点turtle_teleop_key节点的作用是捕捉方向键被按下,然后将按键信息转化为运动指令,然后将指令发送导turtlesim_node节点

    启动节点:

    rosrun package-name executable-name

    第一个参数是功能包的名字,第二个参数是该软件功能包中可执行文件的名称。比如我们要创建一个模拟turtle的节点,一个控制turtle移动的节点,则在两个终端里面分别输入以下命令

    终端1:

    rosrun turtlesim turtlesim_node

    终端2:

    rosrun turtlesim turtle_teleop_key

       

       

    查看节点列表命令:rosnode list

    例如:我们在turtlesim的例子中,输入rosnode list后,显示如下结果

    / rosout

    / teleop_turtle

    / turtlesim

    (比较rosnode list的输出与rosrun命令中的可执行文件的名称,你会发现二者并不一定相同)

    事实上,可以使用rosrun命令显式设置节点的名称,语法如下:

    rosrun package-name executable-name __name:=node-name

    这种方法将使用node-name参数给出的名称覆盖节点的默认名

       

    其中rosout是一个特殊的节点请注意,通过roscore自动启动,

    一般除了在终端使用 rosnode list命令查看当前的节点情况外,ROS还提供了一种更加直观的方式来显示ROS节点数,命令为:rqt_graph,然后显示如下节点分布情况。(在默认情况下,rqt_graph隐藏了其认为只在调试过程中使用的节点。你可以通过取消"Hide debug"选项来禁止这个特性)

       

     

    查看节点信息:rosnode info node-name

     

    消息和消息类型

    目前为止,我们已经了解了这些节点能相互传递消息,但这些消息里到底包含了什么信息,我们对此还是一无所知。下面,我们将深入探讨话题和消息。

    话题列表:

    rostopic list

    在终端中显示结果为:

    /rosout

    /rosout_agg

    /turtle1/cmd_vel

    /turtle1/color_sensor

    /turtle1/pose

    其实细心的你可以从上面的rqt的图中就可以看的出来,途中方框表示的是topic,刚好是5个,所以这里的List显示的topic 为5个也不足为奇了。

    在上面启动的两个节点中,控制节点检测键盘方向按键,然后在turtlesim中的乌龟就会移动,他们之间是以消息传递的,就是通过某个话题发布消息,我们现在打开另外一个终端,输入命令

    rostopic echo /turtle1/cmd_vel

    看看具体传递的消息是啥?

    继续控制乌龟移动,可以发现在终端上的情况

     

       

       

    可见消息内容为位移和角度情况。但是为什么数据格式是0.0、2.0等等格式呢,那么我们来具体看看话题的信息,

    查看话题信息 rostopic info topic-name

    输入:rostopic info /turtle1/cmd_vel

    其中指出了Type、Publishers、Subscribers,其中第一个type特别重要,因为它定义了该话题中的消息类型。因此在话题/turtle1/cmd_vel中传送的消息类型为

    geometry_msgs/Twist

       

    理解消息的类型很重要,因为它决定了消息的内容。也就是说,一个话题的消息类型能告诉你该话题中每个消息携带了哪些信息,以及这些信息是如何组织的。接下来我们顺藤瓜,去看看消息类型的具体内容——查看消息类型。

    查看消息类型:命令为:

    rosmsg show message-type-name

    对上述的geometry_msgs/Twist尝试如下命令

    rosmsg show geometry_msgs/Twist

    理解消息类型的命名:

    和ROS里其他的程序一样,每条消息类型都属于一个特定的包。消息类型名总会包含一个斜杠,斜杠前面的名字是包含它的包:

    package-name/type-name

    例如:geometry_msgs/Twist消息类型可以按照如下方法分解

    geometry_msgs + Twist => geometry_msgs/Twist

       

       

       

    厚积薄发,开物成务。 德才兼备、知行合一。 自强不息,厚德载物。
  • 相关阅读:
    统计一个字符串中字母、空格和数字的个数
    java 将一个数组中的值按逆序重新存放,例如,原来顺序为:9,5,7,4,8,要求改为:8,4,7, 5,9。
    java判断一个数是否为素数[转]
    Set集合
    List&ArrayList&LinkedList
    java_异常
    内部类&匿名内部类
    多态&抽象类&接口
    数组排序和字符串
    Java笔记_数据类型和运算符
  • 原文地址:https://www.cnblogs.com/robohou/p/7351950.html
Copyright © 2011-2022 走看看