ROS官方教程知识点总结[低阶阶段]

Posted MarToony|名角

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ROS官方教程知识点总结[低阶阶段]相关的知识,希望对你有一定的参考价值。

1 安装和配置ROS环境

  1. 为了方便引用ROS的功能包,我们最好在一开始就将source /opt/ros/noetic/setup.bash添加到~/.bashrc文件中,而不是每打开一个终端后输入一次该命令。
  2. 对于使用Python3的用户,为了告知ROS您的功能包是基于python3运行的,我们需要对自己编写的功能包使用catkin_make -DPYTHON_EXECUTABLE=/usr/bin/python3编译。该命令将会配置catkin_make使用python3,而之后的构建中可以只使用catkin_make.
$ echo $ROS_PACKAGE_PATH
/home/cold/liguang/specialpacks/ws_livox_camera_calib/src:/home/cold/liguang/ws_r3live/src:/home/co中ld/liguang/specialpacks/ws_livox_driver/src:/opt/ros/noetic/share
# 需要注意的是,以上的环境变量的顺序与/.bashrc中的路径顺序正好相反。
source /opt/ros/noetic/setup.bash
source /home/cold/liguang/specialpacks/ws_livox_driver/devel/setup.bash
source /home/cold/liguang/ws_r3live/devel/setup.bash
source /home/cold/liguang/specialpacks/ws_livox_camera_calib/devel/setup.bash

2. ROS文件系统导览

rosls roscd ros
程序代码散落在众多的ROS包中,使用linux的内置工具(cd ls)进行查询和导航会比较繁琐,由此ROS提供了专门的工具rospack find [package_name].| roscd允许我们直接将当前目录切换到某个软件包中。
需要注意的是,roscd只能切换到那些路径已经包含在ROS_PACKAGE_PATH环境变量中的软件包。因此将功能包的路径添加到/.bashrc中至关重要。
如果想要查看环境变量,可以使用echo $ROS_PACKAGE_PATH.
如果想要打开当前路径的图形化界面,nautilus ./
关于环境变量,并不清楚ROS_PACKAGE_PATH定义在哪个文件中,似乎只要在bashrc中source开头的路径都会成为ROS_PACKAGE_PATH的一部分。
roscd除了可以进入一个软件包的目录中以外,还可以进入一个软件包的子目录中
roscd log 还可以进入存储ROS日志文件的目录,但是如果我们没有制定过任何ros程序,系统会告知该目录未被激活。
rosls允许我们直接使用软件包名称执行ls命令,而不用输入该软件包的绝对路径。

3. 创建ROS软件包

  1. catkin软件包的特点:包含一个catkin规范的package.xml文件,它包含了该包的元信息;包含一个catkin版本的CmakeLists.txt文件;拥有自己的一套目录(package–CmakeLists.txt package.xml),不允许嵌套。
  2. 开发catkin软件包的推荐方法是使用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

补充:创建调用其他功能包launch文件的功能包

白话是,创建一个功能包,并注册到环境变量中,核心文件只有其他多个功能包的launch文件。从该功能上看,被创建的功能包属于集成型、应用型功能包。
参考指导教程:ROS系统 launch启动文件的使用方法
具体的创建过程:

  1. 首先创建工作空间和src子文件夹,得到如此目录:工作空间名称_ws/src
  2. 工作空间名称_ws/src文件夹下创建集成型功能包:catkin_create_pkg 功能包名称,并在该功能包目录下创建launch文件夹mkdir launch
  3. catkin_create_pkg 功能包名称/launch创建launch文件。(launch文件也可以在编译工作空间后再创建也可以。)
  4. cd回到工作空间名称_ws目录下,执行编译catkin_make -DPYTHON_EXECUTABLE=/usr/bin/python3
  5. 执行命令sudo gedit ~/.bashrc,输入该工作空间的setup.sh文件的路径。保存关闭文件,执行source ~/.bashrc更新终端环境变量。

创建的文件名名称:echo type;publish frequency;不同内参和外参配置;reconstruct_mesh的config文件的参数。

4 构建BuildROS包

  1. catkin_make结合了对cmake和make的调用。具体地:
$ mkdir build
$ cd build
$ cmake ..
$ make
$ make install  # (optionally)

上述命令将构建在src文件夹中找到的任何 catkin 项目.
注意功能包是由catkin_create_make命令创建的。

5 理解ROS节点

  1. 图概念快速浏览
    Node:节点是使用 ROS 与其他节点通信的可执行文件。
    Messages:订阅或发布主题时使用的 ROS 数据类型。
    Topic:节点可以向主题发布消息,也可以订阅主题以接收消息。
    Master:ROS的名称服务(即帮助节点找到彼此)
    rosout : ROS 等价于 stdout/stderr
    roscore : Master + rosout + 参数服务器(参数服务器后面会介绍)
  2. 节点:一个节点实际上只不过是 ROS 包中的一个可执行文件。ROS 节点使用 ROS 客户端库与其他节点通信
  3. 客户端Client Libraries:可以使用python和c++进行编写。
  4. 使用ROS的步骤:
    ① 开启roscore。
    ② 使用rosnode节点。rosnode list 会显示当前运行的ros节点的信息。其中的/rosout节点用以收集和记录节点的调试输出,它总在运行。
    ③ rosnode info (/rosout)。会返回有关特定节点的信息。
    ④ 使用rosrun [package_name] [node_name],允许我们使用包名直接运行包内的节点(无需知道包的路径)。
    rosrun turtlesim turtlesim_node __name:=my_turtle,ROS允许从命令行以参数的形式使用重映射参数来更改节点的名称。
    ⑥ 为了测试是否能够向已开启的节点交流信息,可以尝试ping该节点,测试是否启动。

