最近在入门学习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 + 参数服务器。
services:服务是节点之间通讯的另一种方式。服务允许节点发送请求(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”的方式获得具体用法和帮助(roscd, rosls, rosed 不行),如获得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_node
roscp
//用法
$ roscp [package_name] [file_to_copy_path] [copy_path]
//示例
$ roscp rospy_tutorials AddTwoInts.srv srv/AddTwoInts.srv
rostopic
//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/pose
rosservice
rosservice list 输出可用服务的信息
rosservice call 调用带参数的服务
rosservice type 输出服务类型
rosservice find 依据类型寻找服务
//用法
$ rosservice type [service]
$ rosservice call [service] [args]
//示例
$ rosservice type clear
std_srvs/Empty
$ rosservice call clear
$ rosservice type spawn
float32 x
float32 y
float32 theta
string 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 150
roslaunch
//用法
$ roslaunch [package] [filename.launch]
//示例
$ roslaunch beginner_tutorials turtlemimic.launch
rosed
//用法
$ rosed [package_name] [filename]
//示例
$ rosed roscpp Logger.msg
//修改默认文本编辑器,需修改~/.bashrc 文件,在后面增加
export EDITOR='emacs' //单引号内为修改的目标编辑器
catkin_make
# 在catkin工作空间下
$ catkin_make [make_targets] [-DCMAKE_VARIABLES=...]