AcmeIot-3-在嵌入式设备中运行ROS2

2023-05-16

ROS2是作为第二代ROS,对ROS1进行了重大的优化,主要的特点有:

  • 实现跨平台运行,可以运行在Linux、windows、Mac、RTOS,甚至没有操作系统的裸机

  • 实现真正的分布式通信架构,去中心化,不再依赖于master节点

  • 使用更加成熟可靠的DDS/RTPS作为底层通信框架,在通信的可靠性、稳定性和实时性上都更加出色

ROS1与ROS2的架构对比如图所示:

既然ROS2可以运行在RTOS中,我们自然要动手玩一玩的。

micro-ROS是ROS2运行在嵌入式设备中的项目,而它官方支持FreeRTOS、Zephyr以及Nuttx三款RTOS。

在前面的AcmeIot的分享中,我们开发了一个在esp32上运行的ROS节点

AcmeIot-1-基于Nuttx和ESP32的ROS节点

这里我们再设计一个在esp32上运行的ROS2节点,通过esp32原生的wifi支持,可以与PC的ROS2节点直接互联

micro-ROS的架构如图所示:

图中涉及到一些通信框架上的专业名词,可能同学们看起来可能不是很理解,这里给大家列举一下:

名称说明
DDSDDS指数据分发服务(Data-Distribution Service),是由OMG组织定义的一种以数据为中心的通信模型
DDS-XRCE用于资源极度受限环境的DDS
RTPSRTPS表示实时发布-订阅传输协议(Real-Time Publish Subscribe),该协议已经成为了工业以太网的一个标准(IEC-PAS-62030)。RTPS十分符合DDS模型的要求,于是就被DDS作为它的传输协议
Fast-DDSeProsima开发的DDS实现,被用于ROS2作为主要的通信框架。它的曾用名为Fast-RTPS
Micro-XRCE-DDSeProsima开发的DDS-XRCE实现
Fast-CDReProsima开发的静态的低级序列化C++库,根据RTPS规范中定义的标准CDR串行化机制(参见数据封装章作为参考)进行串行化。Fast-DDS使用的底层序列化库
Micro-CDReProsima 开发的一个实现CDR标准序列化方法的C库。该库专注于嵌入式和资源有限的系统。 Micro-XRCE-DDS使用的底层序列化

在ROS2的软件包中可以经常看到关于这些相关的软件包名,都是ROS2使用的通信框架包,有一个基本的概念对于理解ROS2的软件框架会更清晰一些。

我们大致了解了micro-ROS的结构,我们移植 https://github.com/micro-ROS/micro_ros_nuttx_app 仓库的micro-ROS库与demo应用到Nuttx中。

从该软件包的micro_ros_lib/Makefile 中我们可以发现,micro-ROS实际上是大量的ros2、eprosima、micro-ROS的软件包集合


    git clone -b foxy https://github.com/eProsima/micro-CDR src/micro-CDR; \
    git clone -b foxy https://github.com/eProsima/Micro-XRCE-DDS-Client src/Micro-XRCE-DDS-Client; \
    git clone -b master https://github.com/micro-ROS/rcl src/rcl; \
    git clone -b master https://github.com/ros2/rclc src/rclc; \
    git clone -b master https://github.com/micro-ROS/rcutils src/rcutils; \
    git clone -b main https://github.com/micro-ROS/micro_ros_msgs src/micro_ros_msgs; \
    git clone -b main https://github.com/micro-ROS/rmw-microxrcedds src/rmw-microxrcedds; \
    git clone -b master https://github.com/micro-ROS/rosidl_typesupport src/rosidl_typesupport; \
    git clone -b main https://github.com/micro-ROS/rosidl_typesupport_microxrcedds src/rosidl_typesupport_microxrcedds; \
    git clone -b master https://github.com/ros2/rosidl src/rosidl; \
    git clone -b master https://github.com/ros2/rmw src/rmw; \
    git clone -b master https://github.com/ros2/rcl_interfaces src/rcl_interfaces; \
    git clone -b master https://github.com/ros2/rosidl_defaults src/rosidl_defaults; \
    git clone -b master https://github.com/ros2/unique_identifier_msgs src/unique_identifier_msgs; \
    git clone -b master https://github.com/ros2/common_interfaces src/common_interfaces; \
    git clone -b master https://github.com/ros2/test_interface_files src/test_interface_files; \
    git clone -b master https://github.com/ros2/rmw_implementation src/rmw_implementation; \
    git clone -b master https://github.com/ros2/rcl_logging src/rcl_logging; \
    git clone -b master https://gitlab.com/micro-ROS/ros_tracing/ros2_tracing src/ros2_tracing; \
    git clone -b main https://github.com/micro-ROS/micro_ros_utilities src/micro_ros_utilities; \  

