为什么在ros上跑ros turtlesim安装elsim小乌龟不跑

太一吾鱼水
对于一个新新新手,Linux,ROS都要学习。安装ROS真的很讨厌了,于是采用易科机器人实验室的ubuntu12.04-amd64-ros-exbot-h2-140520版本。
测试一下小乌龟节点、主题什么的。
新建一个终端,输入$ roscore
新建一个终端,输入$ rosrun turtlesim turtlesim_node
新建一个终端,输入$ rosrun turtlesim turtle_telelop_key
移动上下左右键,看到小乌龟移动了。
新建一个终端,输入$ rosnode list
查看运行的节点。
阅读(...) 评论()ROS学习&&二&&ROS基本概念
作者:Sam (甄峰)&
这里介绍几个ROS基本概念。
<font COLOR="#. 节点(Node)
节点是ROS中最重要的概念之一。每个ROS运行实例被称为节点。
换句话说,每个ROS程序运行的进程,就是一个节点。每个机器人程序,可以有非常多个节点。
我们也可以运行同一个程序的多个副本(但要确保每个副本使用不同节点名),则每个副本都被当作一个独立节点。
节点(Node)可以用来提供某种数据或能力,比如读取某Sensor数据。也可以是一个获取这些数据并处理的节点(Node),
例如从别的节点那拿到Sensor并处理。但他们之间如何知道对方存在与否呢?哪些node需要哪种数据呢?这就需要有个管理者,它就是Node
Master/ Node Core。
每个Node启动时,需要向它注册,申明自己提供什么服务或需要什么数据。
Node是ROS package中一个可执行文件。ROS
利用ROS用户库去和其他node进行通信。nodes也可以向topic发起发布或者订阅,nodes也可以提供或者使用一个service.
为何说Node是ROS核心,看看它通常被用来做什么:
控制电机速度,获取激光雷达数据,获取Camera数据,利用以上数据定位,路径规划。
启动一个Node:
#rosrun package-name executable-name
两个参数,参数1:功能包名。 参数2:可执行文件名。(后面会谈到功能包)
查看当前有哪些Node:
#rosnode list
停止一个Node:
#rosnode kill node-name
虽然也可以ctrl-c停止,但此时Node master 可能会没有及时注销此node.
造成误会。(当然这种情况可以:rosnode cleanup)
查看当前运行的node的信息:
#rosnode info Node_Name
#rosnode list
/teleop_turtle
可以看到,当前有4个Node.
#rosnode& info&
--------------------------------------------------------------------------------
Node [/turtle2]
Publications:
&* /turtle1/color_sensor [turtlesim/Color]
&* /rosout [rosgraph_msgs/Log]
&* /turtle1/pose [turtlesim/Pose]
Subscriptions:
&* /turtle1/cmd_vel [geometry_msgs/Twist]
&* /turtle1/teleport_absolute
&* /turtle2/get_loggers
&* /turtle2/set_logger_level
&* /turtle1/set_pen
&* /turtle1/teleport_relative
contacting node http://ubuntu:34885/ ...
Connections:
&* topic: /rosout
&&& * direction:
&&& * transport:
&* topic: /turtle1/cmd_vel
/teleop_turtle (http://ubuntu:41004/)
&&& * direction:
&&& * transport:
<font COLOR="#. 节点管理器(Node Master/ Node
为了每个独立的节点(Node)能够彼此通讯,ROS中有ROS节点管理器存在。
它用来保存节点的话题与服务的注册信息和查找表。
ROS Node在启动时连接到ROSCore上,如果ROSCore被终止,哪怕再次启动。ROS
Node也不会自动重新连接。
启动roscore:
举例说明:
开三个终端,依次启动 roscore, turtle_teleop_key, turtlesim_node.
#rosrun turtlesim turtlesim_node
#rosrun turtlesim turtle_teleop_key
首先启动roscore.
接着启动turtlesim功能包内的两个程序。
功能包turtlesim中的turtle_teleop_key程序接收Keyboard信号,发送消息给turtlesim_node,以控制小乌龟移动。&
#rosnode list
则可以看到三个node,他们名字分别为:
/teleop_turtle
/turtlesim
可以看到,节点名与可执行程序名并不一定相同。
<font COLOR="#.
关于Node名,应用程序名的思考:
前面提到,Node就是一个进程,是一个应用程序的执行实例。
应用程序名,则是编译时指出编译结果是何种文件名。
Node名,可以理解为进程名。而同一时刻,正在运行的Node,名字不能重复。(应该类似PID不能重复)
但我们可能需要同一个应用程序运行多次,形成多个Node。该如何处理呢? 只需要在启动Node时,指定不同应用程序名即可。
#rosrun package-name executable-name __name:=Node-name
所以上面启动小乌龟的程序,就可以启动两次小乌龟如下:
#rosrun turtlesim turtlesim_node
__name:=tur1
#rosrun turtlesim turtlesim_node
__name:=tur2
#rosrun turtlesim turtle_teleop_key
用键盘可以控制两个小乌龟运动。
#rosnode list
可以看到,两个乌龟程序node名分别为:tur1, tur2.
<font COLOR="#. ROS
Node之间,是通过Message来传递消息的。
Node之间通过Message通讯。每个Message就是一个数据结构。geonetry_msgs/Twist.msg.
<font COLOR="#. ROS
Topic(主题):
ROS Node之间通讯方式主要依靠的就是主题(Topic)和服务(Service), 参数(parameter) 三
种。Message就是放在Topic中。
Message传递的的理念:
当一个节点想要分享信息时,它就会发布(publish)消息到对应的一个或多个Topic(主题);当一个节点想要接收消息时,它就会订阅(Subscribe)它所需要的一个或多个Topic。
ROS Topic:&
主题是由ROS网络队消息进行路由,对消息进行管理的数据总线。没一条消息都要发布到相应的主题上。当一个节点发送数据时,我们就说这个节点向主题发布了消息。
节点可以通过订阅某个主题,接受别的节点发布的消息。
ROS Master负责确保发布Node和订阅Node能找到对方。而Message是直接从发布Node传递到订阅Node.
并不需要经过Node Master。
A:消息以一种publish/subscribe的方式传递。
B:节点可以在给定的主题中发布/订阅消息。
C:一个节点可以订阅/发布多个不同主题。
D:允许多个Node订阅/发布同一个主题。
E:订阅节点和发布节点并不知道相互之间的存在。
Message注册和订阅过程:
Talker这个Node,启动后注册了一个Topic,名为bar, 并告知Node Master,接收端口为:1234。
Listener这个Node启动后订阅了一个Topic,名为bar.
Node Master告知Listener,主题的端口为1234。
Listener去连接1234端口,Talker监听到有人连接。就告知对方,数据接口是2345。
于是两个Node就连通起来了。
同一个时刻,只有一个Node Master。所以可以共享数据。
我们继续用上面的程序来查看Topic.
#rosrun turtlesim turtlesim_node
#rosrun turtlesim turtlesim_node __name:=turtle2
#rosrun turtlesim turtle_teleop_key
1. 运行了roscore,
2. 运行了turtlesim包内的turtlesim_node这node两次,使用不同的node_Name.
3. 运行了turtlesim包内的turtle_teleop_key.
turtlesim_node和turtle_teleop_key
node之间用topic交流通信.
turtle_teleop_key
在这个topic上发布按键敲击,而turtlesim订阅同样的topic接受按键敲击.
可以使用可视化工具查看Topic的数据传输。
#rosrun rqt_graph rqt_graph
<font COLOR="#.& ROS Service
ROS服务与Topic不同。
A:它是一种Request/reply的方式传递。
B:节点之间发送请iu和接受应答。
C:一对一模式,一个请求,一个响应。
6.5:Parameter:
parameter&可以看作为ros系统运行时中定义的全局变量,而master&node&中有parameter&server&来维护这些变量。
<font COLOR="#.&功能包/软件包&
(Packages)
功能包适ROS中组织软件的主要形式,可以编写代码并编译,执行。一个功能包一般包含程序文件,库文件,编译描述文件,配置文件,脚本等。
它是一组用于实现特定功能的相关文件集合。每个功能包由一个清单文件(package.xml)定义。
功能包相关命令:
list&&&&&:列出所有功能包。
#rospack find package-name&& :
寻找功能包
<font COLOR="#.&功能包集(stack)
Stack通常提供一个完整的功能,例如:navigation stack.&
stack与版本号关联,是发布如何发布ROS软件的关键。
Package manifest-----manifest.xml或package.xml:
说明包名,许可信息,以及和其它包的依赖关系。
Stack manifest------stack.xml: stack元数据,说明与其它stack的依赖关系。
从Groovy版本开始,功能包集的概念被逐步淘汰,取而代之的是元功能包(metapackages)
Nodes:node是使用ROS去和其它node通信的可执行文件。
Messages:ROS中订阅或者发布给topic的一种数据形式。
Topics:Nodes可以发布messages给一个topic,也可以订阅一个topic去接受它的messages。
Master:为ROS提供名称服务(比如帮助nodes找到彼此)。
rosout:相当于ROS中的stdout/stderr。
roscore:Master+rosout+parameter
server(参数服务之后会介绍)。
<font COLOR="#. 功能包的安装:
一些功能包已经被加入仓库中了。所以可以使用apt-get install来安装之。
sudo apt-get install ros-hydro-ros-tutorials
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。ros备忘录(2)
节点可以发布消息到话题,也可以订阅话题以接收消息。
1)An Example
照例$ roscore进行初始化
*每一次工作的时候只要使用一次该命令就可以,否则报错。
*该命令运行外开启新终端继续工作
分别用rosrun运行turtlesim包中的turtlesim_node节点和turtle_teleop_key节点,他们的作用分别为开启模拟器建立一个新的小乌龟和用键盘移动小乌龟
*每运行一个节点要开启一个新终端
*要控制小乌龟要在终端turtle_teleop_key界面而不是模拟器界面
turtlesim_node节点和turtle_teleop_key节点之间是通过一个ROS话题来互相通信的。turtle_teleop_key在一个话题上发布按键输入消息,而turtlesim则订阅该话题以接收该消息。下面让我们使用rqt_graph来显示当前运行的节点和话题。
2.1)安装rqt_graph
rqt_graph是一个能够创建一个显示当前系统运行情况的动态图形的工具。rqt_graph是rqt程序包中的一部分,所以要首先安装rqt包
$ sudo apt-get install ros-&distro&-rqt
$ sudo apt-get install ros-&distro&-rqt-common-plugins
*不过在思考第二条common plugins为什么要单独装一下,这俩不是包含关系么-。-?
2.2)使用rqt_graph
$ rosrun rqt_graph rqt_graph
得到一副框图。显示了当前节点之间的通信。鼠标移上去的时候将会他们的颜色会改变。红色有向箭头从蓝色节点指向绿色。我多建立了一个my_turtle节点(原turtlesim保留),则有两条线从teleop_turtle分别指向my_turtle和turtlesim,线上的名字为话题名。
2.3)$ rostopic echo [topic]
rostopic echo可以显示在某个话题上发布的数据。
2.3.1)$ rostopic echo /turtle1/cmd_vel
使用该指令看cmd_vel话题发布的数据(它沟通的两个节点中传递的数据),一开始并没有返回任何结果,因为此时没有移动键盘,就没有返回结果。
2.3.2)$ rostopic list
2.3.2.1)$ rostopic list -h
就是–help -h都是看XX指令的子指令的
2.3.2.2)$ rostopic list -v
等价–verbose,列出所有话题的有关信息。比如本例中
Published topics:
* /turtle1/color_sensor [turtlesim/Color] 1 publisher
* /turtle1/command_velocity [turtlesim/Velocity] 1 publisher
* /rosout [roslib/Log] 2 publishers
* /rosout_agg [roslib/Log] 1 publisher
* /turtle1/pose [turtlesim/Pose] 1 publisher
Subscribed topics:
* /turtle1/command_velocity [turtlesim/Velocity] 1 subscriber
* /rosout [roslib/Log] 1 subscriber
2.3.2.3)$ rostopic list -b
等价–bag 列出包里的话题
2.3.2.4)其他
list only publishers
list only subscribers
话题之间的通信(话题实现节点间的通信)是通过在节点之间发送ROS消息实现的。对于发布器(turtle_teleop_key)和订阅器(turtulesim_node)之间的通信,发布器和订阅器之间必须发送和接收相同类型的消息。这意味着话题的类型是由发布在它上面的消息类型决定的。使用rostopic type命令可以查看发布在某个话题上的消息类型。
2.4.1)$ rostopic type [topic]
该命令用来查看所发布话题的消息类型,hydro以后版本运行:
$ rostopic type /turtle1/cmd_vel
2.4.2)$ rosmsg
rosmsg指令用来查看消息的详细情况,并以此判定turtlesim节点(接收话题的节点)期望的消息类型。hydro以后版本运行:
$rosmsg show geometry_msgs/Twist
geometry_msgs/Vector3 linear
geometry_msgs/Vector3 angular
2.5)Rostopic advanced~~
2.5.1)$ rostopic pub [topic] [mes_type] [args]
rostopic pub可以把数据发布到当前某个正在广播的话题上,相当于用指令直接操作程序。hydro以后版本运行
让小乌龟转一下的指令
$ rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'
让小乌龟一直转啊转的指令:
$ rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'
其中rostopic pub命令将会发布消息到某个给定的话题。
-1(单个破折号)这个参数选项使rostopic发布一条消息后马上退出,所以去掉他,小乌龟就能一直转
/turtle1/cmd_vel是消息所发布到的话题名称
geometry_msgs/Twist是所发布消息的类型
–(双破折号)这会告诉命令选项解析器接下来的参数部分都不是命令选项。这在参数里面包含有破折号-(比如负号)时是必须要添加的。
2.0 1.8是两个浮点数,分别代表linear和angular。这些参数是俺YAML语法格式写的,在YAML文档中有更多描述。
2.5.2)$ rostopic hz [topic]
查看数据发布的频率。
如查看turtlesim_node发布/turtle/pose时有多快:
$ rostopic hz /turtle1/pose
返回将类似
subscribed to [/turtle1/pose]
average rate: 59.354
min: 0.005s max: 0.027s std dev: 0.00284s window: 58
average rate: 59.459
min: 0.005s max: 0.027s std dev: 0.00271s window: 118
*此处average rate:59.354为频率,单位Hz,此处知道turtlesim正以大约60Hz的频率发布数据给turtle
*用$ rostopic type /turtle1/cmd_vel | rosmsg show来获取话题的详细信息
2.6)rqt_plot
这个工具可以实时显示一个发布到某个话题上的数据变化图形。现在绘制发布到/turtle1/pose话题上的数据变化图形。
$ rosrun rqt_plot rqt_plot
其实选项里还有使用线性还是log坐标轴啊,保存图片调整图片位置大小啊之类的选项=-=是个很好懂的孩子啦。
*Ctrl-C退出rostopic命令
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:384次
排名:千里之外ros基础部分 之后分章节做笔记(弱鸡,有些错误的地方后续修正) - cquzhengdayday的博客 - CSDN博客
ros基础部分 之后分章节做笔记(弱鸡,有些错误的地方后续修正)
启动小乌龟的命令
/opt/ros/indigo/setup.bash
然后分别在三个终端下命令三段命令
启动节点管理器 roscore
rosrun turtlesim turtlesim_node 打开仿真器
rosrun turtlesim turtle_teleop_key 控制方向
 功能包/软件包
