ESP32中micro-ROS与ROS2通信(点亮esp32指示灯)

news2025/1/16 1:43:55

前言

micro-ROS,是基于ROS2进行优化的一套轻量级ROS系统,它提供了完全部署的ROS 2生态系统的大多数吸引人的工具和功能,并具有入式和低资源设备的卓越能力,可以运行在MCU硬件平台。

传统上,即使机器人包含许多ROS,ROS仍停留在微控制器边界。它们通常通过串行协议与旧版ROS中的ROS-serial之类的工具集成在一起。

micro-ROS不仅仅在机器人领域可以使用,也可以拓展到物联网领域。最重要的是micro-ROS可以将机器人的生态与mcu微控制器的生态融合在一起。本篇将给大家演示如何用microROS点亮esp32指示灯。极客玩家可以拓展的接几个继电器和灯,在家里使用。

演示环境

MCU:ESP-WROOM-32

ROS2DDS代理端:WSL2-Ubuntu22.04(可以换成虚拟机或实体机) #需安装 ROS2及MicroXRCEAgent

编程环境:Arduino IDE 2.0.3 (需安装micro_ros_arduino库)

具体步骤

首先需要找一根走数据的数据线电脑串口连接到esp32上,打开Arduino IDE,选择对应开发板串口等信息,刷入以下程序到开发板:

#include <micro_ros_arduino.h>

#include <stdio.h>
#include <rcl/rcl.h>
#include <rcl/error_handling.h>
#include <rclc/rclc.h>
#include <rclc/executor.h>

#include <std_msgs/msg/int32.h>

rcl_subscription_t subscriber;
std_msgs__msg__Int32 msg;
rclc_executor_t executor;
rclc_support_t support;
rcl_allocator_t allocator;
rcl_node_t node;
rcl_timer_t timer;
//这里的引脚需要和你所使用的开发板的LED灯GPIO引脚对应
#define LED_PIN 2

#define RCCHECK(fn) { rcl_ret_t temp_rc = fn; if((temp_rc != RCL_RET_OK)){error_loop();}}
#define RCSOFTCHECK(fn) { rcl_ret_t temp_rc = fn; if((temp_rc != RCL_RET_OK)){}}


void error_loop(){
  while(1){
    digitalWrite(LED_PIN, !digitalRead(LED_PIN));
    delay(100);
  }
}

void subscription_callback(const void * msgin)
{  
  const std_msgs__msg__Int32 * msg = (const std_msgs__msg__Int32 *)msgin;
  digitalWrite(LED_PIN, (msg->data == 0) ? LOW : HIGH);  
}

void setup() {
  //这里我们使用默认串口通信
  //也可以使用wifi 
  //set_microros_wifi_transports("WIFI SSID", "WIFI PASS", "代理IP", 代理端口);
  set_microros_transports();
  
  pinMode(LED_PIN, OUTPUT);
  digitalWrite(LED_PIN, HIGH);  
  
  delay(2000);

  allocator = rcl_get_default_allocator();

  //create init_options
  RCCHECK(rclc_support_init(&support, 0, NULL, &allocator));

  // create node
  RCCHECK(rclc_node_init_default(&node, "micro_ros_arduino_node", "", &support));

  // create subscriber
  RCCHECK(rclc_subscription_init_default(
    &subscriber,
    &node,
    ROSIDL_GET_MSG_TYPE_SUPPORT(std_msgs, msg, Int32),
    "micro_ros_arduino_subscriber"));

  // create executor
  RCCHECK(rclc_executor_init(&executor, &support.context, 1, &allocator));
  RCCHECK(rclc_executor_add_subscription(&executor, &subscriber, &msg, &subscription_callback, ON_NEW_DATA));
}

void loop() {
  delay(100);
  RCCHECK(rclc_executor_spin_some(&executor, RCL_MS_TO_NS(100)));
}

刷入程序一段时间后会发现开发板的灯不断闪烁,这是因为还没有连接到ROS2代理端。
接下来打开WSL2终端,再打开一个powershell,将串口设备挂到WSL中。
在这里插入图片描述

#windows需要下载usbipd 将设备挂入wsl
usbipd wsl list
usbipd wsl attach --busid 1-1

在WSL中发现设备后,给予权限。

sudo chmod 777 /dev/ttyUSB0

启动Micro-XRCE-DDS-Agent。

#需要指定设备串口号和波特率
#MicroXRCEAgent自行百度安装
sudo MicroXRCEAgent serial --dev /dev/ttyUSB0 -b 115200