从仓库列表也可以发现,micro-ROS使用了micro-CDR与Micro-XRCE-DDS-Client替代First-CDR与First-DDS,作为底层通信框架。

在解决少量编译错误,并配置esp32支持后,我们的程序即可在esp32中正常运行了。

往期分享:

AcmeGCS-12-地图与任务规划优化

再见2021,你好2022

PX4-11-日志框架与常用日志消息

这里会不定期更新一些我整理的无人机相关知识,欢迎关注分享。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AcmeIot-3-在嵌入式设备中运行ROS2 的相关文章

  • 有哪些国外常用的论文网站

    经常需要查阅论文时 xff0c 除了知网还有下面这些外文网站方便我们查阅 数据库中的论文一般是比较高质量的 xff0c 有的更需要购买才可浏览下载 推荐论文下载网站 xff1a http sci hub tw 个人常用 xff1a 深度学术
  • 【经典配对解析】双子vs.天蝎:致命玩火冤家

    原创 xff1a 珊珊树 转载请注明 xff1a xff09 最近开辟一个话题专栏 xff1a 星座经典配对分析 把我们身边看到最多的 欢笑冤家 写出来 说明 xff1a 这里说的A星座vs B星座 xff0c 不一定是讲太阳星座 也可以说
  • Python爬虫项目之NBA球员可视化分析

    Python爬虫学习之NBA球员可视化分析 前言 最近刚上完Python选修课 一直挺喜欢Python的 觉得Python的简洁优美的代码像是在写诗一样让人看了赏心悦目 其次就是他强大的第三方库是其他语言所不能媲美的 有很多你需要用的功能
  • postgresql时间戳与时间的转换

    日期转时间戳 span class token keyword select span EXTRACT span class token punctuation span epoch span class token keyword FRO
  • python xml文件解析

    1 解析 1 1 解析方式 Python 有三种 XML 解析方式 xff1a SAX xff08 simple API for XML xff09 DOM xff08 Document Object Model xff09 Element
  • python输出列表去掉中括号

    可以使用 join的方法进行输出 xff0c 因为 join处理的是字符串 xff0c 所以需要进行类型转换 list1 span class token operator 61 span span class token punctuat
  • postgresql取出分组的第一条数据

    span class token comment 根据编号分组后取第一条数据 span span class token keyword SELECT span span class token operator span span cla
  • git 清空本地修改

    span class token function git span checkout span class token keyword span span class token comment 本地所有修改的 没有的提交的 xff0c
  • 关于Ubuntu卸载Python导致的终端没了

    解决方式 sudo upgrade fix missing sudo apt install ubuntu desktop
  • elasticsearch wildcard查询取消大小写

    https stackoverflow com questions 51107349 elasticsearch wildcard case sensitive 添加case insensitive 参数即可 GET test 005 se
  • window VNC Viewer设置屏幕分配率

    问题 xff1a 远程时 xff0c 显示的界面不会跟着本机屏幕大小而自动调节 xff0c 导致无法在页面中完全显示屏幕的内容 解决1 xff1a 打开VNC Viewer xff0c 选择Options xff0c 在Scale to w
  • .net core 中使用MongoDB

    https www thecodebuzz com exception filters in net core https www mongodb com docs drivers csharp https www mongodb com
  • 使用代理下载国外源registry.k8s.io镜像,并传到docker hub私有镜像库

    日常的生产开发中 xff0c 免不了从国外拉取镜像 xff0c 但有个问题 xff0c 我们可能访问不到那个镜像源 xff0c 因此需要使用代理 https labs play with docker com 具体步骤 使用docker h
  • python 操作neo4j

    安装依赖包 pip span class token function install span neo4j 使用 span class token keyword class span span class token class nam
  • neo4j获取不同维度关联关系

    插入数据 CREATE span class token punctuation span 小北 朋友圈 span class token punctuation span 姓名 span class token string 34 小北
  • neo4j结合gds实现最短路径算法

    背景 xff1a Neo4j自带的cypher语句中的 shortestpath allShortestPaths 返回值内容非常有限 xff0c 不易处理 在实际生产环境中可用性极低 xff0c 且若带where条件查询时 xff0c 查
  • C#解决中文乱码

    字符串乱码 可以使用Regex Unescape函数解决 字符串写入文件乱码 使用File AppendAllText 或者File WriteAllText path string Encoding ASCII
  • JS中的异步详解

    一 xff1a 异步是什么 xff1f 同步和异步是两种模式 34 同步模式 34 就是指后一个任务等待前一个任务结束 xff0c 然后再执行 xff0c 程序的执行顺序与任务的排列顺序是一致的 同步的 34 异步模式 34 则完全不同 x
  • C语言截取某个字符之前的字符串

    uint32 size 61 0 int p char str 61 34 fadhjkfhadl fhdjfkhla dfjkadlf 34 char str2 61 34 34 p 61 0 for int k 61 0 strlen
  • Xlib: extension “XInputExtension“ missing on display “:1.0“

    ubuntu 安装vscode之后点击生成的图标无法打开 xff08 没有图标记得重启 xff09 xff0c 建议在安装地址直接打开可以看到报错信息 如果是root用户 xff0c 可能需要 no sandbox参数才能启动 继续执行 c

