无题
01 介绍最为流行的两个开源 MQTT Broker:EMQX 和 Mosquitto
相较于Mosquitto,EMQX 最大的优点就是高性能。
[!quote] 摘自 EMQX vs MosquittoEMQX 采用 Erlang/OTP 编写,这是一种用于构建大规模可扩展软实时系统的编程语言。与 Mosquitto 不同,EMQX 在设计之初即采用了分布式集群架构,可以轻松实现弹性水平扩展,从而稳定承载大规模的 MQTT 客户端接入。最新版本 EMQX 5.0 可在 23 个节点的单集群中建立 1 亿个并发的 MQTT 连接。
EMQX 优点:
支持大规模部署
高可用性
横向可扩展性
高性能和高可靠
丰富的企业功能
率先采用 MQTT over QUIC
EMQX 缺点:
上手相对复杂
难以有效管理
02 docker-compose 配置1234567891011121314version: '3.5'services: emqx: image: emqx/emqx:5.6.1 container_name: emqx ...
【PlatformIO】`platformio.ini` 常用配置项
01 简介记录platform.ini 的常用配置,加速开发和学习。
02 常用配置项2.1板子信息123platform = espressif32board = esp32devframework = arduino
12# board info for ESP32-S3board = esp32-s3-devkitc-1
2.2 监听端口信息12# 监听窗口接受速率monitor_speed = 115200
2.3 CPU频率信息1board_build.f_cpu = 240000000L
03 MicroROS配置项3.1 依赖1lib_deps = https://github.com/micro-ROS/micro_ros_platformio
3.2 连接方式12345# by serialboard_microros_transport = wifi# by wifiboard_microros_transport = wifi
【PlatformIO】多版本main文件编译管理
01 简介在ESP32项目开发过程中,我们总会遇到管理多版本代码,或者需要一个test环境。
根据开发框架,main.cpp 文件在 src 文件夹中,最土的办法是通过修改注释、复制文件等操作管理不同的版本。但是这些方法十分繁琐,都很容易出错。
想要解决上面的问题,可以在 platformio.ini 中配置,构建多个main函数入口。
02 解决方法在 platformio.ini 中配置,示例如下:
1234567891011121314151617181920212223242526272829303132333435363738394041[env]platform = espressif32framework = arduinoboard = esp32-s3-devkitc-1lib_ignore = examplesmonitor_speed = 115200board_build.f_cpu = 240000000Lbuild_src_filter = +<*.h> -<.git/> -<.svn/> +<shared/& ...
无题
01 简介看示例代码的时候,发现总是出现rcl_ret_t rc,或是rc!=RCL_RET_OK,或是各种rc=...
赋值rc并比较 是为了检查return code。虽然使用 rc 只是一种习惯,并不是必要的,但是这可以在代码报错时帮助我们及时定位bug。
多数情况下,这是一个好习惯,但是别滥用~
02 示例2.1 声明数据类型rcl_ret_t,如下:
1rcl_ret_t rc;
2.2 场景1:初始化通常情况下,main函数起首定义四件套,rc、allocator、support、node
123456789101112131415161718192021222324int main(int argc, const char * argv[]){ rcl_ret_t rc; rcl_allocator_t allocator = rcl_get_default_allocator(); rclc_support_t support; // create init_options rc = rclc_support_init(&supp ...
【MicroROS手册03】入门:Executor
01 简介设问:Executor有什么作用?
Executor 负责管理节点(Node)中的回调函数,如订阅消息的回调、服务请求的回调、定时器回调等。Executor决定了何时以及如何执行这些回调,从而在ROS2系统中实现异步编程。
设问:MicroROS 中的 excutor (rclc Executor)和 ROS2 中的 excutor (rclcpp Executor)有什么异同?
rclc Executor 提供了一个 C API 来管理订阅和计时器回调的执行,类似于 C++ 的 rclcpp Executor。 rclc 执行器针对资源受限的设备进行了优化,并提供了额外的功能,允许手动实施具有有限端到端延迟的确定性计划。
[!quote] 摘自 Executor and timersThe rclc Executor provides a C API to manage the execution of subscription and timer callbacks, similar to the rclcpp Executor for C++. The rcl ...
【Learn CPP】宏
01 简介#define 命令是C语言中的一个宏定义命令,它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本。
02 一般形式
#define [标识符] [字符串] 这就是已经介绍过的定义符号常量。 如:#define PI 3.1415926
#define [宏名]([参数表]) [字符串] 还可以用#define命令定义带参数的宏定义。其定义的一般形式为: 如:#define S(a, b) a*b //定义宏S(矩形面积),a、b为宏的参数 但是,由于C++增加了内置函数(inline()),比用带参数的宏定义更方便,因此在C++中基本上已不再用#define命令定义宏了,主要用于条件编译中。
03 注意事项不要滥用宏!不要滥用宏!不要滥用宏!
3.1 宏替换发生的时机为了能够真正理解#define的作用,让我们来了解一下对C语言源程序的处理过程。当我们在一个集成的开发环境如Turbo C中将编写好的源程序进行编译时,实际经过了预处理、编译、汇编和连接几个过程。其中预处理器产生编译器的输出,它实现以下的功能:
文件包含 可以把源程序中 ...
【Learn CPP】printf 整理
01 简介02 printf()03 snprintf()snprintf() 函数 在 <stdio.h> 头文件中定义,用于以指定格式存储指定字符串直至指定长度。
1int snprintf(char * s, size_t n, const char *format, …);
[!quote]The snprintf() function is defined in the <stdio.h> header file and is used to store the specified string till a specified length in the specified format.Characteristics of snprintf() method:
The snprintf() function formats and stores a series of characters and values in the array buffer.
The snprintf() function accepts an argument ‘ ...
【MicroROS手册02】入门:节点 Node
01 简介MicroROS中的“节点”概念与ROS2相似。
ROS 2节点是 ROS 2生态系统的主要参与者。节点将使用 publishers, subscriptions, services 等相互沟通。
对于节点的操作主要有节点的初始化、节点的清除,以及节点的生命周期。
02 初始化Node2.1 默认方法在MicroROS中,创建Node有一套模板(默认配置),到手即用,在1.1.1中介绍。但是如果想要了解更多的细节(allocator和support),可以看1.1.2和1.1.3 。
创建默认配置的节点,如下:
12345678910111213141516171819202122// Initialize micro-ROS allocator// `allocator` 负责分配内存,也叫分配器rcl_allocator_t allocator = rcl_get_default_allocator();// Initialize support object// `support` 则是作为配置管理器来使用。rclc_support_t support;rcl_ret ...
【MicroROS手册01】简介
00 相关链接0.1 官方教程官方 Tutorial: https://micro.ros.org/docs/tutorials/core/overview/
【官方文档必须首推】很多视频教程模糊的地方,官方文档讲得很清楚。
官方文档的 Overview 中叙述了 Tutorial 的大纲:
First micro-ROS application on Linux / RTOS
Programming with rcl and rclc
Advanced Tutorials
第一部分,是入门,基本上可以通过网上的视频教程平替。在实际操作过程中,可以通过platformIO 几乎可以解决编译和烧录的所有问题。
第二部分,是核心,着重叙述了rcl和rclc的关系。rcl是ROS Client Library;rclc是micro-ROS C API。下面这段话很好的阐述了两者的关系。
[!quote] 摘自 Programming with rcl and rclc: OerviewIn this section, you’ll learn the basics of t ...
【ROS2】Zsh下使用ROS2的一些细节
在使用zsh时,会遇到 ros2:command not found 的问题。需要在 ~/.zshrc 的最后添加如下语句:
1source /opt/ros/humble/setup.zsh
此外,为了解决zsh下ros2命令无法自动补全的问题,我们需要在 /opt/ros/humble/setup.zsh 的末尾添加如下命令:
123# argcomplete for ros2 & colconeval "$(register-python-argcomplete3 ros2)"eval "$(register-python-argcomplete3 colcon)"

