ROS中常用的一些命令
2018-01-22 09:37
441 查看
图概念概述
Nodes:节点,一个节点即为一个可执行文件,它可以通过ROS与其它节点进行通信。Messages:消息,消息是一种ROS数据类型,用于订阅或发布到一个话题。
Topics:话题,节点可以发布消息到话题,也可以订阅话题以接收消息。
Master:节点管理器,ROS名称服务 (比如帮助节点找到彼此)。
rosout: ROS中相当于stdout/stderr。
roscore: 主机+ rosout + 参数服务器 (参数服务器会在后面介绍)。
节点
一个节点其实只不过是ROS程序包中的一个可执行文件。
ROS节点可以使用ROS客户库与其他节点通信。
节点可以发布或接收一个话题。
节点也可以提供或使用某种服务。
使用rospack和rosstack
rospack和rosstack命令都包含于rospackpackage中.两个命令用于获取packages 和stacks的信息.
教程中我们只提及命令的find的参数,作用是返回相应package或者stack的目录路径.
Rospack depends package 功能包依赖项查询
roscd log
roscd log命令切换到ROS储存日志文件的目录。注意:如果从未运行过任何ROS程序,命令会返回目录不存在的错误。
使用 rosls
rosls包含于rosbash package中.作用是列出指定的package或stack中的文件及目录
Rosnode
用来显示当前运行的ROS节点信息。rosnode list指令列出活跃的节点:
rosnode info命令返回的是关于一个特定节点的信息
rosparam
rosparam set 设置参数rosparam get 获取参数
rosparam load 从文件读取参数
rosparam dump 向文件中写入参数
rosparam delete 删除参数
rosparam list 列出参数名
rosmsg
rosmsg show(显示消息)users(显示使用指定消息的代码)
package(列出指定功能包中的所有消息)
rosnode package 列出带有消息的所有功能包
rosrun [package_name] [node_name]
$ rosrun rqt_graph rqt_graph
创建包catkin
$ catkin_create_pkg beginner_tutorialsstd_msgs rospy roscprostopic介绍
rostopic命令工具能让你获取有关ROS话题的信息。你可以使用帮助选项查看rostopic的子命令:
$ rostopic -h
显示:
rostopic bw display bandwidth used by topic
rostopic echo print messages to screen
rostopic hz display publishing rate of topic
rostopic list printinformation about active topics
<
4000
p>rostopic pub publish data to topic
rostopic type printtopic type
rostopic echo
rostopic echo 可以显示在某个话题上发布的数据。用法:
rostopic echo [topic]
让我们在一个新终端中看一下turtle_teleop_key节点在/turtle1/command_velocit话题(非hydro版)上发布的数据.
$ rostopic echo /turtle1/command_velocity
如果你是用ROS Hydro 及其之后的版本(下同),请运行:
$ rostopic echo /turtle1/cmd_vel
你可能看不到任何东西因为现在还没有数据发布到该话题上。
接下来我们通过按下方向键使turtle_teleop_key节点发布数据。
记住如果turtle没有动起来的话就需要你重新选中turtle_teleop_key节点运行时所在的终端窗口。
rostopic list
rostopic list能够列出所有当前订阅和发布的话题。让我们查看一下list子命令需要的参数,在一个新终端中运行:
$ rostopic list -h
显示:
Usage: rostopic list [/topic]
Options:
-h,–help show this help messageand exit
-bBAGFILE, –bag=BAGFILE
list topics in .bagfile
-v,–verbose list full details abouteach topic
-p list onlypublishers
-s list only subscribers
ROS Messages
话题之间的通信是通过在节点之间发送ROS消息实现的。对于发布器(turtle_teleop_key和订阅器(turtulesim_node)之间的通信,发布器和订阅器之间必须发送和接收相同类型的消息。
这意味着话题的类型是由发布在它上面的消息类型决定的。
使用rostopic type命令可以查看发布在某个话题上的消息类型。
使用 rostopic type
rostopic type命令用来查看所发布话题的消息类型。
用法:rostopic type [topic]
我们可以使用rosmsg命令来查看消息的详细情况(非hydro版):
$ rosmsg show turtlesim/Velocity
Rostopic pub可以把数据发布到当前某个正在广播的话题上。
用法:rostopic pub [topic] [msg_type] [args]
rostopic pub -1 /turtle1/command_velocityturtlesim/Velocity – 2.0 1.8
-1
(单个破折号)这个参数选项使rostopic发布一条消息后马上退出。
/turtle1/command_velocity这是消息所发布到的话题名称。
turtlesim/Velocity这是所发布消息的类型。
–(双破折号)这会告诉命令选项解析器接下来的参数部分都不是命令选项。
这在参数里面包含有破折号-(比如负号)时是必须要添加的。
2.0 1.8
正如之前提到的,在一个turtlesim/Velocity消息里面包含有两个浮点型元素:linear和angular。
在本例中2.0是linear的值,1.8是angula的值。
这些参数其实是按照YAML语法格式编写的,这在YAML文档中有更多的描述。
你可能已经注意到turtle已经停止移动了。
$ rostopic pub /turtle1/cmd_velgeometry_msgs/Twist -r 1 – ‘[2.0, 0.0, 0.0]’ ‘[0.0, 0.0, 1.8]’
这条命令以1Hz的频率发布速度命令到速度话题上。
使用 rostopic hz
rostopic hz命令可以用来查看数据发布的频率。用法:rostopic hz [topic]
ROS Services
服务(services)是节点之间通讯的另一种方式。服务允许节点发送请求(request)并获得一个响应(response)
rosservice
rosservice可以很轻松的使用 ROS 客户端/服务器框架提供的服务。rosservice提供了很多可以在topic上使用的命令,如下所示:
使用方法:
rosservice list 输出可用服务的信息
rosservice call 调用带参数的服务
rosservice type 输出服务类型
rosservice find 依据类型寻找服务find services by service type
rosservice uri 输出服务的ROSRPC uri
rosservice type命令更进一步查看clear服务:
rosservice type使用方法:rosservice type [service]
我们来看看clear服务的类型:
$ rosservice type clear
显示:std_srvs/Empty
服务的类型为空(empty),这表明在调用这个服务是不需要参数(比如,请求不需要发送数据,响应也没有数据)。
下面我们使用rosservice call命令调用服务:
rosservice call使用方法:
rosservice call [service] [args]因为服务类型是空,所以进行无参数调用:
$ rosservice call clear
正如我们所期待的,服务清除了turtlesim_node的背景上的轨迹$ rosservice type spawn | rossrv show(了解参数的服务)
ros::ok()在以下几种情况下也会返回false:
(1)按下Ctrl-C时(2)我们被一个同名同姓的节点从网络中踢出
(3)ros::shutdown()被应用程序的另一部分调用
(4)所有的ros::NodeHandles都被销毁了。
一旦ros::ok()返回false,所有的ROS调用都会失败
ros::spin()和ros::spinonce()的区别在于:
前者调用后不在返回,后者调用后继续执行后面的程序。在使用ros::spin()的情况下
一般来说在初始化时已经设置好所有消息的回调,并且不需要其他背景程序运行。这样以来,每次消息到达时会执行用户的回调函数进行操作,相当于程序是消息事件驱动的;在使用ros::spinOnce()的情况下
一般来说仅仅使用回调不足以完成任务,还需要其他辅助程序的执行:比如定时任务、数据处理、用户界面等。rospy.init_node
rospy.init_node (name, anonymous=False,log_level=rospy.INFO,disable_signals=False)anoymous=True 通过在你名字的后边添加一个随机数,来保证你的节点独一无二。
rospy.on_shutdown(h)
rospy.on_shutdown(h)这个函数为Ctrl+C这类shutdown事件创建一个退出之前的回调函数h,可以在程序退出之前做点什么。如果在h函数内Publish消息,不保证能成功发出消息!Publisher
Publisher pub=rospy.Publisher(‘topic_name’,std_msgs.msg.String,queue_size=10)queue_size:
queue_size: None(不建议) 这将设置为阻塞式同步收发模式!queue_size: 0(不建议)这将设置为无限缓冲区模式,很危险!
queue_size: 1,2,3;对于只关心最新数据的sensor消息,可以设为1; 对于系统负载不高,能及时处理的消息,可以设为1,2,3.
queue_size: 10 or more ;一般情况下,设为10 。queue_size太大了会导致数据延迟不同步。
_connection_header
topic连接后,发送的数据中包括header信息,订阅者subscriber可以在回调函数的data中查看header信息:
Parameter Server
Getting parameters
global_name = rospy.get_param(“/global_name”)relative_name = rospy.get_param(“relative_name”)
private_param = rospy.get_param(‘~private_name’)
default_param = rospy.get_param(‘default_param’,‘default_value’)
# fetch a group (dictionary) of parameters
gains = rospy.get_param(‘gains’)
p, i, d = gains[‘P’], gains[‘I’],gains[‘D’]
Setting parameters
rospy.set_param(‘a_string’, ‘baz’)rospy.set_param(‘~private_int’, 2)
rospy.set_param(‘list_of_floats’, [1., 2., 3., 4.])
rospy.set_param(‘bool_True’, True)
rospy.set_param(‘gains’, {‘p’: 1, ‘i’: 2,‘d’: 3})
Deleting parameters
rospy.delete_param(param_name)Parameter existence
rospy.has_param(param_name)执行get_param()和delete_param()前,最好检查一下参数名是否存在。否则会引发KeyError异常。
Time
time和duration是rospy中两个重要的时间概念time指时刻,类型是rospy.Time。
duration指时段,类型是rospy.Duration
两者单位一样,直接print则是纳秒。数值形式一样:
int32 secs
int32 nsecs
timer
rospy.Timer(period, callback, oneshot=False)
period,调用回调函数的时间间隔,如rospy.Duration(0.1)即为10分之1秒。callback,定义回调函数,会传递TimerEvent实例
oneshot,定时器,是否执行多次。false即一直执行
在callback函数中参数为event:rospy.TimerEvent。TimerEvent的内部属性包括:
current_expected: 理想值,这次callback的被调用时刻。
current_real: 现实值,这次callback的被调用时刻。
last_expected: 上次的理想值。
last_real: 上次的现实值。
last_duration: 上次callback的持续时段
Exceptions
除了python体系内的异常类型,rospy还有下面几种exception异常类型:-ROSException:ROS相关异常的基类。
-ROSSerializationException:ROS消息串行化异常!
-ROSInitException: ROS初始化异常!
-ROSInterruptException:ROS中断异常!
-ROSInternalException:ROS内部异常!
-ServiceException:Service通信异常!
相关文章推荐
- ros中常用的一些命令
- ROS中常用的一些命令
- windows从cmd中键入命令的一些常用小工具
- oracle创建表的方法和一些常用命令
- 数据库的一些基本常用命令
- linux 一些常用的命令
- 近两年常用的一些SHELL命令
- Ubuntu下安装Docker,及Docker的一些常用命令操作
- linux vim .bashrc 配置以及一些常用的linux 命令解析(下)
- PostgreSQL一些常用命令
- Linux配置JForum的一些常用命令及操作
- 适合Linux入门者一些常用的命令
- 我常用的一些注入命令,方便一下大家
- crontab的一些常用命令
- windows下ftp上传下载和一些常用命令
- mysql中一些常用的命令
- Linux之我做系统性能调优时常用的一些命令
- Git的一些常用命令
- Linux 中常用的一些文件以及常用命令
- 一些常用的windows命令