SLAM面试笔记(5) — ROS面试

目录

1 ROS概述

2 ROS通信机制

问题:服务通信概念

问题:服务通信理论模型

问题: 参数服务器概念

问题:参数服务器理论模型

问题:参数服务器实现函数

3 ROS常用命令

4 常见面试题

问题:roslaunch和rosrun区别?

扫描二维码关注公众号,回复: 16525030 查看本文章

问题:什么是ROS?

问题:ROS中的节点是什么?

问题:ROS的消息通信机制是什么?

问题:如何创建ROS的工作空间?

问题:ROS中常用的机器人控制库有哪些?

问题:ROS中如何进行机器人导航?

问题:ROS中如何进行机器人感知?

问题:ROS中如何进行图像处理?

问题:如何调试ROS程序?

问题:如何使用ROS开发机器人控制程序?

问题:ROS中的rospy和roscpp有什么区别?


持续更新中...

1 ROS概述

2 ROS通信机制

问题:服务通信概念

服务通信也是ROS中一种极其常用的通信模式,服务通信是基于请求响应模式的,是一种应答机制。也即: 一个节点A向另一个节点B发送请求,B接收处理请求并产生响应结果返回给A。

问题:服务通信理论模型

服务通信到三个角色:ROS master(管理者)、Server(服务端)、Client(客户端)。ROS Master 负责保管 Server 和 Client 注册的信息,并匹配话题相同的 Server 与 Client ,帮助 Server 与 Client 建立连接,连接建立后,Client 发送请求信息,Server 返回响应信息。

问题: 参数服务器概念

参数服务器在ROS中主要用于实现不同节点之间的数据共享。参数服务器相当于是独立于所有节点的一个公共容器,可以将数据存储在该容器中,被不同的节点调用,当然不同的节点也可以往其中存储数据。

问题:参数服务器理论模型

参数服务器中涉及到三个角色:ROS Master (管理者)、Talker (参数设置者)、Listener (参数调用者)。ROS Master 作为一个公共容器保存参数,Talker 可以向容器中设置参数,Listener 可以获取参数。

问题:参数服务器实现函数

在 C++ 中实现参数服务器数据的增删改查,可以通过两套 API 实现:ros::NodeHandle和ros::param

(1)ros::NodeHandle

  • setParam("键",值):设置整形、浮点、字符串、bool、列表、字典等类型参数
  • param(键,默认值):存在,返回对应结果,否则返回默认值
  • getParam(键,存储结果的变量):存在,返回 true,且将值赋值给参数2,若果键不存在,那么返回值为 false,且不为参数2赋值
  • getParamCached键,存储结果的变量):提高变量获取效率,存在,返回 true,且将值赋值给参数2,若果键不存在,那么返回值为 false,且不为参数2赋值
  • getParamNames(std::vector<std::string>):获取所有的键,并存储在参数 vector 中 
  • hasParam(键):是否包含某个键,存在返回 true,否则返回 false
  • searchParam(参数1,参数2):搜索键,参数1是被搜索的键,参数2存储搜索结果的变量
  • deleteParam("键"):根据键删除参数,删除成功,返回 true,否则(参数不存在),返回 false

(2)ros::param(参数说明与(1)类似)

  • set
  • param(键,默认值)
  • get
  • getCached
  • getParamNames
  • has
  • search
  • del("键")

3 ROS常用命令

在 ROS 同提供了一些实用的命令行工具,可以用于获取不同节点的各类信息,常用的命令如下:

rosnode(操作节点)、rostopic(操作话题)、rosservice(操作服务)、rosmsg(操作msg消息) 、rossrv(操作srv消息)、rosparam(操作参数)

(1)rosnode : 操作节点

  • rosnode ping    测试到节点的连接状态
  • rosnode list    列出活动节点
  • rosnode info    打印节点信息
  • rosnode machine    列出指定设备上节点
  • rosnode kill    杀死某个节点
  • rosnode cleanup    清除不可连接的节点

(2)rostopic : 操作话题

  • rostopic bw     显示主题使用的带宽
  • rostopic delay  显示带有 header 的主题延迟
  • rostopic echo   打印消息到屏幕
  • rostopic find   根据类型查找主题
  • rostopic hz     显示主题的发布频率
  • rostopic info   显示主题相关信息
  • rostopic list   显示所有活动状态下的主题
  • rostopic pub    将数据发布到主题
  • rostopic type   打印主题类型

(3)rosservice : 操作服务

  • rosmsg show    显示消息描述
  • rosmsg info    显示消息信息
  • rosmsg list    列出所有消息
  • rosmsg md5    显示 md5 加密后的消息
  • rosmsg package    显示某个功能包下的所有消息
  • rosmsg packages    列出包含消息的功能包

