机器人项目:从 ROS2 切换到 ROS1 的原因

一、说明

机器人操作系统ROS是使用最广泛的机器人中间件平台。它在机器人社区中使用了10多年,无论是在业余爱好者领域还是在工业领域。ROS可用于各种微控制器和计算机,从Arduino到Raspberry Pi再到Linux工作站,它为电机控制器,视觉传感器,深度摄像头和激光扫描仪提供硬件支持。本文介绍ROS2和ROS1的项目尝试和结论。

二、在ROS学习过程

        在我的构建机器人项目中,我同时使用了 ROS1 和 ROS2。到目前为止,我完成了 2 个阶段中的 5 个。第一阶段是研究:了解机器人的硬件和软件,研究微控制器和传感器,测试库和中间件。在第二阶段,我构建了一个基于Arduino的原型,一种红外控制的4轮车,我称之为RADU。现在,阶段 3 有两个不同的部分:使用 ROS 模拟机器人,然后构建支持 ROS 的机器人。这就是困境:ROS2的模拟 - 通过长时间的试错期来之不易 - 无法扩展到混凝土机器人,因为我的硬件不受支持。我考虑了很长时间,最终决定从此继续使用 ROS1。

本文总结了我的经验,并解释了最终选择的基本原理。

这篇文章最初出现在我的博客 admantium.com。

三、回顾我的机器人项目

        在 2021 年初启动项目时,我对 ROS 的第一次体验仅限于纯模拟。在我的笔记本电脑上将基于Ubuntu的Linux作为VM运行,我用RViz安装了ROS noetic,并制作了一个简单的四轮机器人URDF模型。

        然后,我买了一个机器人底盘,几个Arduino Uno和5V兼容传感器。通过学习教程,了解 Arduino 的工作原理以及如何测量和处理传感器数据,这是一个令人振奋的时刻。我有很多“尤里卡”时刻,在遇到一些困难后,传感器会突然工作。这一阶段以第一个混凝土原型完成,这是一个由 IR 控制的移动 4 轮底盘。

        准备在我的项目中充分利用 ROS,我将 ROS2 安装在专用的 Linux 工作站上。然后我开始将我的简单RViz ROS1模型移植到ROS2,并扩展模型以兼容Gazebo。有趣的是,学习机器人背后的物理学,并深入了解ROS概念。不利的一面是,我花了很长时间的试验和错误来开发一个与Gazebo兼容的模型。但最后,我可以启动模拟,启动一个远程节点,并在模拟流点云传感器数据中移动机器人。

        从模拟到机器人是下一个阶段。与此同时,覆盆子笔克进入舞台。最初,我只是测试了如何添加传感器并使用C和MicroPython读取它们。但是阅读了几个教程并观看了有关基于Raspberry Pi的项目的视频,这些项目使用Python中的机器人控制软件使我相信了可行性。用MicroPython从头开始编写电机控制软件成为我的目标。我用MicroPython完全重建了我的机器人,并在电机控制命令包装器中添加了一个ROS Twist消息。机器人动了!但是在添加我的实感 D435 相机时,经过几个小时的尝试,我无法使用 ROS2 流式传输点云数据。出于好奇,我切换到 ROS1 — 在这里它开箱即用!

        这一启示引起了下一段所概述的意见。

四、ROS1 与 ROS2

        ROS2是未来的ROS。根据社区网站和YouTube视频的信息,ROS2面向工业用途。机器人通信使用称为XRCE-DDS的标准中间件层。ROS2还抑制了系统自愈和可靠性的特点,例如无需ROS主节点即可运行。

        在研究混凝土机器人项目时,来自社区的 ROS2 机器人与 ROS1 机器人相比相形见绌。过去 3 年开发的大多数项目仍然使用 ROS1。我没有考虑这个事实,只是感到惊讶,因为 ROS2 自 2017 年以来就已经发布。

        在使用 ROS2 模拟机器人并让 ROS2 与我的机器人传感器(尤其是 RealsenseD435 相机)一起运行时,我遇到了几个障碍。这是个人回忆。

        首先,在搜索如何连接某个传感器时,很难找到或根本不存在与 ROS2 相关的信息、具体文章、文档或 YouTube 视频。

        其次,有关 Gazebo 控制器和 Gazebo 插件等特殊主题的文档不完整。如果你想构建一个 Gazebo 模拟,ROS1 有探索性和全面的手册,但对于 ROS2,你需要从不同的网站获取信息片段,组装它们,并在它工作之前使用大量的试验和错误。让我的机器人模拟与 Gazebo/RVIZ 2 中的所有传感器和主题一起工作是一段漫长的旅程。

        第三,当使用SBC组装机器人并将其连接到微控制器时,您会惊讶地发现没有通用库可以通过串行连接它们,如本博客文章所述。你要么需要使用非常特定的微控制器,并为它们编译一个定制的RTOS Linux发行版,这使得很难重用你的Arduino库。或者您需要具有网络功能的特殊板。

        第四,检查 ROS2 的硬件支持显示可用的选项较少,其他机器人爱好者在运行 ROS2 时遇到问题。在尝试让英特尔实感 D435 与 ROS2 配合使用时,我也有同样的经历。尽管我使用了最新的固件,从头开始编译了librealsense,编译了ros-realsense软件包,但它不起作用,甚至响应迅速且有用的社区问题板上的一个线程也没有找到答案。当我切换到 ROS1 时,相同的传感器可以正常工作。

        概括这些观察结果使我得出一个可悲的结论,即使用ROS2意味着找到更少的文档,对传感器的支持更少,并且SBC和微控制器的集成更加困难。

