ROS初步(你应该要知道的基础知识)

ROS

1. 文件系统

  • **软件包(Packages):**包是ROS代码的软件组织单元,每个软件包都可以包含程序库、可执行文件、脚本或其他构件。

  • Manifests (package.xml): 清单(Manifest)是对软件包的描述。它用于定义软件包之间的依赖关系,并记录有关软件包的元信息,如版本、维护者、许可证等。

    $ rospack find [package_name]
    $ roscd [locationname[/subdir]]
    $ pwd  //输出工作目录
    $ roscd log  //进入存储ROS日志文件的目录
    $ rosls [locationname[/subdir]]  //直接执行ls命令
    <<<按TAB键>>>  //补全
    

2. ROS程序包

2.1 概述

一个catkin包(软件包、功能包

  • 这个包必须有一个符合catkin规范的package.xml文件
    • 这个package.xml文件提供有关该软件包的元信息
  • 这个包必须有一个catkin版本的CMakeLists.txt文件,编译相关信息
    • 如果它是个Catkin元包的话,则需要有一个CMakeList.txt文件的相关样板
  • 每个包必须有自己的目录
    • 这意味着在同一个目录下不能有嵌套的或者多个软件包存在

2.2 开发:使用catkin工作空间

workspace_folder/        -- WORKSPACE
  src/                   -- SOURCE SPACE
    CMakeLists.txt       -- 'Toplevel' CMake file, provided by catkin
    package_1/
      CMakeLists.txt     -- CMakeLists.txt file for package_1
      package.xml        -- Package manifest for package_1
    ...
    package_n/
      CMakeLists.txt     -- CMakeLists.txt file for package_n
      package.xml        -- Package manifest for package_n

创建工作空间在创建功能包,一定要注意环境变量的生效

$ rospack depends1 beginner_tutorials  //查看依赖包
$ roscd beginner_tutorials
$ cat package.xml  //将文件在屏幕上显示

2.3 自定义软件包

2.3.1 自定义package.xml
  • description标签
  • maintainer标签
  • licenese标签:BSD MIT GPLv2 GPLv3 LGPLv2 LGPLv3
  • 依赖项标签

除了catkin中默认提供的buildtool_depend,所有我们列出的依赖包都已经被添加到build_depend标签中。在编译和运行时都需要用到所有指定的依赖包,要将每一个依赖包分别添加到run_depend标签中

  12   <buildtool_depend>catkin</buildtool_depend>
  13 
  14   <build_depend>roscpp</build_depend>
  15   <build_depend>rospy</build_depend>
  16   <build_depend>std_msgs</build_depend>
  17 
  18   <exec_depend>roscpp</exec_depend>
  19   <exec_depend>rospy</exec_depend>
  20   <exec_depend>std_msgs</exec_depend>
2.3.2 自定义CMakeLists.txt

2.4 编译软件包

$ source /opt/ros/<distro>/setup.bash  //各种环境生效
$ mkdir build                          //cmake工作流程
$ cd build
$ cmake ..
$ make
$ make install  # (可选

使用catkin_make工具:在标准CMake工作流程中依次调用了cmakemake

# 在catkin工作空间下
$ catkin_make --source my_src
$ catkin_make install --source my_src  # (可选)

catkin_make首先输出它所使用到的每个空间所在的路径

build 目录是构建空间的默认位置,同时cmakemake也是在这里被调用来配置和构建你的软件包。而devel目录是开发空间的默认位置, 在安装软件包之前,这里可以存放可执行文件和库。

3. ROS节点

计算图(Computation Graph)是一个由ROS进程组成的点对点网络,它们能够共同处理数据。ROS的基本计算图概念有节点(Nodes)、主节点(Master)、参数服务器(Parameter Server)、消息(Messages)、服务(Services)、话题(Topics)和袋(Bags),它们都以不同的方式向图(Graph)提供数据

  • 节点(Nodes):节点是一个可执行文件,它可以通过ROS来与其他节点进行通信。

  • 消息(Messages):订阅或发布话题时所使用的ROS数据类型。

  • 话题(Topics):节点可以将消息发布到话题,或通过订阅话题来接收消息。

  • 主节点(Master)节点管理器,ROS的命名服务,例如帮助节点发现彼此。

  • rosout:在ROS中相当于stdout/stderr(标准输出/标准错误)

  • roscore:主节点 + rosout + [参数服务器](https://wiki.ros.org/Parameter Server)(会在以后介绍)

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

  • 客户端库

    • rospy = Python客户端库
    • roscpp = C++客户端库
  • rosnode:rosnode显示当前正在运行的ROS节点信息。rosnode list命令会列出这些活动的节点

  • rosrun:直接运行包内的节点

  • ROS有一个强大的功能,就是你可以通过命令行重新分配名称

4.ROS话题

4.1 ros topic

使用rqt_graph来显示当前运行的节点和话题,rqt_graph用动态的图显示了系统中正在发生的事情

$ sudo apt-get install ros-<distro>-rqt
$ sudo apt-get install ros-<distro>-rqt-common-plugins
$ rosrun rqt_graph rqt_graph        //下载完之后开新终端

rostopic命令工具能让你获取ROS话题的信息

$ rostopic -h
Commands:
        rostopic bw     display bandwidth used by topic
        rostopic delay  display delay of topic from timestamp in header
        rostopic echo   print messages to screen
        rostopic find   find topics by type
        rostopic hz     display publishing rate of topic    
        rostopic info   print information about active topic
        rostopic list   list active topics
        rostopic pub    publish data to topic
        rostopic type   print topic or field type
        
$ rostopic list -v         //在rostopic list中使用verbose选项:

4.2 ros message

使发布者(turtle_teleop_key)和订阅者(turtulesim_node)进行通信,发布者和订阅者必须发送和接收相同类型的消息,话题的类型是由发布在它上面消息的类型决定

rostopic type [topic]        //rostopic type命令用来查看所发布话题的消息类型
$ rostopic type /turtle1/cmd_vel
geometry_msgs/Twist
$ rosmsg show geometry_msgs/Twist  //rosmsg查看消息的详细信息
geometry_msgs/Vector3 linear
  float64 x
  float64 y
  float64 z
geometry_msgs/Vector3 angular
  float64 x
  float64 y
  float64 z
rostopic pub    //可以把数据发布到当前某个正在广播的话题上
$ rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, -1.8]'            //以1 Hz的速度发布velocity指令到velocity话题上

rostopic hz [topic]  //报告数据发布的速率
$ rosrun rqt_plot rqt_plot      //绘制正被发布到话题上的数据,用来调试  

5. ROS服务和参数

5.1 rosservice

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

 list         输出活跃服务的信息
rosservice call         用给定的参数调用服务
rosservice type         输出服务的类型
rosservice find         按服务的类型查找服务
rosservice uri          输出服务的ROSRPC uri

5.2 rosparam

rosparam能让我们在ROS[参数服务器(Parameter Server)](https://wiki.ros.org/Parameter Server)上存储和操作数据。参数服务器能够存储整型(integer)、浮点(float)、布尔(boolean)、字典(dictionaries)和列表(list)等数据类型。rosparam使用YAML标记语言的语法。一般而言,YAML的表述很自然:1是整型,1.0是浮点型,one是字符串,true是布尔型,[1, 2, 3]是整型组成的列表,{a: b, c: d}是字典。rosparam有很多命令可以用来操作参数,如下所示:

rosparam set            设置参数
rosparam get            获取参数
rosparam get /             //来显示参数服务器上的所有内容:
rosparam load           从文件中加载参数
rosparam dump           向文件中转储参数
rosparam delete         删除参数
rosparam list           列出参数名
rosparam dump [file_name] [namespace]  ///我们将所有的参数写入params.yaml文件
rosparam load [file_name] [namespace]  //yaml文件重载入新的命名空间
  • 29
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值