随机推荐

  • matlab的帮助文档切换成中文(求助贴)

    Matlab的帮助文档切换成中文 xff08 求助贴 xff09 题主的matlab版本 xff1a 2018a 系统win10 问题描述 xff1a 当使用matlab时 xff0c 有时需要使用help 语句查看一些关键字的用法 xff
  • Android使用Google Breakpad进行崩溃日志管理

    开发过程中 xff0c 最担心的问题就是程序崩溃 xff0c 而且还不知道崩溃的原因 xff0c 现在使用Google Breakpad来跟踪崩溃的位置 xff0c 非常方便 xff1b 由于目前使用Mac系统开发 xff0c Google
  • Python--使用jieba进行分词并计算词权重

    span class token keyword import span jieba span class token keyword import span xlrd span class token keyword import spa
  • 商务统计_13 使用excel拟合曲趋势线

    趋势线拟合 xff1a 选中两列数据 xff0c 汇制带平滑曲线的散点图选中图中曲线 xff0c 右键 增加趋势线在右边的趋势线格式中 xff0c 将 显示公式 amp 显示R平方值 打勾选择合适的趋势线 xff0c 指数 xff0c 线性
  • 解决k8s无法安装flannel

    手动创建 kube flannel yml文件 span class token punctuation span root 64 k8smaster span class token punctuation span span class
  • 树莓派 VNC Viewer 远程桌面配置教程 及 显示 cannot currently show the desktop 的解决方法

    树莓派 VNC Viewer 远程桌面配置教程 在此之前你需要能够登录树莓派 xff0c 使用命令窗口对树莓派进行操控 下面的操作使用的是ssh对树莓派进行控制 启用VNC服务 打开终端 xff0c 进入配置界面 span class to
  • 分享几个找论文参考文献的网站

    1 库问搜索 打造免费开源文献资源共享平台 http www koovin com 2 论文驿站 免费中文文献库 xff0c 顶级论文数据库 xff0c 每天同步更新 https www lunwenyizhan com 3 中国知网 ht
  • 解决ubuntu全屏后分辨率低的问题

    Ubuntu 设置屏幕分辨率显示Unknown display 无法设置分辨率 解决方法 方法一 xff1a xff08 临时性 xff0c 重启会失效 xff09 使用xrandr命令调节分辨率 xff0c 带 号的为当前分辨率 xff0
  • ubuntu18.04安装WINEHQ时出现的问题:E: 文件 list 第 x 行的记录格式有误 /etc/apt/sources.list (Component) E: 无法读取源列表。

    ubuntu18 04安装WINEHQ时出现的问题 xff1a E 文件 list 第 x 行的记录格式有误 etc apt sources list Component E 无法读取源列表 详细安装过程可以参考 xff08 官网 xff0
  • Hexo系列——(一) Hexo的安装与使用

    目录 前言一 安装Node js和Git1 安装node js和npm xff0c npm是node js的包管理工具2 更新npm的镜像源 3 全局安装n管理器 用于管理node js 4 安装最新的node js xff08 stabl
  • 协方差和协方差矩阵的定义和理解

    先复习一下这个 xff1a 均值 标准差 方差 为什么需要协方差 xff1f 上面几个统计量看似已经描述的差不多了 xff0c 但我们应该注意到 xff0c 标准差和方差一般是用来描述一维数据的 xff0c 但现实生活我们常常遇到含有多维数
  • dockerfile 中运行 apt-get update 报错 returned a non-zero code: 100

    在 docker 中运行 apt get update 报错 returned a non zero code 100 出现问题 xff1a 在构建 docker 执行 Dockerfile 中的 RUN apt get update 时报
  • Opencv 实现简单UDP局域网实时摄像头传输 (一)

    做项目需要用到网络编程及摄像头捕捉 xff0c 经过简单学习完成一个简单的视频发送 发送端 sender cpp include 34 stdafx h 34 include 34 WinSock2 h 34 include lt open
  • 使用3D地面站(AcmeGCS)的编队飞行

    使用3D地面站 xff08 AcmeGCS xff09 的编队飞行 无人机编队飞行的方法有很多种 xff0c 本文演示一种使用PX4 43 3D地面站 AcmeGCS 43 ROS的多机控制方法 PX4提供了非常好的软件仿真环境 xff0c
  • PX4-1-开源飞控项目

    分享完工具系列 xff0c 我们开始PX4飞控技术的分享 xff0c 写分享相对于自己写笔记要难很多 xff0c 在整理自己笔记的过程中也重新思考很多问题 飞控技术的分享系列更多分享的是思路和框架 对于PX4这种大型开源项目 xff0c 源
  • PX4-3-uORB

    uORB Micro Object Request Broker 微对象请求代理器 是PX4中非常重要且关键的一个模块 xff0c 用于各个模块之间的数据交互 实际上uORB是一套跨 进程 的IPC通讯模块 在PX4中 xff0c 所有的功
  • PX4-5-SPI-IIC设备驱动

    在之前的分享中 xff0c 我们聊了PX4的通信框架和任务调度框架 xff0c 现在我们讲一下PX4的设备驱动 PX4支持很多种设备 xff0c 根据通信方式的不同大致分为 xff1a SPI IIC设备 串口设备 IO设备 CAN设备 这
  • PX4-6-串口设备驱动

    上一篇我们讲了PX4的SPI IIC设备驱动 xff0c 现在讲一下PX4的串口设备 PX4的串口设备驱动框架比SPI IIC设备简单不少 xff0c 使用了两种底层实现方式 xff1a 一种是系统自带的标准字符设备接口 xff0c 一种是
  • Uav开发杂记-4-无人机开发的C-C++

    无人机的软件开发主要使用C C 43 43 开发 xff0c APM和PX4的应用层开发更多的使用C 43 43 开发 作为叠代完善了非常多年的比较大型的开源飞控项目 xff0c 其代码框架对于刚开始接触的新手而言是比较复杂的 一些同学私信
  • AcmeIot-3-在嵌入式设备中运行ROS2

    ROS2是作为第二代ROS xff0c 对ROS1进行了重大的优化 xff0c 主要的特点有 xff1a 实现跨平台运行 xff0c 可以运行在Linux windows Mac RTOS xff0c 甚至没有操作系统的裸机 实现真正的分布