ROS(四)通信机制进阶
文档维护:Arvin
网页部署:Arvin
▶
写在前面:本文旨在记录学习ROS过程中的一些重要知识概念和遇到的错误问题。主要参考赵虚左老师的ROS课程(第一个参考链接),由于赵老师用的noetic版本,而我用的是melodic版本,细节上可能会有所差异。
常用API
初始化
C++
12345678910111213/** @brief ROS初始化函数。 * * 该函数可以解析并使用节点启动时传入的参数(通过参数设置节点名称、命名空间...) * * 该函数有多个重载版本,如果使用NodeHandle建议调用该版本。 * * \param argc 参数个数 * \param argv 参数列表 * \param name 节点名称,需要保证其唯一性,不允许包含命名空间 * \param options 节点启动选项,被封装进了ros::init_options * */void init(int &argc, char **argv, const std::string& name, uint32_t options = 0);
Python
1234567 ...
ROS(三)通信机制
文档维护:Arvin
网页部署:Arvin
▶
写在前面:本文旨在记录学习ROS过程中的一些重要知识概念和遇到的错误问题。主要参考赵虚左老师的ROS课程(第一个参考链接),由于赵老师用的noetic版本,而我用的是melodic版本,细节上可能会有所差异。
ROS中的基本通信机制主要有如下三种实现策略:
话题通信(发布订阅模式)
服务通信(请求响应模式)
参数服务器(参数共享模式)
话题通信
理论模型
话题通信实现模型是比较复杂的,该模型如下图所示,该模型中涉及到三个角色:
ROS Master(管理者)
Talker(发布者)
Listener(订阅者)
ROS Master 负责保管 Talker 和 Listener 注册的信息,并匹配话题相同的 Talker 与 Listener,帮助 Talker 与 Listener 建立连接,连接建立后,Talker 可以发布消息,且发布的消息会被 Listener 订阅。
0.Talker注册
Talker启动后,会通过RPC在 ROS Master 中注册自身信息,其中包含所发布消息的话题名称。ROS Master 会将节 ...
ROS(二)基础
文档维护:Arvin
网页部署:Arvin
▶
写在前面:本文旨在记录学习ROS过程中的一些重要知识概念和遇到的错误问题。主要参考赵虚左老师的ROS课程(第一个参考链接),由于赵老师用的noetic版本,而我用的是melodic版本,细节上可能会有所差异。
ROS基础知识
ROS文件基础架构
ROS文件系统指的是在硬盘上ROS源代码的组织形式,其结构大致可以如图所示:
12345678910111213141516171819202122232425262728293031WorkSpace --- 自定义的工作空间 |--- build:编译空间,用于存放CMake和catkin的缓存信息、配置信息和其他中间文件。 |--- devel:开发空间,用于存放编译后生成的目标文件,包括头文件、动态&静态链接库、可执行文件等。 |--- src: 源码 |-- package:功能包(ROS基本单元)包含多个节点、库与配置文件,包名所有字母小写,只能由字母、数字与下划线组成 |-- CMakeLists.txt 配置编译规则 ...
ROS(一)安装
文档维护:Arvin
网页部署:Arvin
▶
写在前面:本文旨在记录学习ROS过程中的一些重要知识概念和遇到的错误问题。主要参考赵虚左老师的ROS课程(第一个参考链接),由于赵老师用的noetic版本,而我用的是melodic版本,细节上可能会有所差异。
简介
ROS全称Robot Operating System(机器人操作系统)。
ROS是适用于机器人的开源元操作系统
ROS集成了大量的工具,库,协议,提供类似OS所提供的功能,简化对机器人的控制
还提供了用于在多台计算机上获取,构建,编写和运行代码的工具和库,ROS在某些方面类似于“机器人框架”
ROS设计者将ROS表述为“ROS = Plumbing + Tools + Capabilities + Ecosystem”,即ROS是通讯机制、工具软件包、机器人高层技能以及机器人生态系统的集合体
经过长时间的迭代与发展,ROS有许多版本,大版本有ROS1和ROS2之分。与ROS1相比,主要的更改如下(框架层面):
系统架构进行了颠覆性的变化,ROS1中所有节点都需要在节点管理器ROS Master的管理下进行工作,一旦M ...
Adam
文档维护:Arvin
网页部署:Arvin
▶
Abstract
介绍了一种基于低阶矩自适应估计的随机目标函数一阶梯度优化算法Adam。该方法易于实现,计算效率高,内存需求少,对梯度的对角线重新缩放不变,非常适合数据和参数量大的问题。
该方法也适用于非平稳目标和具有非常嘈杂和/或稀疏梯度的问题。超参数有直观的解释,通常不需要调优。讨论了一些与相关算法的联系,这些算法是Adam的灵感来源。我们还分析了算法的理论收敛性,并给出了与在线凸优化框架下的最知名结果相当的收敛速度遗憾界。实证结果表明,Adam方法在实践中效果良好,优于其他随机优化方法。最后,我们讨论了基于无穷范数的Adam的变体AdaMax。
Introduction
Adam,一种只需要一节梯度且内存需求很小的高效随机优化方法。该方法通过估计梯度的第一阶矩和第二阶矩来计算不同参数的个体自适应学习率。算法伪代码:
参数:
ttt:时间步数
α\alphaα:学习率(步长)
θ\thetaθ:参数
f(θ)f(\theta)f(θ):目标函数(损失函数)
gtg_tgt:梯度,即gt=∂f∂θg_t = \frac{\part ...