ROS中常用的一些命令
2017-11-13 21:35
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
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都被
4000
销毁了。
一旦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中常用的一些命令
- Linux常用的一些命令
- Vi/Vim常用命令及一些小技巧
- Android常用的一些make命令(转载)--不错
- 【Android】【Other】Android一些常用命令
- 一些常用git基本命令
- linux 目录结构+常用命令+压缩命令+vim使用+及一些基础知识(非常好)
- Oracle的一些常用命令
- 一些常用Linux命令简记
- 【工具】Linux 下面的一些常用的和一些可能用到的命令
- 收集整理一些常用的MySQL命令
- MYSQL使用简述-连接MYSQL、修改密码、增加用户等方面来学习一些MYSQL的常用命令
- Centos版Linux 一些常用操作命令
- Ubuntu下开发一些常用命令
- Android中常用的一些命令
- linux webshell下信息收集和一些提权常用的命令
- kafka笔记(常用的一些命令,和安装测试!)
- 8个常用的DOS命令,以及一些常用的命令集锦
- centOS中mysql/mariaDB一些常用操作命令