ROS机器人程序设计 | 期末知识点大总结

  1. 工作空间的框架是怎么样的?有几个文件夹?

一个包含功能包、可编辑源文件或编译包的文件夹。
同时编译不同的功能包时非常有用,并且可以用来保存本地开发包。



  1. 编译命令是什么?
    用catkin编译功能包
 $ cmake package/       #使用标准Cmake工作流程,一次编译一个包
  $ make

  $ cd workspace          # 编译工作空间内的所有包
  $ catkin_make
  1. Source是干什么?为什么要source?
    用来刷新工作环境;
    如果不刷新,系统可能无法识别编译后(如Catkin_make之后)的工作环境(里面的新文件);

  2. 什么是功能包?
    功能包是ROS软件中的基本单元,包含ROS节点、库、配置文件。


    一个功能包文件结构

这些文件夹的主要功能如下:
config:放置功能包中的配置文件,由用户创建,文件名可以不同。
include:放置功能包中需要用到的文件。
scripts:放置可以直接运行的Python脚本。
src:程序源文件。
launch:放置功能包自定义的消息类型。
msg:放置功能包自定义的服务类型。
srv:放置功能包的定义的服务类型。
action:放置功能包自定义的动作指令。
CMakeLists.txt:Cmake的生成文件,编译器编译功能包的规则。
package.xml:功能包清单。

  1. 功能包里至少会包含什么文件?


    新建一个工作空间

    新建一个功能包

(刚刚新建的功能包,包含以下几个东西)
一个include文件夹——里面包含着一个与包名同名的空文件夹;
一个空src文件夹
一个CMakeLists.txt文件
一个package.xml文件


  1. build目录下是保存什么的?
    编译空间(build文件夹):CMake和catkin为功能包和项目保存缓存信息、配置和其他中间文件

  2. devel目录下是保存什么的?
    开发空间(devel文件夹):保存编译后的程序(无需安装就能用来测试的程序)

  3. ros操作系统的通讯方式有几种?分别是什么?
    ros操作系统的通讯方式有三种

话题通讯机制

服务通讯机制

参数通讯机制

拓展:
自定义通信格式有三种:

  • 消息( msg)
  • 服务(srv)
  • 动作(action)


  1. 解释一下launch的作用?
    作用:运行启动文件
    在ROS中一个节点程序一般只能完成功能单一的任务,但是一个完整的ROS机器人一般由很多个节点程序同 时运行、相互协作才能完成复杂的任务,因此这就要求在启动机器人时就必须要启动很多个节点程序,一般的
    ROS机器人由十几个节点程序组成,复杂的几十个都有可能。
    这就要求我们必须高效率的启动很多节点,而不是通过rosrun命令来依次启动十几个节点程序,launch文件 就是为解决这个需求而生,launch文件就是一个xml格式的脚本文件,我们把需要启动的节点都写进launch文件 中,这样我们就可以通过roslaunch工具来调用launch文件,执行这个脚本文件就一次性启动所有的节点程序。

  2. 简述topic

  • 主题是节点间用来传输数据的总线。
  • 通过主题进行消息路由不需要节点之间直接连接——发布者和订阅者之间不需要知道彼此是否存在。
  • 一个主题可以有多个订阅者,也可以有多个发布者。
  • ROS的主题可以使用TCP/IP和UDP传输:TCPROS(默认),UDPROS(低延迟高效率,数据丢失,远程操作)



话题通讯机制

  1. 简述service
  • 发布/订阅模型是一种灵活的通讯机制,但是其多对多、单向传输的方式不适合于分布式系统通常要求的请求/应答交互方式。
  • 请求/应答通过服务实现。服务由一对消息定义:一个用于请求,一个用于应答。
  • 一个节点提供服务名称,客户通过发送请求消息并等待应答来使用服务。


