ROS学习记录-hirain实习记录

国内学习ROS的一个很好的平台:https://fishros.com/
本篇博客大部分的内容参考:https://fishros.com/d2lros2/#/,并且一部分来自工作过程中的经验记录。

ROS快速入门:

ROS机器人操作系统(Robot Operating System)作为快速搭建机器人的一大利器,在机器人行业的开发中被广泛使用。

ROS2作为第二代机器人操作系统,继承了ROS强大的生态,采用了全新的架构设计,使得ROS2满足现代机器人系统的实时性、安全性、标准性、可靠性等要求。

在ROS中比较重要的几个概念:

  • 节点,节点是在一个进程中的main函数中init的一个ROS对象,一个节点来作为所有publisher和subscriber的载体。ROS2中每一个节点也是只负责一个单独的模块化的功能。
  • Topic,话题是指Publisher和Subscriber订阅和发布的通道,ROS的通信基础无论ROS1还是ROS2都是发布者订阅者模型。
  • Message,在Topic通信的一个标准数据格式,可以自定义也可以使用ROS定义好的。Message是一个跨平台,跨语言的标准,定义好MSG之后ROS会自动识别并产生相应的类。
  • Publisher,发布者,ROS中的发布者需要绑定3个参数,分别是发布的MSG类型,Topic名,缓冲区大小。定义好的Publisher可以通过publish方法发布组装好的msg。
  • Subscribe,接受者,ROS中的接受者也需要绑定3个参数,分别是Topic名,缓冲区大小,回调函数。在一个节点中声明一个接受者之后,ROS会监听该Topic,如果Topic上有msg发布,就会调用相应的回调函数。
  • ros::Rate loop_rate() ROS中的频率控制,通过和ros::ok()的搭配可以实现在while循环中按照一定频率来执行相应的代码。

ROS1相关内容:

  • Msg是独立出来的一个数据结构,不被语言所限制,是定义在项目中的一个独立部分。可以被C++和python进行识别。可被ROS自动编译生成相应的结构体。
  • 对于Ros1项目,经过catkin_make后还要进行sourece ./devel/setup.bash 这一指令不然启动的项目将是上一次source的版本。
  • 我进行的ros项目启动方式为:roslaunch [xxx] [xxx].launch,因为ROS的一个重要思想就是低耦合,每个节点只完成一个功能,使用launch文件可以在大型工程中方便地管理多个节点。
  • 一个ros项目在catkin_make之前所需要的只有src文件夹,其余的build和devel都是在catkin_make后生成的。
  • catkin_make是一个第三方的打包工具,使用命令行进行操作,基本上不需要编辑CMAKEList文件等。
  • launch文件一般在src下的launch文件夹,可以用来启动一些比较大的项目,避免rosrun启动比较麻烦的情况发生。

ROS2相关内容:

  • ROS2和ROS的不同点:
    • 在ROS中存在主节点,如果主节点负责各个节点之间的管理和通信。在ROS2中取消了主节点,并将通信层换成了DDS,采用第三方的DDS(Data Distribution Service (数据分发服务))服务,不造通信的轮子。该DDS可以叫做中间件。
    • 支持多平台,不只有linux还有window等。
  • rqt命令,ROS的一个辅助工具,可以显示当前的ROS项目中各个Topic和节点的通信拓扑图。
  • colcon 是ROS2的功能包构建工具。通过colcon build命令来编译工程。
  • ROS系列的项目在编译成功之后记得需要source一下资源。使用source install/setup.bash。
  • ROS2创建功能包命令:ros2 pkg create example_cpp --build-type ament_cmake --dependencies rclcpp。其中–dependencies后添加的是依赖,使用–build-type来制定编译类型。
  • 在ROS中新建或者引入新的cpp后需要修改该项目中对应的CmakeLists.txt文件。
  • ROS2节点发现与多机通信:
    • ROS 2用于通讯的默认中间件是DDS。在DDS中,不同逻辑网络共享物理网络的主要机制称为域(Domain) ID。同一域上的ROS 2节点可以自由地相互发现并发送消息,而不同域上的ROS 2节点则不能。所有ROS 2节点默认使用域ID为0。为了避免在同一网络上运行ROS 2的不同计算机组之间互相干扰,应为每组设置不同的域ID。
    • 只需选择一个介于0和101之间的安全的域ID (包括0和101)。
  • 通信:
    • 通信的原理涉及两个主要方面:通信协议和通信方式。通信协议定义了数据的格式、传输方式、错误检测和纠正等规则,以确保可靠的数据传输。通信方式涉及了不同的通信介质和技术,包括网络通信和进程间通信(IPC)。
    • 分为:1. 基于TCP/UDP的网络通信方式,2.基于共享内存的进程间通信(IPC)方式。
  • 同一个话题,所有的发布者和接收者必须使用相同消息接口。
  • ament_cmake类型功能包导入消息接口分为三步:
  • 在CMakeLists.txt中导入,具体是先find_packages再ament_target_dependencies。
  • 在packages.xml中导入,具体是添加depend标签并将消息接口写入。
  • 在代码中导入,C++中是#include"消息功能包/xxx/xxx.hpp"。
  • 可以定义的接口三种类型:除了参数之外,话题、服务和动作(Action)都支持自定义接口,每一种通信方式所适用的场景各不相同,所定义的接口也被分为话题接口、服务接口、动作接口三种。其实这里有一个转换的过程:将msg、srv、action文件转换为Python和C++的头文件。
  • 通过ROS2的IDL模块 产生了头文件,有了头文件,我们就可以在程序里导入并使用这个消息模块。
  • ros launch的使用
    • 在ros2中可以创建一个launch.py来书写ros节点launch的逻辑。从而实现多个节点的同时启动。
    • 启动的各个子节点会运行在不同的进程中。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值