ROS学习笔记(一)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ferriswym/article/details/58587439

最近在入门学习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 + 参数服务器。

    扫描二维码关注公众号,回复: 3202747 查看本文章
  • services:服务是节点之间通讯的另一种方式。服务允许节点发送请求(request) 并获得一个响应(response)。有点类似代码中的函数。

  • msg:msg文件就是一个描述ROS中所使用消息类型的简单文本。它们会被用来生成不同语言的源代码。

  • srv:一个srv文件描述一项服务。它包含两个部分:请求和响应。

主要理解NodesTopicsMessages之间的关系。


图中蓝色和绿色的是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=...]

猜你喜欢

转载自blog.csdn.net/ferriswym/article/details/58587439