6 理解ROS话题

  1. 查看ROS系统中节点的动态图。rosrun rqt_graph rqt_graph

  2. rostopic的子命令。
    rostopic bw 显示主题使用的带宽
    rostopic echo 将消息打印到屏幕(示在某个主题上发布的消息数据
    rostopic hz 显示主题的发布率
    rostopic list 打印有关活动主题的信息
    rostopic pub 将数据发布到主题
    rostopic type 打印主题类型

  3. 如果执行rostopic echo [话题名称],则整个ROS系统会增加一个订阅者节点

  4. 执行rostopic list -h显示帮助信息;执行rostopic list -v显示要发布和订阅的主题以及该主题的消息类型的详细列表。

  5. rostopic type [话题名称]返回话题的消息的类型。

  6. rostopic pub [话题] [消息类型] [参数值]

7 理解ROS服务和参数

服务作为一种节点和其他节点进行交流的另外一种方式。服务允许节点发送请求以及接受一个相应。

  1. rosservice命令的使用:
    rosservice list print information about active services(ROS的服务端的服务列表)
    rosservice call call the service with the provided args (调用ROS系统中出现的服务)
    rosservice type print service type (打印服务的类型)
    rosservice find find services by service type (根据服务类型寻找相关的服务)
    rosservice uri print service ROSRPC uri
    rossrv命令:显示ros服务类型消息信息的相关命令
    服务的内容似乎没办法查看似的

  2. rosparam允许我们存储和操作ROS参数服务器中的数据。相关的使用命令:
    rosparam set set parameter
    rosparam get get parameter
    rosparam load load parameters from file
    rosparam dump dump parameters to file
    rosparam delete delete parameter
    rosparam list list parameter names

  3. rosparam get /允许我们查看当前ROS服务器中所有参数及其参数值。

  4. rostopic list查看ROS系统中所有的话题

  5. rostopic list -v查看ROS系统中所有的话题以及每个话题对应的消息的类型。

  6. rosmsg show [消息名称]查看该消息的所有属性。

(base) cold@cold-OMEN-by-HP-Laptop-15-dc1xxx:~$ rosmsg show turtlesim/Pose
float32 x
float32 y
float32 theta
float32 linear_velocity
float32 angular_velocity
  1. rosparam可以将当下ros系统的参数dump在yaml文件或者load指定的yaml文件。
    rosparam load [file_name] [namespace] 实例:rosparam load params.yaml copy_turtle
  2. rosparam get /namespace/参数名称查看namespace下存储的yaml文件中参数的参数值

8 使用rqt_console和roslaunch命令

  1. 创建成功的工作空间下的功能包下,存储launch文件的文件夹不一定必须命名为launch。roslaunch会自行在安装包目录下寻找可用的launch文件。
  2. 不清楚为什么给第一只乌龟发送消息,两只乌龟都会发生运动

9 使用rosed编辑ROS中的文件

  1. rosed [package_name] [filename]调用vim编辑文件。
  2. 在~/.bashrc文件中添加export EDITOR='gedit -w'可以切换rosed的编辑应用。

10 msg和srv的介绍

  1. msg文件描述了ROS消息的属性;srv描述服务,包括两个部分:请求和响应。
  2. msg文件存储在功能包下的msg文件夹中,srv文件存储在srv文件夹中。
  3. msg文件中包含属性的名字和属性的类型。
int8, int16, int32, int64 (plus uint*)
float32, float64
string
time, duration
other msg files
variable-length array[] and fixed-length array[C]

There is also a special type in ROS: Header, the header contains a timestamp and coordinate frame information that are commonly used in ROS. You will frequently see the first line in a msg file have Header header.(ROS中还有一种特殊的类型:Header,Header中包含了ROS中常用的时间戳和坐标系信息。 您会经常看到 msg 文件的第一行有 Header 标头。)

17 录制及播放bag数据

  1. rosbag record -a a 表示所有发布的话题被录制在bag文件中。
  2. rosbag play -r 2 <your bagfile>表示以二倍速进行播放。
  3. rosbag录制/播放的局限性:您可能已经注意到海龟的路径可能没有精确地映射到原始键盘输入 - 粗略的形状应该是相同的,但海龟可能没有精确地跟踪相同的路径。原因是turtlesim 跟踪的路径对系统中时间的微小变化非常敏感,而rosbag 无法准确复制正在运行的系统在rosbag 记录和处理消息时的行为的能力。记录,以及使用 rosbag play 时产生和处理消息的时间。对于像turtlesim这样的节点,在处理命令消息时的微小时间变化会微妙地改变行为,用户不应该期望完全模仿行为。

18 读取bag文件中的message信息

  1. rosbag record --duration=30表示自行录制一段时长为设置长度的bag文件。

以上是关于ROS官方教程知识点总结[低阶阶段]的主要内容,如果未能解决你的问题,请参考以下文章

ROS官方教程知识点总结[低阶阶段]

ROS知识(17)----Actionlib使用的例子

相机的内参外参标定

ROS初级教程1---官方ROS文件系统导览

ROS初级教程1---官方ROS文件系统导览

ROS探索总结——ROS新手教程