五、再次切换到 ROS1

        让gazebo模拟在 ROS2 中工作的经验主要是反复试验。让Realsense2相机在ROS2中工作并不成功。因此,从其他人那里阅读有关ROS2的类似错误和问题的信息是另一个影响。最后,在研究在我的机器人上使用ROS的下一个方面时,比如SLAM,自主运动,抓手 - 确实一次又一次地透露了ROS1的完整教程和书籍,我做出了决定:我的项目将继续使用ROS1。

塞巴斯蒂安

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/47711.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

顺序栈Sequential-stack

0、节点结构体定义 typedef struct SqStack{int *base;int *top; } SqStack; 1、初始化 bool InitStack(SqStack &S) {S.base new int[Maxsize]; //eg. #define Maxsize 100if(!S.base){return false;}S.top S.base;return true; } 2、入栈 bool Push(SqStack &…

深入理解JMM和并发三大特性

并发和并行 并发和并行的目的都是为了使CPU的使用率最大化,这两个概念也是我们容易混淆的。 并行(Parallel) 并行是指在同一时刻,有多条指令在多个处理器上同时执行,因为并行要求程序能同时执行多个操作&#xff0c…

python连接PostgreSQL 数据库

执行如下命令安装 pip3 install psycopg2 python代码 Author: tkhywang 2810248865qq.com Date: 2023-08-21 11:42:17 LastEditors: tkhywang 2810248865qq.com LastEditTime: 2023-08-21 11:51:56 FilePath: \PythonProject02\PostgreSQL 数据库.py Description: 这是默认设置…

C#系统锁屏事件例子 - 开源研究系列文章

今天有个网友问了个关于操作系统锁屏的问题。 我们知道,操作系统是基于消息和事件处理的,所以我们只要找到该操作系统锁屏和解屏的那个事件,然后在事件里进行处理即可。下面是例子介绍。 1、 项目目录; 下面是项目目录&#xff1a…

jQuery Editable Select可搜索下拉选项框

前言 可搜索的下拉选项框 源码地址:https://github.com/indrimuska/jquery-editable-select 可搜索的下拉选项框 引入依赖 <script src"//code.jquery.com/jquery-1.12.4.min.js"></script> <script src"//rawgithub.com/indrimuska/jquery…

漏洞指北-VulFocus靶场专栏-初级02

漏洞指北-VulFocus靶场02-初级 初级005 &#x1f338;phpunit 远程代码执行 (CVE-2017-9841)&#x1f338;step1&#xff1a;进入漏洞页step2&#xff1a; burpsuite 抓包,等待请求页&#xff0c;获得flag 初级006 &#x1f338;splunk 信息泄露 &#xff08;CVE-2018-11409&am…

传统DNS、负载均衡服务发现框架与专业服务发现框架(Eurek、nacos)分析

1、DNS 服务器 DNS 服务器可以在一定程度上用作服务发现的机制&#xff0c;以下是其冲动服务发现的一些利弊 优势 广泛性&#xff1a; DNS是互联网的标准协议之一&#xff0c;已经广泛地被支持和使用。因此&#xff0c;使用DNS作为服务发现的机制可以借助现有的网络基础设施…

工业类LMQ61460AASRJRR,汽车类LMQ61460AFSQRJRRQ1、LMQ61460AASQRJRRQ1 6A、降压转换器简化原理图

一、LMQ61460AASRJRR器件概述&#xff1a; LMQ61460 是一款具有集成旁路电容器的高性能直流/直流同步降压转换器。该器件具有集成式高侧和低侧MOSFET&#xff0c;能够在 3.0V 至 36V 的宽输入电压范围内提供高达 6A 的输出电流&#xff1b;可耐受 42V 电压&#xff0c;简化了输…

85-最大矩阵

题目 给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵&#xff0c;找出只包含 1 的最大矩形&#xff0c;并返回其面积。 示例 1&#xff1a; 输入&#xff1a;matrix [[“1”,“0”,“1”,“0”,“0”],[“1”,“0”,“1”,“1”,“1”],[“1”,“1”,“1”,…

SpringCloudGateway网关实战(一)

SpringCloudGateway网关实战&#xff08;一&#xff09; 目前对cloud的gateway功能还是不太熟悉&#xff0c;因此特意新建了对应的应用来尝试网关功能。 网关模块搭建 首先我们新建一个父模块用于添加对应的springboot依赖和cloud依赖。本模块我们的配置读取使用的是nacos&a…

ubuntu开机失败——ACPI Error

开机循环进入GNU GRUB 或者 黑屏 1.acpioff 解决办法 1&#xff09;先用下面方法进入系统 2&#xff09;更改grub ref 开机循环进入GNU GRUB 或者 黑屏 有提示ACPI Error错误如图&#xff1a; 解决办法 1&#xff09;先用下面方法进入系统 在GUN GRUB界面&#xff0c;选择ubun…

juc概述和Lock接口

目录 一、什么是JUC 1、JUC概述 2、进程与线程 3、线程的状态 4、wait/sleep 的区别 5、并发与并行 6、管程 7、用户线程和守护线程 二、Lock接口 1、Synchronized 使用synchronized实现售票案例 使用synchronized实现增减变量操作 2、什么是 Lock 买票例子使用lo…

[ MySQL ] — 复合查询和内外连接的使用

目录 复合查询 多表查询 自连接 子查询 单行子查询 多行子查询 多列子查询 在from子句中使用子查询 合并查询 union union all 表的内连接和外连接 内连接 外连接 左外连接 右外连接 复合查询 多表查询 实际开发中往往数据来自不同的表&#xff0c;所以需要多表查…

解决运行在微信小程序中报[ app.json 文件内容错误] app.json: app.json 未找到(env: Windows,mp,1.05.2204

找到project.config.json文件夹 添加 "miniprogramRoot": "unpackage/dist/dev/mp-weixin/", 即可

Docker之Compose

目录 前言 一、Docker-compose概述 1.1Docker Swarm与Docker Compose 1.1.1Docker Swarm 1.1.2Docker Compose 1.1.2.1 三层容器 ​编辑 二、YAML 2.1YAML概述 2.2注意事项 2.3Docker Compose 环境安装 2.3.1下载 三、Docker-Compose配置常用字段 四、Docker-com…

Python学习笔记_实战篇(二)_django多条件筛选搜索

多条件搜索在很多网站上都有用到&#xff0c;比如京东&#xff0c;淘宝&#xff0c;51cto&#xff0c;等等好多购物教育网站上都有&#xff0c;当然网上也有很多开源的比楼主写的好的多了去了&#xff0c;仅供参考&#xff0c;哈哈 先来一张效果图吧&#xff0c;不然幻想不出来…

06 mysql all查询 和 主键查询 和 非索引列查询

前言 本文主要调试一下 mysql 的如下两种查询语句 我们也来深入的看一下, 究竟如下两个普通的查询, mysql 做了什么事情 1. select * from user where id 991; 2. select * from user; 3. select * from user where name jerry991; 环境介绍 测试表 user schema 如下…

机器学习之数据清洗

一、介绍 数据清洗是机器学习中的一个重要步骤&#xff0c;它涉及对原始数据进行预处理和修复&#xff0c;以使数据适用于机器学习算法的训练和分析。数据清洗的目标是处理数据中的噪声、缺失值、异常值和不一致性等问题&#xff0c;以提高数据的质量和准确性。 二、方法 处理…

【3D激光SLAM】LOAM源代码解析--scanRegistration.cpp

系列文章目录 【3D激光SLAM】LOAM源代码解析–scanRegistration.cpp 【3D激光SLAM】LOAM源代码解析–laserOdometry.cpp 【3D激光SLAM】LOAM源代码解析–laserMapping.cpp 【3D激光SLAM】LOAM源代码解析–transformMaintenance.cpp 写在前面 本系列文章将对LOAM源代码进行讲解…

2023-08-21 Unity Shader 开发入门1 —— 渲染管线

文章目录 一、概述二、应用阶段三、几何阶段四、光栅化阶段 一、概述 ​ Unity 中的渲染管线和图形学中的渲染管线基本上指的是相同的概念&#xff0c;但是具体实现和细节方面可能存在一些差异。 ​ Unity 的渲染管线建立在图形学的基础上&#xff0c;但具有自己的实现和拓展。…