| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> The ROS_DOMAIN_ID,即ROS的领域标识的含义 -> 正文阅读 |
|
[人工智能]The ROS_DOMAIN_ID,即ROS的领域标识的含义 |
????????最近心血来潮尝试了一下ROS 2,想着看下ROS 2是如何仿真,以及想要看下ROS 2实际应用的可行性。 ????????关于ROS,本人最近才开始了解,之前少有接触。目前我是打算当作仿真工具来使用的,关于其实际运用落地,目前还是比较担心其性能、延时的问题(毕竟在网络上听说过ROS对于时间延时的问题优化不够)。但是仔细想来,应该也没有哪个产品会完全使用ROS吧,毕竟不是所有的Robot都是拥有多个处理单元的(应该考虑到多线程能力弱的处理单元),因此从实际的方面考虑,我目前是把这个ROS当作仿真工具来使用,主要是验证流程、算法等。 ????????因此,我在此处有开了新的专栏来讲述我在学习使用ROS的过程中的心得和遇到的困难。差不多就是想当作一份笔记来进行书写吧。 一、安装ROS记录????????选择版本为ROS Foxy LTS,长期支持的版本比较友好些。同时安装过程强烈建议跟着官方进行,虽然在国内因此各种联网的坑而心态爆炸,但是也是最为简单粗暴了。 1.1、确认安装ROS的操作系统????????本人实操的系统环境为:Ubuntu20.04、x86_64。 ? ? ? ? 以下是不同的操作系统的所对应的官方链接,均为二进制安装的教程(官网也有源码编译安装的教程,但是不推荐): 1.2、安装步骤(Ubuntu举例)? ? ? ? 根据1.1确认自己系统安装ROS的对应教程,这里推荐使用Ubuntu20.04,比较作为仿真工具,在linux下的使用不管是教程还是什么疑难杂症,网络的解决方法都很多。虽然大多数时间都是不一定适合自己的情况,但是至少是跟本人同步了。 ?1.2.1、设置镜像源,下载公钥? ? ? ? (1)安装必要的下载工具:
? ? ? ? (2)下载公钥(有坑): ????????如果你可以访问外网,那么执行下列命令就好
? ? ? ? 但是如果执行上述命令,出现错误或者一直停顿无法结束,那么大概率是无法按照上面的命令执行了,此时你需要进行如下的操作: ????????这里我通过访问外网下载到了一份ros.key,这里提供了网盘链接: ????????链接: https://pan.baidu.com/s/1l4ipwFdB_QTOhRy9RN40iA?pwd=5n6c? ? ? ? ? 下载好网盘中的ros.key,假设你保存为~/download/ros.key,然后执行如下命令:
? ? ? ? (3)设置镜像
1.2.2、安装ROS 2? ? ? ? (1)更新apt安装工具的源:
? ? ? ? (2)安装ros2(有坑):
? ? ? ? 执行上述命令,如果最后提示”设置触发器”等字眼,那么就代表一切顺利,但是如果出现一下的情况:
? ? ? ? 这种情况代表ROS有的库在ubuntu的国内的服务器无法访问,没有办法安装这些依赖库那么ROS也就无法安装。解决办法如下: ? ? ? ? 打开系统的“软件与更新”,在Ubuntu软件/下载自/其他站点,选择mirrors.tuna.tsinghua.edu.cn这个镜像;点击选择服务器;设置完成后,如下图所示: ? ? ? ? 接着设置apt的下载源为上述设置的清华源:
? ? ? ? 再次尝试安装ROS:
二、ROS_DOMAIN_ID的概念? ? ? ? 下面的内容都是基于官网关于DOMAIN_ID概念介绍 2.1、介绍? ? ? ? ROS 2中不同组件之间信息交流,其依赖的是一个中间件DDS,而DDS这个中间之所以能够让不同的逻辑网络共享一个物理网络,主要依靠一种叫做Domain ID的领域标识。在ROS 2中,不同的node节点在拥有同一个Domain ID的时候能够无障碍地彼此收发信息,而拥有不同的Domain ID的节点之间则不能收发信息。因此Domain ID相当于把node节点隔离分组了。 2.2、Domain ID的取值范围? ? ? ? 从上述的介绍来看,既然不同node节点之间使用DDS来进行信息交流,那么我们很容易想到这个DDS使用了网络通讯的原理(我们可以这样推测:如果一个Robot仿真对象在我们本机运行,存在了多个node,这些不同的node都是在不同的终端单独开启运行的,那么如果保证不同的node节点的唯一性,也就是node需要跟某个设备绑定,如此我们很容易联想到TCP中的网络端口,让node绑定特定的端口从而实现信息交流的可靠性和唯一性)。 ? ? ? ? 因此,根据网络端口的特性,我们知道了不同的Domain ID圈定了不同的网络端口,这样才能够通信分离;同时因为系统本身也在使用部分的网络端口,Domain ID会避让开系统的临时端口范围。linux下系统的临时端口范围可以使用如下命令查看,一般是32768~60999:
? ? ? ? 另外,系统的网络端口总数是2^16个,也就是最大的端口号码是65535。同时在ROS2中一个Domain ID占用了一块长度为250的网络端口号码;ROS2的第0个Domain ID是从7400端口开始分配的。因此,自然我们知道了Domain ID的取值范围为:0~101、215~232。 2.3、单独的Domain ID内部的端口分配? ? ? ? 我们知道一个Domain ID拥有最多250个端口号码,同时拥有多个node节点(通俗地解释,也可以叫做多个任务或者是线程)。那么这250个端口各自的含义是怎样的,同时node和端口的对应关系是如何的? ? ? ? ? ?一个Domain ID拥有两个多播端口,分别是Discovery Multicast?Port、User Multicast Port;一个Domain ID最多拥有120个node节点,一个node链接了该Domain ID的两个多播端口和该node所分配到的单播端口,分别是Discovery Unicast?Port、User Unicast Port。因此一个Domain ID下的所有node共享了两个多播端口,拥有各自对应的单播端口。 ? ? ? ? 我在这里提供了这样的一个python计算工具来进行计算第i个domain id中的第j个node所连接的端口:
? ? ? ? 使用方法:上述代码保存为cal_id.py;然后根据所需要计算的domain_id和node_id(也叫做participant_id)进行传参;实例结果如下所示:
? ? ? ? 至此,对于ROS 2的Domain ID的概念也介绍完毕了。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 22:47:07- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |