ROS-3DSLAM(1):综述

2021@SDUSC

ROS-3DSLAM(1):综述

2021年9月27日星期一——2021年9月29日星期三

一、项目简介:

Robot operating System (ROS),通常被称为机器人操作系统,是一种弱耦合的分布式进程框架,通过进程间的消息传递和管理来实现硬件抽象和设备控制。

我们的任务是对于这一系统的源代码进行分析。

二、基本知识储备:

一、概念初识(基于乌龟例子的学习)

  • ROS文件系统

  • 创建软件包:catkin和rosmake两种方式

  • 软件包的编译

  • 节点:节点、消息、话题、主节点、roscore、rosout

  • 话题:发布和订阅、消息、查看rosmsg

  • 服务和参数:请求和响应、查看rosservice、rosparam

  • rqt_console和roslaunch

二 进一步的学习

  • 使用rosed来编辑

  • 消息和服务

  • 简单的发布者和订阅者(python版本)

  • 简单的服务和客户端(python版本)

  • 编写后测试与检验

三、确定关键代码:

我负责的部分是通信和摄像头相关的包:

2、12、14、15、16、17

2-ros_comm-noetic-devel(本文代码中最重要的一个包)

ROS通信相关包,包括核心客户端库(roscpp, rospy)和图形自检工具(rostopic, rosnode, rosservice, rosparam)。

  1. clients:clients目录下有两个,分别是python实现和cpp实现:

1. roscpp:roscpp是最广泛使用的ROS客户端库,被设计为是高性能的ROS库。

2. rospy:rospy是一个纯Python的ROS客户端库。rospy客户端API使Python程序员能够快速地与ROS进行接 口, rospy的设计有利于测试需要快速实现(如开发时)的运行时性能,以便算法可以快速在ROS中进行原型测 试。它也是理想的非关键路径代码,例如配置和初始化代码。许多ROS工具都是用rospy编写的类型自省能力 的优势。许多ROS工具都建立在rospy之上。

  1. tools:(只介绍上文中的四个包)

    1. rostopic:Rostopic包含Rostopic命令行工具,用于显示关于ROS,包括发布者、订阅者、发布速率和ROS。它还包含一个实验性的Python库,用于获取关于主题的信息并与主题动态交互。这个库只供内部使用,因为代码API可能会改变,尽管它提供了如何在ROS中实现动态订阅和发布行为的示例

    2. rsnode:Rosnode是一个用于显示调试信息的命令行工具关于ROS包括发布、订阅和连接。它还包含用于检索节点的实验库信息。此库仅供内部使用。

    3. rosservice:Rosservice包含用于列表的Rosservice命令行工具和查询ROS服务。它还包含一个Python库,用于检索关于服务和动态调用它们。Python库是实验性的,仅供内部使用。

  2. rosparam:rosparam包含用于rosparam命令行工具来获取和设置参数服务器使用yaml编码的文件。它还包含实验库使用YAML的参数服务器。此库仅供内部使用。rosparam可以在roslaunch文件中调用。

    tool文件夹下的其他包。

12-rosserial-noetic-devel

ROS串口通信的实现,以及一些给arduino之类的小板子提供的ROS通信库。

rosserial是一种协议,用于在字符设备(如串行端口或网络套接字)上包装标准的ROS串行消息并多路复用多个主题和服务。

  1. 客户端库允许用户轻松地启动ROS节点并在各种系统上运行。这些客户端是通用的ANSI c++ rosserial_client库的端口。包括:

rosserial_arduino支持Arduino兼容板包括UNO, Leonardo, MEGA, DUE, Teensy 3。LC、Spark、STM32F1、STM32Duino、ESP8266、ESP32
rosserial_embeddedlinux支持嵌入式Linux(如路由器)
rosserial_windows支持与Windows应用程序通信
rosserial_mbed支持mbed平台
rosserial_tivac支持TI的Launchpad板,TM4C123GXL和TM4C1294XL
rosserial_vex_v5支持VEX V5 Robot Brain
rosserial_vex_cortex支持VEX皮质板
rosserial_stm32支持STM32 mcu,基于STM32CubeMX HAL
ros-teensy支持小型平台
  1. 运行rosserial代码的设备需要主机上的一个节点来桥接从串行协议到更通用的ROS网络的连接:

    1. rosserial_python:基于python的实现(推荐用于PC)。

    2. rosserial_server: 基于ShapeShifter消息的c++实现,与rosserial_python相比有一些限制,但推荐用于高性能应用程序。

  2. 示例和用例

    我们已经创建了一些扩展和示例:

    1. rosserial_arduino教程-包含使用Arduino的各种传感器和执行器的一些例子。这是最有文档记录的教程,其中描述的许多功能可以扩展到其他平台。用于使用XBEE设备和Arduino创建传感器网络的工具。

    2. rosserial_embeddedlinux教程包含了许多带有嵌入式linux系统的各种传感器和驱动器的例子,这些系统不能运行全面的ROS。

    3. rosserial_mbed教程-包含使用各种传感器和执行器与Mbed平台的许多例子。

    4. rosserial_tivac教程-使用Energia IDE或catkinized项目编程TI的TivaC Launchpad的各种示例。

