ROSSERIAL与Arduino IDE交叉开发(UBUNTU环境,包含ESP32、arduino nano)

ROSSERIAL与Arduino IDE交叉开发

    • 一、简介
    • 二、安装
      • 1、Ubuntu下的Arduino IDE安装
  • **针对ESP32报错问题原因溯源和修改**
    • 三、运行结点

一、简介

这个教程展示在ubuntu环境下如何利用Arduino IDE配合rosserial开发机器人部件。通过Arduino IDE+rosserial实现arduino/esp32开发板通过串口跟PC Master进行ros通信,从而开发自己的机器人智能硬件。

二、安装

1、Ubuntu下的Arduino IDE安装

  • 安装Arduino
sudo apt-get install arduino

启动arduino并进行相关设置, 完成后增加sketchbook/libraries目录等

arduino 

如果安装失败,可以考虑通过Ubuntu software可视化界面安装,安装形式为snap。
ubuntu software

  • Ubuntu下rosserial arduino软件安装
sudo apt-get install ros-{$ROS_DISTRO}-rosserial
sudo apt-get install ros-{$ROS_DISTRO}-rosserial-arduino
rospack profile
  • 安装ros_lib到Arduino IDE开发环境

rosserial-arduino安装后,可以使用ros命令在本地生成arduino ide使用的ros_lib通讯库。
通常会生成ros_lib目录,将其复制到Arduino的开发环境。一般为Arduino库目录sketchbook/libraries。snap安装的Arduino IDE目录在~/snap/arduino/85/Arduino/libraries

cd Arduino/libraries/

rm -rf ros_lib #如之前有,可以先删除

rosrun rosserial_arduino make_libraries.py .
  • 检查ros_lib是否安装成功
    重启Arduino IDE,查看Sketch->includeLibrary查看是否存在ros_lib选项。可以通过File->Examples->Examples from custom libraries-> ros_lib-> HelloWorld开启演示项目
/*
 * rosserial Publisher Example
 * Prints "hello world!"
 */

#include <ros.h>
#include <std_msgs/String.h>

ros::NodeHandle  nh;

std_msgs::String str_msg;
ros::Publisher chatter("chatter", &str_msg);

char hello[13] = "hello world!";

void setup()
{
  nh.initNode();
  nh.advertise(chatter);
}

void loop()
{
  str_msg.data = hello;
  chatter.publish( &str_msg );
  nh.spinOnce();
  delay(1000);
}

arduino ide编译后上传到开发板

针对ESP32报错问题原因溯源和修改

报错内容:

assert failed: tcpip_send_msg_wait_sem IDF/components/lwip/lwip/src/api/tcpip.c:455 (Invalid mbox)

该问题原因在于。在ros.h中ArduinoTcpHardware.h文件内定义了ArduinoHardware类,而ArduinoHardware.h也有一个ArduinoHardware类这就是问题来源。使用esp32时会定义ESP32宏,并调用ArduinoTcpHardware.h,使用WIFI通讯。而rosserial主要通过串口通信。解决办法就是修改ros.h,让程序调用使用串口的ArduinoHardware的class。注释掉//ArduinoTcpHardware.h,并include< ArduinoHardware.h>

//文件路径 ~/snap/arduino/85/Arduino/libraries/ros_lib/ros.h

#ifndef _ROS_H_
#define _ROS_H_

#include "ros/node_handle.h"

#if defined(ESP8266) or defined(ESP32) or defined(ROSSERIAL_ARDUINO_TCP)
  #include "ArduinoHardware.h"
  //注释原有头文件ArduinoTcpHardware
  //#include "ArduinoTcpHardware.h"
#else
  #include "ArduinoHardware.h"
#endif

修改后编译和烧录均成功,且串口不再显示报错信息。

三、运行结点

连接单片机设备

命令行1:运行roscore:

roscore

命令行2:运行结点(串口设备文件为/dev/ttyUSB0, esp32和arduino均可):