服务通讯机制

  1. 简述action
    在ros中,如果想要发送一个request给一个节点该节点完成一些任务,并且给出一个回复,这样可以使用ros中的service完成。但是有一些应用中任务执行的时间很长,用户需要查看执行的进度如何,以及或者取消该任务,ros中提供了一个actionlib package来建立服务,执行一个长时间运行的可抢占目标。
    可以道是“升级版的service”,算是对service在某些情况下能力不足的一种补充。

    在一个复杂的ROS系统中我们会需要各种各有的服务要求,向某个节点发送请求执行某一个任务, 并返回相应的执行结果,这种用ROS的服务(services)完成。然而有一些情况服务执行的时间很长, 在执行中想要获得任务处理的进度,或可能取消执行任务,actionlib就能实现这样的功能,它是ROS的一个非常重要的库,算是对service在某些情况下能力不足的一种补充。
    在前面介绍过服务,因为它在执行的过程中是阻塞的,会阻止程序进一步执行,必须等待服务器 返回结果才会继续执行后面的程序,对于一些计算量较轻的任务使用服务是可以满足的。但是对于一 些伏在的任务,例如让机器人从房间的某一点A运动到指定的地点B,在此运动过程中需要花费的时间 未定,任务时间较长而且中途会遇到各种情况,例如机器人电量不足时,这就需要取消或暂停当前任 务等待机器人充满电再继续该任务。
  1. 什么是节点?如何启动一个节点?
    节点(Nodes)
  • 节点是执行计算的进程。
  • 一个机器人控制系统通常包括很多节点:节点1控制一个激光测距仪,节点2控制电机,节点3进行定位,节点4进行路径规划,节点5提供系统的图形视图(每个节点应具有特定的单一功能、且名称唯一)。
  • 节点使用roscpp和rospy等ROS客户端库进行编写。


rosrun单个启动;
roslaunch批量启动;

  1. 什么是节点管理器?
    节点管理器(Master)
  • 用于节点的注册和查找。
  • 没有节点管理器,节点之间无法发现对方、交换消息或者调用服务。
  • ROS是一个分布式网络系统,可以在一台计算机上运行节点管理器,在该管理器或其他计算机上运行节点。
  1. 简述话题与服务的区别?(8点)


  2. 新建一个功能包的命令是什么?

catkin_create_pkg [package_name] [depend1] [depend2] [depend3]
  1. rqt_console工具的功能是什么?
    ROS提供了一系列的基于QT的可视化图形调试工具,能够帮助我们快速开发机器人。

rqt_console属于ROS日志框架(logging framework)的一部分,用来显示节点的输出信息。

rqt_logger_level允许我们修改节点运行时输出信息的日志等级(logger levels)(包括 DEBUG、WARN、INFO和ERROR)。



  1. 什么是节点重生属性?
    节点重生属性(respawn)
    当roslaunch开启所有nodes后,roslaunch会监视每个node,记录那些仍然活动的nodes。对于每个node,当其终止后,我们可以要求roslaunch重启该node,通过使用respawn属性。
  1. 什么是节点必要属性?
    当一个节点被声明为必要节点即 required="true"终止的时候,roslaunch 会终止所有其他活跃节点并退出。比如 在依赖激光雷达的机器人导航中,若激光雷达节点意外退出时,roslaunch将会终止其他节点然后退出。
  1. 从控制的角度简述一下机器人的组成?


  2. 简述一下传感系统的组成,及常用的设备


  3. 什么是URDF?由哪几部分标签组成?
    URDF是机器人模型描述文件;



    urdf描述机器人模型问题所在?
    模型冗长,重复多;
    修改参数麻烦,不便于二次开发;
    没有参数计算功能;
    ……….

  4. 什么是xacro模型文件?相比URDF有什么优势?

URDF是机器人模型描述文件;
xacro模型文件是urdf模型的进化版本;
优势:
精简模型代码
  创建宏定义;
  文件包含;
提供可编程接口
   常量;
   变量;
   条件语句;
   数学计算。

  1. 什么是tf?为什么要有tf?
    坐标转换(TransForm:位置和姿态)
    坐标变换是空间实体的位置描述,是从一种坐标系统变换到另一种坐标系统的过程。通过建立两个坐标系统之间一一对应关系来实现。

    为什么要有tf:
    (个人课堂总结笔记)一个机器人项目一般都是会有许许多多个组件和关节、部位等等,那么整个机器人诸多部件之间是不可能只有一个坐标系的,事实上它们每一个组件每一个部位都有它们自己的坐标系,所以当我们要描述一个坐标系中的物体处在另外一个坐标系的状态是什么样的时候,这时候参数间的转化就需要tf了。