14-video_stream_opencv-master

video_stream_opencv包包含一个用于发布视频流的节点(协议在ROS图像主题中支持opencv支持,包括rtsp, webcams on /dev/video和视频文件),它支持摄像头信息和基本图像翻转(水平,垂直或两者)能力,也可以调整发布速率。

一个包查看视频流基于OpenCV videcapture模块,简单的方式发布一个ROS图像主题(包括摄像头信息)usb摄像头,以太网摄像头,视频流或视频文件。它还支持图像翻转和fps节流。

15-gscam-master

一个ROS摄像头驱动程序,使用gstreamer连接设备,如网络摄像头。

gscam是一种在ROS中使用网络摄像头的简单方法,可以最大限度地提高兼容性。gscam利用了Gstreamer,一个类似于DirectShow的多媒体框架。具体来说:Gstreamer可用于构建由源、汇和过滤器组成的多媒体“管道”。例如:一个v4l网络摄像头源在被发送到屏幕(接收器)之前可能会被一个升级器过滤。另一种方法是,mp4文件可以作为源文件,然后作为接收器过滤到avi文件中。有很多可能性。有关概述,请参见:使用Gstreamer。

Gscam可以将自己附加到一个特殊格式的管道上。如果这个管道是处理RGB视频,gscam将作为标准ROS图像传输和ROS摄像机重播视频。由于Gstreamer兼容Linux下的几乎所有视频捕捉标准(以及OSX上的许多标准),gscam使得ROS实际上兼容几乎所有Linux网络摄像头或视频系统。此外,由于有许多Gstreamer过滤器处理视频(例如白平衡,裁剪等),gscam允许更高级的视频处理,即使是在更便宜的网络摄像头。

Gstreamer是一个非常丰富的框架,但基本用法相当简单。请参阅“基本用法”部分开始。你也可以在他们的网站上找到Gstreamer文档。

16- ros_controllers-noetic-devel

在一个机器人当中有多个controller,类似ros_controllers中现提供的、effort_controllersjoint_state_controllerposition_controllersvelocity_controllersjoint_trajectory_controllers,其中不同的controller可以完成对不同模块的控制。如:

  • effort_controllers -向关节施加所需的力/扭矩。

  • Joint_effort_controller(力/扭矩输入直接输出到关节)

  • joint_position_controller(位置输入进入PID控制器,输出力/力矩到关节)

  • joint_velocity_controller(速度输入进入PID控制器,输出力/扭矩到关节)

  • joint_state_controller—将注册到hardware_interface::JointStateInterface的所有资源的状态发布到sensor_msgs/JointState类型的主题。

  • joint_state_controller

  • position_controllers—一次设置一个或多个关节位置。

  • joint_position_controller

  • joint_group_position_controller

  • velocity_controllers—一次设置一个或多个关节速度。

类似于包12的第一部分,也是各种各样的模块。

17-ros_control-noetic-devel

  1. controller_manager:管理和控制各个controller的管理器,其主要提供统一的接口来管理不同的manager。

  2. hardware_interface: 在撰写本文时,可用硬件接口(通过硬件资源管理器)的列表。硬件接口由ROS控制与上述其中一个ROS控制器一起使用,向硬件发送和接收命令。这个文件为硬件提供了接口。

  3. controller_interface:这个文件为contrller提供了接口。

  4. ros_control: 一组包,包括控制器接口、控制器管理器、传输和硬件。

  5. commbined_robot_hw: 组合的硬件机器人,ComboRobotHW是某种RobotHW管理器。

  6. rqt_controller_manager: 用于与控制器管理器交互的图形前端。

 

 

四、组内分工:

关键代码确定工作:

导航相关:1、5、6、10、13、。 通信和摄像头相关:2、16、17、15、12、14。 图、rviz和tf相关:3、4、7、8、9、11。

五、参考资料:

ROS基础-基本概念和简单工具(1) - feihu_h - 博客园 (cnblogs.com)

ROS学习笔记——初识源代码 - 知乎 (zhihu.com)

cn - ROS Wiki

ROS入门教程 - 创客智造 (ncnynl.com)

关于ROS_Contorller的详解 - 简书 (jianshu.com)

写一个组合的机器人硬件接口(ComboRobotHW)_跃动的风的博客-CSDN博客


版权声明:本文为m0_49088083原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。