在这里插入图片描述
这个时候按一下esp32上的复位键,看到出现以下内容及连接成功。
在这里插入图片描述
查看microROS节点接入。

ros2 topic list

在这里插入图片描述
这时候发现esp32开发板指示灯常亮。
查看上面节点信息:

ros2 topic info /micro_ros_arduino_subscriber

在这里插入图片描述
发布以下内容小灯关闭。

ros2 topic pub /micro_ros_arduino_subscriber std_msgs/msg/Int32 "{data: 0}"

在这里插入图片描述

发布以下内容小灯打开。

ros2 topic pub /micro_ros_arduino_subscriber std_msgs/msg/Int32 "{data: 1}"

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

视频号直播间首次突破1万人

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 12月21直播结束后&#xff0c;看了下直播数据&#xff0c;竟然有100多人在线时长达到了1小时以上。看来直播间用户的粘性越来越强了&#xff0c;固定用户越来越多。个人做直播已经2年了&#xff0c…

聚观早报 | 马斯克或将卸任推特CEO;小米内部人士回应年底裁员

今日要闻&#xff1a;马斯克或将卸任推特CEO&#xff1b;小米内部人士回应年底裁员&#xff1b;微软或将于明年收购Netflix&#xff1b;奥迪正逐步淘汰燃油车&#xff1b;支付宝开通健康防疫专区马斯克或将卸任推特CEO 自今年 10 月份入主推特以来&#xff0c;马斯克一系列大刀…

[洛谷]【深基16.例3】二叉树深度

一、题目描述 题目描述 有一个 n(n≤106)n(n \le 10^6)n(n≤106) 个结点的二叉树。给出每个结点的两个子结点编号&#xff08;均不超过 nnn&#xff09;&#xff0c;建立一棵二叉树&#xff08;根节点的编号为 111&#xff09;&#xff0c;如果是叶子结点&#xff0c;则输入 …

实测 | 海纳百川,华为OceanStor Pacific分布式存储为多元算力应用带来更优选择...

被称为开眼看世界的林则徐&#xff0c;在自己的书房中写了这样一副对联&#xff0c;以做自勉&#xff1a;海纳百川&#xff0c;有容乃大&#xff0c;壁立千仞&#xff0c;无欲则刚。包容的胸怀是我们做成很多事情的根基&#xff0c;也是一项产业战略、科技事业发展的关键。近几…

数据开源 | Magic Data开源基于ChatGPT的可扩展的对话数据集

在过去的一月里&#xff0c;人工智能领域中最火的话题莫过"ChatGPT"。ChatGPT是OpenAI于11月30日发布最新作品聊天机器人&#xff0c;开放公众免费测试。聊天机器人是一种软件应用程序&#xff0c;根据用户的提问做出回应、模仿人类的对话方式。目前&#xff0c;Chat…

做好程序中的axios错误提示

今天外包组的项目客户反馈老是出错&#xff0c;一看页面卡在加载数据过程中&#xff0c;前后台分离之后&#xff0c;页面变得很奇怪&#xff0c;脸面都出来了&#xff0c;就是没有具体值。 初级程序员在很长一段时间要经历一个升级过程&#xff0c;写的程序首先是写画面&#…

散户如何进行开展量化股票交易的?

散户如何进行开展量化股票交易的&#xff1f;也就是投资者交易的条件&#xff0c;达到了投资者设定的条件时候&#xff0c;系统接口就会自动交易&#xff0c;下面来看看具体的流程&#xff1a; 依据个股的历史记录&#xff0c;进行多因子选股&#xff0c;比如&#xff0c;把市…

Rasa 基于知识库的问答 音乐百科机器人

文章目录1. 使用 ActionQueryKnowledgeBase创建知识库NLU数据2. 音乐机器人nlu.ymlstories.ymlrules.ymldomain.ymlconfig.ymlendpoints.ymldata.json自定义动作 actions.py测试使用Neo4jlearn from https://github.com/Chinese-NLP-book/rasa_chinese_book_code 机器人返回了…

从“小螺栓血案”谈装配体模型连接螺栓6个正确的处理方法

经调查发现&#xff1a;“江苏启安建设工程有限公司提供了支吊架膨胀螺栓计算书&#xff0c;但计算书上无企业相关人员签字&#xff0c;未经监理单位审核同意&#xff0c;未报施工总包单位&#xff0c;未经设计单位审定&#xff1b;计算书认为支吊架应采用直径为12mm 的膨胀螺栓…