(机器人系统通常具有许多随时间变化的3D坐标系,例如世界坐标系,车体坐标系,手抓坐标系,头部坐标系等。随着时间的推移如何跟踪这些坐标系的变化,提出以下几个问题:
5秒前,头部坐标系相对于世界坐标系在哪里?
机器人手抓中的物体相对于机器人本体基座的姿态是什么?
地图坐标系中机器人的基座当前的姿态是什么?)

tf是一个用户随时间跟踪多个坐标系的包,机器人不同部位和世界的坐标系以 tree structure 的形式存储起来,tf管理一系列的树状结构坐标系之间的关系。允许用户在各个坐标系中进行点、向量的变换。通俗的说tf可以帮助我们实时的在各个坐标系中进行坐标转换。

  1. 什么是slam?
    SLAM (simultaneous localization and mapping),也称为CML (Concurrent Mapping and Localization), 即时定位与地图构建,或并发建图与定位。
    问题可以描述为:将一个机器人放入未知环境中的未知位置,是否有办法让机器人一边逐步描绘出此环境完全的地图,所谓完全的地图(a consistent map)是指不受障碍行进到房间可进入的每个角落。
    slam解决的问题是:“我在哪里,我所处的环境是什么样子?”

  2. 在ros里实现slam,对于机器人的硬件要求有什么?为什么?


  3. Twist速度控制指令包括哪几个方面?


  1. gmapping 算法功能包的输入信息包含什么?


  2. gmapping 输出的是什么?




  1. gmapping 订阅了什么话题?


  2. 简述一下gmapping 算法中的TF变换。


  3. Move_base功能包里由ros提供的部分的核心是什么?(unsure)




  1. acml是什么意思?实现原理是什么?


  2. Move_base的配置文件有几个?(强化弥补33)

    1)

    2)base_local_planner_params.yaml

    该配置文件里面配置了局部路径规划相关的配置。
    3)costmap_common_params.yaml
    该配置文件里面配置了代价地图共用的参数。
    4)global_costmap_params.yaml
    该配置文件里面配置了全局代价地图相关参数。
    5)local_costmap_params.yaml
    该配置文件里面配置了局部代价地图共用的参数。

35.什么是全局代价地图?什么是局部代价地图?
全局代价地图用于全局路径规划,局部代价地图用于本地路径规划和实时避障。


  1. 简述一下PR2机器人


  2. 简述一下什么是tf树
    机器人不同部位和世界的坐标系以 tree structure 的形式存储起来,tf管理一系列的树状结构坐标系之间的关系。

  3. 查看功能包路径的命令是什么?

rospack find [package_name]
  1. CMakeLists.txt的作用是什么?
    CMakeLists.txt:Cmake的生成文件,编译器编译功能包的规则。

40.package.xml的作用是什么?
package.xml:功能包清单。定义有关包的属性,例如包名称,版本号,作者,维护者以及其他catkin包的依赖关系。

  1. 功能包目录跳转命令是什么?
roscd
  1. 什么是gazebo?
    Gazebo是一个自主机器人3D仿真环境。 它可以与ROS配套用于完整的机器人仿真,也可以单独使用。能够进行动力学仿真等,模拟机器人以及机器人所处的复杂的物理环境。

  2. 什么是rviz?
    rviz是ros的一个可视化工具,用于可视化传感器的数据和状态信息。rviz支持丰富的数据类型,通过加载不同的Dispalys类型来可视化,每一个Dispaly都有一个独特的名字。

  3. gazebo和rviz的区别是什么?
    gazebo侧重于机器人模型的物理特性以及动力学仿真等和物理环境的模拟,rviz则侧重于传感器的数据和状态信息的可视化,并没有像gazebo那样模拟出形象的物理环境。


    gazebo和rviz的区别