最近在入门学习ROS系统,基于Jade,总结一下基本的概念以及常用操作,主要参考 http://wiki.ros.org
catkin:ROS的官方编译系统,继承自原生的ROS编译系统rosbuild。
catkin workspace:用户可以对catkin程序包进行修改/编译/安装操作的一个文件夹,在软件开发流程中,catkin工作空间包括源码空间(src space)、编译空间(build space)、发展空间(devel space)、安装空间(install space)、结果空间(result space)等子空间。
Packages: 软件包,是ROS应用程序代码的组织单元,每个软件包都可以包含程序库、可执行文件、脚本或者其它手动创建的东西。
Manifest(package.xml): 清单,是对于’软件包’相关信息的描述,用于定义软件包相关元信息之间的依赖关系,这些信息包括版本、维护者和许可协议等。一个程序包必须包含此文件。
Nodes:节点,一个节点即为一个可执行文件,它可以通过ROS与其它节点进行通信。
Messages:消息,消息是一种ROS数据类型,用于订阅或发布到一个话题。
Topics:话题,节点可以发布消息到话题,也可以订阅话题以接收消息。
Master:节点管理器,ROS名称服务 (比如帮助节点找到彼此)。
rosout:ROS中相当于stdout/stderr。
roscore:主机+ rosout + 参数服务器。
sevices:服务是节点之间通讯的另一种方式。服务允许节点发送请求(request) 并获得一个响应(response)。有点类似代码中的函数。
msg:msg文件就是一个描述ROS中所使用消息类型的简单文本。它们会被用来生成不同语言的源代码。
srv:一个srv文件描述一项服务。它包含两个部分:请求和响应。
主要理解Nodes、Topics、Messages之间的关系。
图中蓝色和绿色的是Nodes,红色的是Topics。Nodes是可执行程序,Topics用于Nodes间通信,Messages是话题中的数据类型。
rospack = ros+pack(age) : 获得ROS程序包的相关信息
roscd = ros+cd : 打开一个ROS程序包或堆所在的目录
rosls = ros+ls : 列出一个ROS程序包的所有文件
roscp = ros+cp : 从ROS程序包中拷贝文件,或拷贝文件到ROS程序包
rostopic = ros+topic : 获得ROS话题的相关信息
rosmsg = ros+msg : 获得ROS消息的相关信息
rossrv = ros+srv : 获得ROS服务的相关信息
rosmake = ros+make : 编译一个ROS程序包
roscore = ros+core : 运行所有ROS程序前首先要运行的命令
rosnode = ros+node : ROS用于得到一个节点的信息
rosrun = ros+run : 从指定程序包运行一个节点
rosservice = ros+service : 使用ROS客户端/服务器框架提供的服务
rosparam = ros+param : 存储并操作ROS参数服务器上的数据
roslaunch = ros+launch : 启动定义在launch文件的多个节点
rosed = ros+ed : 直接通过package名来获取到待编辑的文件而无需指定该文件的存储路径
所有命令均可以用“命令 -h”的方式获得具体用法和帮助,如获得rospack的用法:
$ rospack -h得到
USAGE: rospack <command> [options] [package] Allowed commands: help cflags-only-I [--deps-only] [package] cflags-only-other [--deps-only] [package] depends [package] (alias: deps) depends-indent [package] (alias: deps-indent) depends-manifests [package] (alias: deps-manifests) depends-msgsrv [package] (alias: deps-msgsrv) depends-on [package] depends-on1 [package] depends-why --target=<target> [package] (alias: deps-why) depends1 [package] (alias: deps1) export [--deps-only] --lang=<lang> --attrib=<attrib> [package] find [package] langs libs-only-L [--deps-only] [package] libs-only-l [--deps-only] [package] libs-only-other [--deps-only] [package] list list-duplicates list-names plugins --attrib=<attrib> [--top=<toppkg>] [package] PRofile [--length=<length>] [--zombie-only] rosdep [package] (alias: rosdeps) rosdep0 [package] (alias: rosdeps0) vcs [package] vcs0 [package] Extra options: -q Quiets error reports. If [package] is omitted, the current working directory is used (if it contains a package.xml or manifest.xml).下面举出几种常用的命令和示例
rosrun
//用法$ rosrun [package_name] [node_name]//示例$ rosrun turtlesim turtlesim_noderoscp
//用法$ roscp [package_name] [file_to_copy_path] [copy_path]//示例$ roscp rospy_tutorials AddTwoInts.srv srv/AddTwoInts.srvrostopic
//rostopic echo用法:显示在话题上发布的数据$ rostopic echo [topic]//示例$ rostopic echo /turtle1/cmd_vel//rostopic type用法:显示所发布话题的消息类型$ rostopic type [topic]//示例$ rostopic type /turtle1/cmd_vel//rostopic pub用法:把数据发布到某个正在广播的话题上$ rostopic pub [topic] [msg_type] [args]//示例$ rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'//rostopic hz用法:查看数据发布的频率$ rostopic hz [topic]//示例$ rostopic hz /turtle1/poserosservice
rosservice list 输出可用服务的信息rosservice call 调用带参数的服务rosservice type 输出服务类型rosservice find 依据类型寻找服务//用法$ rosservice type [service]$ rosservice call [service] [args]//示例$ rosservice type clearstd_srvs/Empty$ rosservice call clear$ rosservice type spawnfloat32 xfloat32 yfloat32 thetastring name$ rosservice call spawn 2 2 0.2 ""rosparam
rosparam set 设置参数rosparam get 获取参数rosparam load 从文件读取参数rosparam dump 向文件中写入参数rosparam delete 删除参数rosparam list 列出参数名//用法$ rosparam set [param_name]$ rosparam get [param_name]//示例$ rosparam set background_r 150roslaunch
//用法$ roslaunch [package] [filename.launch]//示例$ roslaunch beginner_tutorials turtlemimic.launchrosed
//用法$ rosed [package_name] [filename]//示例$ rosed roscpp Logger.msg//修改默认文本编辑器,需修改~/.bashrc 文件,在后面增加export EDITOR='emacs' //单引号内为修改的目标编辑器catkin_make
# 在catkin工作空间下$ catkin_make [make_targets] [-DCMAKE_VARIABLES=...]新闻热点
疑难解答