(4)rosmsg : 操作msg消息

  • rosservice args 打印服务参数
  • rosservice call    使用提供的参数调用服务
  • rosservice find    按照服务类型查找服务
  • rosservice info    打印有关服务的信息
  • rosservice list    列出所有活动的服务
  • rosservice type    打印服务类型
  • rosservice uri    打印服务的 ROSRPC uri

(5)rossrv : 操作srv消息

  • rossrv show    显示服务消息详情
  • rossrv info    显示服务消息相关信息
  • rossrv list    列出所有服务信息
  • rossrv md5    显示 md5 加密后的服务消息
  • rossrv package    显示某个包下所有服务消息
  • rossrv packages    显示包含服务消息的所有包

(6)rosparam : 操作参数

  • rosparam set    设置参数
  • rosparam get    获取参数
  • rosparam load    从外部文件加载参数
  • rosparam dump    将参数写出到外部文件
  • rosparam delete    删除参数
  • rosparam list    列出所有参数

4 常见面试题

问题:roslaunch和rosrun区别?

  1. roslaunch可以启动多个节点和包,而rosrun只能启动一个节点和包。

  2. roslaunch可以在启动节点时设置参数,而rosrun不能。

  3. roslaunch可以启动多个节点之间的依赖关系和顺序,而rosrun不能。

综上所述,roslaunch比rosrun更加灵活和强大,可以更好地管理ROS节点和包之间的关系。

问题:什么是ROS?

ROS(Robot Operating System)是一个开源的机器人操作系统,可以提供常见的机器人功能,如硬件抽象、底层设备控制、常用功能实现、进程间通信、程序打包、工具箱、可视化、调试等。

问题:ROS中的节点是什么?

节点是ROS中最基本的软件单元,可以是一个实际的硬件设备、一个算法、一个控制器等。节点通过ROS的通信机制进行信息交换和数据传输。

问题:ROS的消息通信机制是什么?

ROS中的消息通信机制是基于发布/订阅模式的。节点可以发布消息到某一个话题(Topic),其他节点可以订阅这个话题并接收消息。此外,ROS还支持服务(Service)和参数(Parameter)的通信方式。

问题:如何创建ROS的工作空间?

可以通过使用catkin工具来创建ROS的工作空间。具体步骤如下:

1)创建工作空间目录:mkdir -p catkin_ws/src

2)进入src目录:cd catkin_ws/src

3)创建一个包:catkin_create_pkg my_package rospy

4)回到工作空间目录:cd ..

5)编译工作空间:catkin_make

问题:ROS中常用的机器人控制库有哪些?

ROS中常用的机器人控制库包括:MoveIt、Gazebo、RViz、ROS Control等。其中,MoveIt是用于机器人运动规划和控制的库;Gazebo是一个强大的机器人仿真器;RViz是一个3D可视化工具;ROS Control是用于机器人控制的库。

问题:ROS中如何进行机器人导航?

在ROS中,可以使用Navigation Stack来进行机器人导航。Navigation Stack包括多个子系统,如地图构建、自定位、路径规划和控制等。它可以帮助机器人在未知环境中进行自主导航。

问题:ROS中如何进行机器人感知?

在ROS中,可以使用多种传感器来进行机器人感知,如激光传感器、摄像头、深度相机等。可以使用ROS中的sensor_msgs包来处理传感器数据,并使用自定义的节点来进行数据处理和分析。

问题:ROS中如何进行图像处理?

在ROS中,可以使用OpenCV等图像处理库来进行图像处理。可以使用ROS的图像传输机制将摄像头、深度相机等设备捕获的图像数据传输到ROS节点中,并使用OpenCV等库进行图像处理和分析。

问题:如何调试ROS程序?

可以使用ROS的调试工具来调试ROS程序,如roslaunch、rosrun、rqt等。其中,roslaunch可以启动多个节点,并设置参数;rosrun可以启动单个节点;rqt可以用于可视化调试和数据分析。

问题:如何使用ROS开发机器人控制程序?

可以使用ROS的控制库和机器人模型库来开发机器人控制程序。可以使用ROS Control包来进行机器人控制,使用Gazebo进行机器人仿真,使用URDF(Unified Robot Description Format)来描述机器人模型。可以使用Python、C++等编程语言进行开发。

问题:ROS中的rospy和roscpp有什么区别?

rospy是ROS的Python客户端库,而roscpp是ROS的C++客户端库。两者的功能和使用方式类似,但是语言不同。

猜你喜欢

转载自blog.csdn.net/qq_41921826/article/details/130565629