turtlesim_node和turtle_teleop_key都属于turtlesim包
使用rospack list可以获取所有已安装的ros软件包列表清单
要找到一个软件包的目录使用rospack find命令: rospack find package-name
支持tab补全
查看软件包目录下的文件 rosls package-name
访问某软件目录,可以将当前目录切换至此软件包目录 roscd package-name
节点管理器
ros是一个基本目标是使机器人专家设计的很多称为节点(node)的几乎相对独立的小程序能够同时运行。这些节点必须能够彼此通信。 ros中实现通信的关键部分就是ros节点管理器。要启动节点管理器,使用如下命令:roscores
一个合理的操作是在一个终端启动roscore,然后打开其他终端运行其他程序。一般不终止rosscore命令。
一旦启动roscore后,便可以有运行ROSc程序了,ROS程序的运行实例被称为节点(node)。
rosrun有两个参数,其中一个参数功能包的名字,第二个参数是改软件包中的可执行文件的名称
通过节点管理器注册成为ROS节点发生在程序的内部,而不是通过rosrun命令
查看节点列表 rosnode list
rosout节点是一个特殊的节点,通过roscore自动启动。其作用有点类似控制台的标准输出std::out
要获得特定节点的信息,使用如下命令:
rosnode info node-name
这个命令的输出包括话题列表,节点是这些话题的发布者或者订阅者
包括服务列表:这些服务是改节点的提供的。
其linux进程标示符,以及和 与其他节点的所有连接 
终止节点 rosnode kill node-name
如果用ctrl+c杀死节点,那么会导致已终止的节点仍会在rosnode列表中,可以使用rosnode cleanup删除
话题和消息
消息传递的机制
当一个节点想要分享信息时候,它将就会发布消息到对于的 一个或者多个话题中
当一个节点啊想要接受信息时,它就会订阅它所需要的一个或者多个话题
ros节点管理器负责确保发布节点和订阅节点能找到对方,而且消息是直接地从发布节点传递到订阅节点,中间不经过节点管理器转交
查看节点构成的计算图
ros系统中查看节点之间的发布-订阅关系输入命令rqt_graph,其中r表示ROS,qt指的是用来实现这个可视化程序的QT图形界面(GUI)工具包。
在默认情况下,rqt_graph隐藏了其认为只在调试过程中使用的节点。
远程操作不关心哪个程序订阅了它发布的cmd_vel消息,任何订阅了相关话题的程序都能自主选择是否响应这些命令
消息与消息的类型
获取当前活跃的话题使用如下命令 rostopic list
查看某个话题上发布的消息,可以利用rostopic命令 rostopic echo topic-name,这条命令将会在终端里显示出指定话题里发布的任何消息。
测量发布频率
测量消息发布的频率以及这些消息所占用的带宽
rostopic hz topic-name
rostopic bw topic-name
这些命令订阅的话题,并输出一些统计量,其中第一条命令输出每秒发布的消息数量,第二条输出每秒发布消息所占的字节量
查看消息类型
rosmsg show message-type-name
比如 rosmsg show turtlesim/Color
域(field),每行一个元素,每一个域都是由基本数据类型(列如:int8,bool,string)以及域名称定义。
一个复合域是由简单的一个或者多个子域组合而成的,其中每一个子域也可能是另一个复合域或者独立的域,而且他们一般也是都由基本数据类型组成。
用命令行发布消息
利用rostopic命令工具:rostopic pub –r rate-in-hz topic-name message-type
message-content  这条命令重复的按照指定频率给指定的话题发布指定的消息。 该命令最后的参数message-content应该按照顺序听消息类中所有域的参数值,例如: rostopic
pub –r 1 /turtle1/cmd_vel geometry_msgs/Twist ‘[2,0,0]’ ‘[0,0,0]’
上述的前面三个数字表示期望的位移线速度,后面三个数字表示期望的角速度。用单引号和中括号组织这些数字赋给他们对应的两个顶层复合域变量。最中要的两个是非0域--位移linear.x以及角度angular.z–是turtlesim重点关注的两个变量。其他4个变量对二维仿真俩说是不可能发生的。
-r后面的有两个模式一个是-l默认的锁存模式,只执行一次,但是会确保新的订阅者或收到消息,-1是以一定的时间周期发布消息。
-r可以替换成-f表示从文件中读取信息,或者从标准输入中读取,两种情况下,输入应该复合rostopic echo的输出格式
理解消息类型的命名
消息类型名总会包含一个斜杠,斜杠前面的名字是包含它的包:package-name/type-name
例如: turtlesim/Color 消息类型按如下方式分解: turtlesim(功能包) + Color(类型名) = turtlesim/Color(消息类型)
复杂的消息传递
rosrun turtlesim turtlesim_node __name:=A
rosrun turtlesim turtlesim_node __name:=B
rosrun turtlesim turtle_teleop_key __name:=C
rosrun turtlesim turtle_teleop_key __name:=D
后面的参数__name 表示每个节点赋予了每个节点自己的默认名称,覆盖是必要的,因为ros节点管理器不允许多个节点拥有相同的名称。
节点直接的松耦合关系
对于绝大多数的设计精巧的ROS节点–是松耦合的,每个节点都不需要显式知道其他节点的存在与否,他们的唯一交互是间接地发生在基于话题和消息的通信层。
ROS程序最关键的设计特性之一:复杂任务分解成可重用的小模块
ros为更加直接的一对一通信提供了一种称为服务(services)的机制。
当ros没有预期运行时,可以使用一个命令行工具 roswtf,该命令可以不带参数运行,这条命令和深入的检查,包括检测你的环境变量、安装文件以及运行节点,任何节点是否出现意外的挂起或者终止,以及活跃的节点是否正确地和其他节点相链接。可惜是,由roswtf检测的完整列表只能在python中才能找到
编写ROSc程序
创建工作区和功能包
先创建工作区名/home/jokane/ros
mkdir 子目录名
mkdir -p 目录名
在工作区目录下创建src目录 在src目录下运行catkin_createpkg package-name(需要在管理员权限下去catkin文件)这个时候会在package-name下面新建二个文件用来添加依赖和cmake.(packeage.xml
CmakeLists.txt是一个cmake的脚本)
ros::init函数初始化ROS客户端库,函数最后的参数是一个包含节点默认名的字符串
ros::NodeHandle(节点句柄)对象是你的程序用于和ROS系统交互的主要机制。创建此对象会将你的程序注册为ROS节点管理器的节点。最简单的方法就是在整个程序中只创建一个NodeHandle对象。
向cmakelists里添加依赖find_package(catkin REQUIRED COMPONENTS package-names)
向package.xml里添加package-name
package-name
声明可执行文件add_executable(hello hello.cpp)
target_link_libraries(hello ${catkin_LIBRARIES})
catkin_make 编译工作区
运行前先执行 source devel/setup.bash 然后开始运行rosrun package-name file-name
包含消息类型的声明
每一个ROS话题都与一个消息类型相关联。每一个消息类型都有一个对应的c++头文件。
我的热门文章
即使是一小步也想与你分享1030人阅读
Linux/Ubuntu(73)
参考网址:
1,小海龟例子
(1) 在新的终端打开roscore
$ roscore---如果出错,请确定关闭所有ROS命令或者路径,重试。
(2) 在新的终端打开运行小海龟界面
$ rosrun turtlesimturtlesim_node&
得到结果:
[ INFO] [.]: Starting turtlesim with nodename /turtlesim
[ INFO] [.]: Spawning turtle [turtle1] atx=[5.555555], y=[5.555555], theta=[0.000000]
此后小海龟运行的路径都记录在此终端
(3) 在新的终端打开鼠标控制终端
$&rosrun turtle_teleopturtle_teleop_key&
将鼠标放在此终端界面,然后用键盘上的“上,下,左,右”控制小海龟移动,以下是我运行的界面,是不是有点像SIAT?
2,ROS 主题
就像小海龟这个例子,turtlesim_node和turtle_teleop_key 节点在ROS主题上进行通信,turtle_teleop_key在该主题上发送key strokes, turtlesim在相同主题上,预定该keystrokes。我们可以用rxgraph来显示该节点和主题间的交流。
(1) 主题显示
$ rxgraph --在新终端输入该命令
得到结果如图:
下面的图诠释了,节点,主题:
(2) rostopic 介绍
I,rostopic -h
$ rostopic -h
得到结果:
rostopic is a command-line tool for printing information aboutROS Topics.
rostopic bw display bandwidth used by topic
rostopic echo print messages to screen
rostopic find find topics by type
rostopic hz display publishing rate of topic& &
rostopic info print information about active topic
rostopic list list active topics
rostopic pub publish data to topic
rostopic type print topic type
Type rostopic &command& -h formore detailed usage, e.g. 'rostopic echo -h'
II,rostopic echo [topic]
我们查看/turtel/command_velocity主题通过turtle_teleop_key节点发布的数据,在新终端输入:
$ rostopic echo/turtle1/command_velocity
当我们把鼠标放在turtle_teleop_key 终端页面,运行小海龟时,得到结果:
linear: 2.0
angular: 0.0
linear: 0.0
angular: -2.0
linear: 0.0
angular: 2.0
linear: -2.0
angular: 0.0
linear: 2.0
angular: 0.0
linear: 2.0
angular: 0.0
这样我们再看rxgraph显示的终端,如下,在INFO栏,显示了信息
III, rostopic list -h
返回所有主题当前预定和发布的数据,子命令如下:
Usage: rostopic list [/namespace]
&&-h, --help& & && & &show thishelp message and exit
&&-b BAGFILE,--bag=BAGFILE
&& && & && & && & &&list topics in .bag file
&&-v, --verbose& & && list full details about each topic
&&-p && & && & && & &list onlypublishers
&&-s && & && & && & &list onlysubscribers
例如,查询当前主题的预定和发布数据:
$ rostopic &list-v
得到结果:
Published topics:
&* /turtle1/color_sensor [turtlesim/Color] 1publisher
&* /turtle1/command_velocity[turtlesim/Velocity] 1 publisher
&* /rosout [roslib/Log] 3 publishers
&* /rosout_agg [roslib/Log] 1 publisher
&* /turtle1/pose [turtlesim/Pose] 1publisher
Subscribed topics:
&* /turtle1/command_velocity[turtlesim/Velocity] 2 subscribers
&* /rosout [roslib/Log] 1 subscriber
3,ROS消息
在ROS主题上,是通过消息进行通信的。发布者(turtle_teleop_key)和预定者(turtlesim_node)之间的通信,发布者和预定者发送和接受的同一类型的消息,这就决定了发布者决定主题类型。
I, rostopic type [topic]
返回当前运行主题的消息类型,例如小海龟例子:
$ rostopic type/turtle1/command_velocity
得到结果:
turtlesim/Velocity
$&rosmsgshow turtlesim/Velocity --查询消息类型细节
得到结果:
float32linear float32 angular
4,将消息应用到主题上
I,rostopic pub [topic] [msg_type] [args]
将数据发布到当前主题上,例如小海龟例子:
$rostopic pub -1 /turtle1/command_velocity turtlesim/Velocity --2.0 1.8
命令诠释:
rostopicpub ---在给定主题上发布消息
-1---此选项表示rostopic只发布一个消息,然后退出
/turtle1/command_velocity---给定的主题名
turtlesim/Velocity---在给定主题上发布的消息类型
-----双负号,表示词法选择器在此后的参数都不可用。这种情况发生在错误参数比如负数
2.01.8 ---当前主题消息的类型的数据&#20540;
得到的结果:
终端显示:
publishingand latching message for 3.0 seconds
图运行的结果是:
另外,如果要保持小海龟一直移动,可以采用-r,例如:
$ rostopic pub /turtle1/command_velocity turtlesim/Velocity -r 1 --2.0 -1.8
运行结果:
我们查看下rxgraph图显示:
我们可以看到小海龟运行一个圈的轨迹。
II,rostopic hz [topic]
是用来报告哪个数据发布率,比如小海龟的例子:
$ rostopic hz /turtle1/pose
得到结果:
subscribed to [/turtle1/pose]
average rate: 44.767
min: 0.000s max: 0.053s std dev: 0.02014s window: 43
average rate: 44.994
min: 0.000s max: 0.054s std dev: 0.02016s window: 87
average rate: 45.382
min: 0.000s max: 0.054s std dev: 0.01993s window: 134
average rate: 45.032
min: 0.000s max: 0.063s std dev: 0.02003s window: 177
average rate: 45.165
min: 0.000s max: 0.063s std dev: 0.01999s window: 224
III,rxplot
是展示画出该主题上发布的数据,比如我们对小海龟转圈,这个例子
$&rxplot/turtle1/pose/x,/turtle1/pose/y /turtle1/pose/theta---针对上面图得到:
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:421129次
积分:5930
积分:5930
排名:第4163名
原创:142篇
转载:167篇
评论:106条
阅读:12050
(2)(1)(1)(4)(1)(6)(1)(5)(1)(6)(5)(1)(2)(1)(6)(1)(3)(8)(8)(3)(17)(8)(16)(1)(1)(1)(6)(1)(1)(6)(6)(11)(22)(23)(4)(11)(3)(4)(16)(3)(16)(2)(7)(16)(4)(1)(2)(7)(2)(16)(17)}

我要回帖

更多关于 ros use sim time 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信