成为全栈程序员太难了?这个低代码高效率的报表工具绝对不能错过

现在程序员有个很奇怪的归宿&#xff0c;就是都在主动或被动地成为全栈程序员。前端被要求写后端的代码&#xff0c;后端被要求能看懂前端&#xff0c;美名其曰加速成长或为老板省钱&#xff01; 但一个人能做到全栈真的很难&#xff01;就拿报表开发而言&#xff0c;学习整个…

朴素贝叶斯

概要 前文介绍了贝叶斯公式基础以及在统计领域的基本应用贝叶斯基础_zhanglehes的博客-CSDN博客&#xff0c;本文将介绍它的一种新的转换形式&#xff0c;以及在机器分类领域的应用。 分类的数学描述 朴素贝叶斯公式推理 贝叶斯公式 在分类领域&#xff0c;将其改写如下 我们…

在conda虚拟环境中安装OpenCv并在pycharm中使用

目录 一. 在下面的网站中下载OpenCV文件 二. 在虚拟环境中使用pip安装该文件 三、官网下载OpenCV源代码&#xff08;后续使用&#xff09; 四、pycharm中打开该虚拟环境 五、安装numpy和matplotlib 六、pycharm找不到cv2模块解决&#xff1a; 七、在pyhcharm中使用cv不自…

在服务器安装jupyter并在本地访问

一、安装 1.1安装jupyter notebook pip install jupyter1.2安装jupyter lab pip install jupyterlab # 中文界面包 pip install jupyterlab-language-pack-zh-CN二、本地使用 我们在远程登录Linux服务器时&#xff0c;经常希望在本地浏览器端打开jupyter notebook&#xff…

需求的收集,筛选和排序

对需求的把握是否准确&#xff0c;很大程度上决定了产品的成与败&#xff0c;需求分析对于产品经理是必须要掌握的技能&#xff0c;接下来聊下需求收集的目标和方式。 一、收集渠道&#xff1a; 1、用户反馈&#xff1a; 用户提出的反馈有可能也是我们没有意识到的问题&#…

SMT工厂及PCB工程师的福音!可视化BOM交互焊接工具来了

目前电子产品已经渗透到我们生活的各个角落&#xff0c;其产品涵盖通信、医疗、计算机及周边视听产品、玩具、家用电器、军工用品等。关于电子产品的PCBA焊接&#xff0c;在试样阶段一般采用手工焊接。手工焊接的好处是成本低&#xff0c;一把电络铁就搞定了&#xff0c;如果样…

记一次简单的白加黑测试

前一阵子成了小洋人&#xff0c;所以很长的时间也没更新了&#xff0c;今天更一篇PHP代码审计的吧&#xff0c;此次分享的内容十分的简单&#xff0c;大家简单的看看即可 命令注入 -1 从上述代码&#xff0c;我们可以看出来&#xff0c;$ip变量接收过来之后通过合并运算符(??…

【OpenCV-Python】教程:7-3 理解KMeans

OpenCV Python KMeans 的理解 【目标】 理解KMeans聚类的基础概念KMeans是如何工作的&#xff0c; 【理论】 Tshirt尺寸问题 有个公司&#xff0c;打算投放一批T-shirt到市场上售卖&#xff0c;但是不知道人们需要什么样的尺寸&#xff0c;而且工厂也不会制作所有的尺寸样…

联想C2E摄像头的折腾

背景 老苏的巨峰摄像头坏了&#xff0c;一直也没在意&#xff0c;因为监控也不是什么刚需。朋友送的&#xff0c;比较古老&#xff0c;不像现在的家用监控摄像头&#xff0c;都有 app&#xff0c;而这台巨峰摄像头不光不支持 app&#xff0c;后台设置还只能用 IE&#xff0c;因…

OLSR路由协议学习

OLSR路由协议概述两种分组路由发现与维护算法步骤链路感知邻居侦听MPR选择拓扑建立路由表的建立与维护总结概述 优化链路状态路由&#xff08;Optimized Link State Routing&#xff09;协议&#xff0c;即 OLSR 路由协议是一种平面拓扑的先验式路由协议&#xff08;主动式路由…

使用mosquitto部署MQTT服务

本次实验使用版本&#xff1a;mosquitto-1.6.7 查看版本命令&#xff1a;mosquitto -v 1安装 make && make install&#xff0c;安装mosquitto。 安装完毕后放开防火墙 查看防火墙某个端口是否开放 firewall-cmd --query-port1883/tcp 开放防火墙端口80 firewall-…