rosrun rosserial_python serial_node.py /dev/ttyUSB0

命令行3:查看话题消息:

$ rostopic list
/chatter
/diagnostics
/rosout
/rosout_agg
$ rostopic echo /chatter
data: "hello world!"
---
data: "hello world!"
---
data: "hello world!"
---
^C

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

word-毕业论文的每一章节的页眉单独设置为该章的题目怎么设置

在Microsoft Word中&#xff0c;为毕业论文的每个章节设置不同的页眉&#xff0c;通常需要使用“分节符”来分隔各个章节&#xff0c;然后在每个章节中单独设置页眉。以下是详细步骤&#xff1a; 使用分节符 插入分节符&#xff1a; 将光标放在每个章节的末尾&#xff08;注意…

Flutter:SlideTransition位移动画,Interval动画延迟

配置vsync&#xff0c;需要实现一下with SingleTickerProviderStateMixinclass _MyHomePageState extends State<MyHomePage> with SingleTickerProviderStateMixin{// 定义 AnimationControllerlate AnimationController _controller;overridevoid initState() {super.…

H.265流媒体播放器EasyPlayer.js网页全终端安防视频流媒体播放器可以播放本地视频吗

H.264/H.265播放器EasyPlayer.js主要用于在网页上实现视频播放功能&#xff0c;特别是针对RTSP流的播放。它允许开发者在不需要安装额外插件或软件的情况下&#xff0c;直接在网页中嵌入和播放来自监控摄像头或其他RTSP源的视频流。 可以播放本地视频吗&#xff1f; 回答&…

Linux: 任务的定时与延期

概述 ls 这种命令是立刻执行的命令&#xff0c;在linux中命令还可以延时执行&#xff0c;它们都涉及到时间的观念 常用命令 先来看下有关系统时间的规格 1 &#xff09; date 命令调节时间 $ date 显示当前时间还可以去定制 date 的一个输出, $ man date 可自定义输出 $ d…

RBAC——基于角色的访问控制

目录 一、RBAC核心概念 1. 角色&#xff08;Role&#xff09; 2. 用户&#xff08;User&#xff09; 3. 权限&#xff08;Permission&#xff09; 4. 会话&#xff08;Session&#xff09; 二、RBAC模型的演进 1. RBAC0&#xff1a;基本模型 2. RBAC1&#xff1a;角色…

OceanBase V4.x应用实践:如何排查表被锁问题

DBA在日常工作中常常会面临以下两种常见情况&#xff1a; 业务人员会提出问题&#xff1a;“表被锁了&#xff0c;导致业务受阻&#xff0c;请帮忙解决。” 业务人员还会反馈&#xff1a;“某个程序通常几秒内就能执行完毕&#xff0c;但现在却运行了好几分钟&#xff0c;不清楚…

同三维T80003JEHS 4K/60帧HDMI/SDI超高清H.265解码器

1路HDMI和1路SDI输出&#xff0c;1路3.5音频输入和1路3.5音频输出&#xff0c;1个USB2.0口1个USB3.0口&#xff0c;带1个RS232串口&#xff0c;2个网口&#xff0c;支持1路4K60或4路4K30或16路1080P或32路720P解码输出。4种画面分割显示模式。 产品简介&#xff1a; 同三维T80…

【更新中】《硬件架构的艺术》笔记(五):低功耗设计

介绍 能量以热量形式消耗&#xff0c;温度升高芯片失效率也会增加&#xff0c;增加散热片或风扇会增加整体重量和成本&#xff0c;在SoC级别对功耗进行控制就可以减少甚至可能消除掉这些开支&#xff0c;产品也更小更便宜更可靠。本章描述了减少动态功耗和静态功耗的各种技术。…

网络安全审计概述与分类

目录 网络安全审计概述等保五个级别对审计要求网络安全审计系统组成网络安全审计系统类型 网络安全审计概述 4A分别是认证、授权、账号、审计 网络安全审计是指对网络信息系统的安全相关活动信息进行获取、记录、存储分析和利用的工作。 网络安全审计的作用在于建立“事后”…

