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-pkg或catkin创建一个新程序包,并使用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似乎就可以是全部的值

你可能感兴趣的:(ros学习(一)从工作区搭建到消息和服务的使用)