ros学习(一)从工作区搭建到消息和服务的使用

文件系统:

Packages: 软件包,是ROS应用程序代码的组织单元,每个软件包都可以包含程序库、可执行文件、脚本或者其它手动创建的东西。

Manifest (package.xml): 清单,是对于'软件包'相关信息的描述,用于定义软件包相关元信息之间的依赖关系,这些信息包括版本、维护者和许可协议等。

rospack find [包名称]  :返回软件包的位置

roscd [本地包名称[/子目录]] :直接cd到软件包的位置

pwd:查看当前工作目录

roscd只能切换到那些路径已经包含在ROS_PACKAGE_PATH环境变量中的软件包,要查看ROS_PACKAGE_PATH中包含的路径可以输入:

echo $ROS_PACKAGE_PATH


ROS_PACKAGE_PATH环境变量应该包含那些保存有ROS软件包的路径,并且每个路径之间用冒号分隔开来。


roscd log :cd到保存ros运行日志的文件夹


rosls:可以按软件包的名字来执行ls


创建ros程序包

如何使用roscreate-pkgcatkin创建一个新程序包,并使用rospack查看程序包的依赖关系?


一个程序包要想成为catkin程序包必须符合以下要求:

包含catkin compliant package.xml文件:即编译时的package.xml文件

包含一个catkin 版本的CMakeLists.txt文件

每个目录下只能有一个程序包。


开发catkin程序包的一个推荐方法是使用catkin工作空间


src下的cmakelist是catlin的  而自己的package下的cmakelist是每个包的

如何使用catkin_create_pkg命令来创建一个新的catkin程序包?

切换到之前通过主catkin工作空间中的src目录下:

cd ~/catkin_ws/src

使用catkin_create_pkg命令来创建一个名为'beginner_tutorials'的新程序包,这个程序包依赖于std_msgs、roscpp和rospy:

catkin_create_pkg beginner_tutorials std_msgs rospy roscpp

将会创建一个名为beginner_tutorials的文件夹,这个文件夹里面包含一个package.xml文件和一个CMakeLists.txt文件,这两个文件都已经自动包含了部分你在执行catkin_create_pkg命令时提供的信息。


依赖关系:

在使用catkin_create_pkg命令时提供了几个程序包作为依赖包,现在我们可以使用rospack命令工具来查看一级依赖包:

rospack depends1 beginner_tutorials

在很多情况中,一个依赖包还会有它自己的依赖包,比如,rospy还有其它依赖包。

rospack depends1 rospy


编译程序包


事先source你的环境配置(setup)文件:

source /opt/ros/kinetic/setup.bash

使用 catkin_make,在catkin工作空间下(cd catkin_ws)

catkin_make [make_targets] [-DCMAKE_VARIABLES=...] (一般直接catkin_make也行)


节点

Nodes:节点,一个节点即为一个可执行文件,它可以通过ROS与其它节点进行通信。

Messages:消息,消息是一种ROS数据类型,用于订阅或发布到一个话题。

Topics:话题,节点可以发布消息到话题,也可以订阅话题以接收消息。

Master:节点管理器,ROS名称服务 (比如帮助节点找到彼此)。

rosout: ROS中相当于stdout/stderr。

roscore: 主机+ rosout + 参数服务器 (参数服务器会在后面介绍)。


ROS客户端库允许使用不同编程语言编写的节点之间互相通信:

rospy = python 客户端库

roscpp = c++ 客户端库

roscore 是你在运行所有ROS程序前首先要运行的命令。

使用 rosnode 像运行 roscore 一样看看在运行什么...: rosnode list

rosnode info 命令返回的是关于一个特定节点的信息:rosnode info /rosout


rosrun 允许你使用包名直接运行一个包内的节点(而不需要知道这个包的路径)。

rosrun [package_name] [node_name]:

rosrun turtlesim turtlesim_node

也就是这个包里的node_name执行文件 并不是给节点取个名字,这个名字是初定好的

如果重新配置名称:

rosrun turtlesim turtlesim_node __name:=my_turtle  此处为自定义名字 以后rosnode list下这个节点就被重命名为my_turtle


话题

节点之间是通过一个ROS话题来互相通信的,turtle_teleop_key在一个话题上发布按键输入消息,而turtlesim则订阅该话题以接收该消息,使用rqt_graph来显示当前运行的节点和话题。

rosrun rqt_graph rqt_graph

直接使用rqt_graph 也可


rostopic echo可以显示在某个话题上发布的数据。 相当于再新建一个节点来订阅此话题

rostopic echo /turtle1/cmd_vel


rostopic list能够列出所有当前订阅和发布的话题。

rostopic list -v


发布器和订阅器之间必须发送和接收相同类型的消息,话题的类型是由发布在它上面的消息类型决定的。使用rostopic type命令可以查看发布在某个话题上的消息类型

rostopic type [topic]

使用rosmsg命令来查看消息的详细情况:

rosmsg show geometry_msgs/Twist(消息类型)

发布消息

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]'


其中:-1(单个破折号)这个参数选项使rostopic发布1条消息后马上退出。

-- 接下来的参数部分都不是命令选项


改为 -r 1  按1赫兹的频率持续发消息


rostopic hz


使用 rqt_plot


可以实时显示一个发布到某个话题上的数据变化图形

rosrun rqt_plot rqt_plot


服务和参数

服务(services)是节点之间通讯的另一种方式。服务允许节点发送请求(request) 并获得一个响应(response)

rosservice可以很轻松的使用 ROS 客户端/服务器框架提供的服务。rosservice提供了很多可以在topic上使用的命令,如下所示:

rosservice list 输出可用服务的信息:

   得到 例如  /clear   


使用rosservice type命令更进一步查看服务的类型

rosservice type [service]:  rosservice type clear

  得到 std_srvs/Empty

服务的类型为空(empty),这表明在调用这个服务是不需要参数

使用rosservice call命令调用服务:

rosservice call [service] [args]

 无参数调用clear   :rosservice call clear


对于带参数的服务

使用rosservice type [service]| rossrv show    来展示需要怎样的参数


rosparam   参数服务器

rosparam使得我们能够存储并操作ROS 参数服务器(Parameter Server)上的数据。参数服务器能够存储整型、浮点、布尔、字符串、字典和列表等数据类型。


看看现在参数服务器上都有哪些参数:

rosparam list


修改参数:

rosparam set [param_name] [param]


调用清除服务使其生效

rosservice call clear


获取特定参数的具体值

rosparam get [param_name]


rosparam get /        (所有值)


存储参数:   将所有的参数写入

rosparam dump params.yaml    (最后一项是文件名,必须是yaml文件)


读取:rosparam load [file_name] [namespace]   最后一项是名空间 如果用copy似乎就可以是全部的值

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,335评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,895评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,766评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,918评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,042评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,169评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,219评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,976评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,393评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,711评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,876评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,562评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,193评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,903评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,699评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,764评论 2 351