当前位置: 首页 > news >正文

create® 3入门教程-使用多个机器人

 系列文章目录:

  • 目录:

  • create® 3入门教程-介绍

  • create® 3入门教程-硬件概述

  • create® 3入门教程-硬件安装

  • create® 3入门教程-电池组

  • create® 3入门教程-按钮和灯环

  • create® 3入门教程-适配器板

  • create® 3入门教程-USB-C连接器

  • create® 3入门教程-网络服务器

  • create® 3入门教程-连接网络服务器

  • create® 3入门教程-更新固件

  • create® 3入门教程-网络服务器日志

  • create® 3入门教程-网络服务器应用

  • create® 3入门教程-网络服务器状态信息

  • create® 3入门教程-连接到Wi-Fi

  • create® 3入门教程-使用多个机器人

  • create® 3入门教程-ROS2网络配置

  • create® 3入门教程-在Ubuntu 20.04上使用Create3

  • create® 3入门教程-在Raspberry Pi4上使用Create3

  • create® 3入门教程-将Create3连接到NVIDIA Jetson

  • create® 3入门教程-设置NTP

  • create® 3入门教程-创建Create3 Docker映像

  • create® 3入门教程-Create3 ROS 2 API

  • create® 3入门教程-自主充电

  • create® 3入门教程-简单的动作

  • create® 3入门教程-传感器检测

  • create® 3入门教程-里程计

  • create® 3入门教程-反应Reflexes

  • create® 3入门教程-安全功能

  • create® 3入门教程-按钮和光环与用户进行交互

  • create® 3入门教程-沿着障碍物前进

  • create® 3入门教程-模拟器

  • create® 3入门教程-通过ROS2命令执行

  • create® 3入门教程-读取机器人的传感器

  • create® 3入门教程-导航


说明:

  • 介绍如何使用多个 Create® 3 机器人

相关设备

  • Turtlebot4机器人套件:采购地址

ROS 2 通信的基本概念

  • ROS 2 1通信基于底层 DDS​​ 中间件。两个 ROS 进程发现彼此后,如果它们的主题、服务或操作匹配,它们将自动开始通信。

  • ROS 2 使用的默认发现协议是基于广播的。这意味着当一个 ROS 2 进程启动时,它会将自己的发现消息通告给连接到同一网络的所有其他 ROS 进程。

  • 使用广播发现协议的主要优点是,只要你的 ROS 2 进程连接到同一个网络,它们就会自动相互连接并开始通信。基本用例不需要用户进行任何特殊配置。

多个机器人的潜在问题

  • 让 ROS 2 进程自动开始通信并不总是一件好事。通常,如果两个原本要单独执行的 ROS 2 进程开始通信,它们最终会在进程之间混淆消息,而无法理解它们接收到的信息是针对它们还是针对其他进程(或者在这种情况下) , 机器人)。

  • 在某些情况下,机器人内部的两个 ROS 2 进程无意进行通信,但碰巧这样做是因为它们具有相同的主题名称并且恰好位于同一网络下。另一方面,同时运行多个机器人的用户可能希望能够从他们的笔记本电脑选择与哪个机器人进行通信,同时仍然阻止它们相互通信。

  • 以下部分将描述如何缓解和解决这些问题。提出了不同的解决方案,因为每种解决方案都适用于不同的场景。

ROS 2 命名空间

  • 防止多个 ROS 2 进程相互通信的最简单方法是使用 ROS 2 命名空间。您可能知道,每个 ROS 2 实体都由其名称唯一标识(例如,命名的主题cmd_vel用于控制机器人)。通过为 ROS 2 进程指定命名空间,您实际上是在它创建的所有实体的名称前面添加了一个单词。

  • ROS 2 命名空间可以从 Create® 3 机器人网络服务器的应用程序 → 配置菜单中设置。请注意,命名空间名称必须以斜杠开头/。

  • 如果您有两个机器人并指定以下命名空间:/robot_1然后/robot_2您将能够看到它们各自的主题被很好地分开:

$ ros2 topic list
/robot_1/cmd_vel
/robot_1/dock
/robot_1/odom
...
/robot_2/cmd_vel
/robot_2/dock
/robot_2/odom
...
  • 请注意,如果您想发布或订阅特定主题,现在您必须在其前面添加适当的命名空间。例如:
$ ros2 topic echo /robot_1/odom
  • 如果您没有太多机器人,或者如果您有一个需要同时与所有机器人通信的附加应用程序,则推荐为您的机器人使用自定义 ROS 2 命名空间

ROS 2 域 ID

  • 隔离多个 ROS 2 进程的另一种方法是指定ROS_DOMAIN_ID环境变量。

  • 如果两个进程使用不同的ROS_DOMAIN_ID值,它们将彼此完全隔离,这意味着它们不仅会避免通信,而且它们也将无法发现彼此。您可以在ROS 2 官方文档中阅读有关此变量的更多详细信息。

  • ROS 2 域 ID 可以从 Create® 3 机器人网络服务器的应用程序 → 配置菜单中设置。请注意,域 ID 必须是介于 0 和 101 之间的值。默认情况下,ROS 2 进程使用ROS_DOMAIN_ID值 0。

  • 如果您想通过笔记本电脑与特定机器人进行通信,则需要为域 ID 设置相应的值。例如:

$ export ROS_DOMAIN_ID=42
$ ros2 topic list
/cmd_vel
/dock
/odom
...
  • 请注意,ROS 2 进程一次只能使用一个域 ID。如果需要,您始终可以在同一个域 ID 下拥有多个机器人,然后还可以添加命名空间以防止它们通信。

  • 当您拥有大量机器人并且您希望您的工具仅与其中的一部分机器人进行通信时,推荐为您的机器人使用自定义 ROS 2 域 ID 的解决方案。

相关文章:

  • Redis实战篇一 (短信登录)
  • Java高级——Class文件及解析
  • 高效代码静态测试工具Klocwork 2022.3版本快讯
  • java毕业设计艾灸减肥管理网站Mybatis+系统+数据库+调试部署
  • 【day12】【洛谷算法题】-P5712Apples-刷题反思集[入门2分支结构]
  • 【C语言进阶考试】你是否真正学懂了C语言
  • JS手写章节(1)—手写实现call、apply、bind
  • 零基础小白学Node-RED(04):仪表板
  • 【正点原子I.MX6U-MINI应用篇】2、点亮开发板的LED
  • 【C++】第五章 数组:一维数组/二维数组
  • 阿里云大数据开发一面面经,已过,面试题已配答案
  • 自定义模块和第三方模块,cnmp
  • 【正点原子I.MX6U-MINI应用篇】3、Framebuffer应用编程,操作屏幕
  • 区间预测 | MATLAB实现GRU门控循环单元分位数回归多输入单输出
  • 大学网上课程查题系统搭建使用-公众号使用
  • JavaScript-如何实现克隆(clone)函数
  • 自己简单写的 事件订阅机制
  • [NodeJS] 关于Buffer
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • Apache Pulsar 2.1 重磅发布
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • CAP理论的例子讲解
  • CentOS从零开始部署Nodejs项目
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • Solarized Scheme
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • spring + angular 实现导出excel
  • Vue 重置组件到初始状态
  • 不上全站https的网站你们就等着被恶心死吧
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 关于字符编码你应该知道的事情
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 再次简单明了总结flex布局,一看就懂...
  • 第二十章:异步和文件I/O.(二十三)
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • ‌JavaScript 数据类型转换
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • # Java NIO(一)FileChannel
  • #1015 : KMP算法
  • #stm32驱动外设模块总结w5500模块
  • #如何使用 Qt 5.6 在 Android 上启用 NFC
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • ( 10 )MySQL中的外键
  • (0)Nginx 功能特性
  • (C语言)fread与fwrite详解
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (十六)视图变换 正交投影 透视投影
  • (五)c52学习之旅-静态数码管
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (转)Mysql的优化设置
  • (转)人的集合论——移山之道
  • (自用)仿写程序
  • .Net OpenCVSharp生成灰度图和二值图
  • .NET 读取 JSON格式的数据