安宝特方案 | AR助力紧急救援,科技守卫生命每一刻!

在生死时速的紧急救援战场上&#xff0c;每一秒都至关重要&#xff01;随着科技的发展&#xff0c;增强现实&#xff08;AR&#xff09;技术正在逐步渗透到医疗健康领域&#xff0c;改变着传统的医疗服务模式。 安宝特AR远程协助解决方案&#xff0c;凭借其先进的技术支持和创新…

IDEA:2023版远程服务器debug

很简单&#xff0c;但是很多文档没有写清楚&#xff0c;wocao 一、首先新建一个远程jvm 二、配置 三、把上面的参数复制出来 -agentlib:jdwptransportdt_socket,servery,suspendn,address5005 四、然后把这串代码放到服务器中&#xff08;这里的0.0.0.0意思是所有IP都能访问&a…

Midjourney基础命令和提示词

1 基础命令 1.1 /imagine prompt 生成图片的核心命令&#xff0c;prompt 后输入描述。 /imagine prompt: A majestic dragon flying over a misty mountain, cinematic lighting, 4K resolution 高级提示 1.1.1 基本参数 图片比例 --ar 图片比例 混乱 Aspect Ratios --…

ElasticSearch7.x入门教程之索引概念和基础操作(三)

文章目录 前言一、索引基本概念二、索引基本使用elasticsearch-head插件Kibana使用 总结 前言 要想熟悉使用ES的索引&#xff0c;则必须理解索引相关的概念&#xff0c;尤其是在工作当中。 在此记录&#xff0c;方便开展工作。 一、索引基本概念 尽量以通俗的话语。 1、集群…

【SQL50】day 2

目录 1.每位经理的下属员工数量 2.员工的直属部门 3.判断三角形 4.上级经理已离职的公司员工 5.换座位 6.电影评分 7.修复表中的名字 8.患某种疾病的患者 9.删除重复的电子邮箱 1.每位经理的下属员工数量 # Write your MySQL query statement below #e1是经理&#xff0c;…

基于 RocketMQ 实现 AMQP 协议实践

导语 在Apache CoC 2024 杭州站大会中&#xff0c;腾讯云高级工程师张乐为与会者带来了精彩的演讲。围绕《基于 RocketMQ 底座实现 AMQP 协议》的背景、目标、方案设计以及几个核心技术实现做了详细的阐述。 作者简介 张乐 腾讯高级工程师&#xff0c;负责腾讯云 RabbitMQ S…

python成绩分级 2024年6月python二级真题 青少年编程电子学会编程等级考试python二级真题解析

目录 python成绩分级 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序代码 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python成绩分级 2024年6月 python编程等级考试二级编程题 一、题目要求 …

我做了一份斯坦福CS229吴恩达机器学习笔记

吴恩达教授的机器学习课程&#xff0c;可以说是AI领域的一块金字招牌。这门在斯坦福大学开设的课程&#xff0c;历经十余年&#xff0c;依旧是机器学习入门的经典之作。 记得当年&#xff0c;这门课火爆到吴恩达教授不得不将其搬到线上&#xff0c;结果不仅在斯坦福&#xff0c…

ABAP开发学习——SNRO

SAP凭证号码的指定分为外部给号和内部给号。 Internal number range即内部给号,指系统根据预先维护好的号码范围&#xff08;只能是阿拉伯数字&#xff09;依序给号,给出已有数字的下一个编号。 External number range即外部给号,后台配置时指指定一个号码范围&#xff08;可以…

SpringBoot3整合Hutool-captcha实现图形验证码

文章目录 验证码需求分析:项目创建import方式的使用说明exclude方式定义接口:接口定义定义 CaptchaController前端代码在整合技术框架的时候,想找一个图形验证码相关的框架,看到很多验证码不在更新了或者是在中央仓库下载不下来,还需要多引入依赖。后面看到了Hutool **图形…