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下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
相关文章:
ROSSERIAL与Arduino IDE交叉开发(UBUNTU环境,包含ESP32、arduino nano)
ROSSERIAL与Arduino IDE交叉开发 一、简介二、安装1、Ubuntu下的Arduino IDE安装 **针对ESP32报错问题原因溯源和修改**三、运行结点 一、简介 这个教程展示在ubuntu环境下如何利用Arduino IDE配合rosserial开发机器人部件。通过Arduino IDErosserial实现arduino/esp32开发板通…...
爬虫开发工具与环境搭建——使用Postman和浏览器开发者工具
第三节:使用Postman和浏览器开发者工具 在网络爬虫开发过程中,我们经常需要对HTTP请求进行测试、分析和调试。Postman和浏览器开发者工具(特别是Network面板和Console面板)是两种最常用的工具,能够帮助开发者有效地捕…...
ceph 18.2.4二次开发,docker镜像制作
编译环境要求 #需要ubuntu 22.04版本 参考https://docs.ceph.com/en/reef/start/os-recommendations/ #磁盘空间最好大于200GB #内存如果小于100GB 会有OOM的情况发生,需要重跑 目前遇到内存占用最高为92GB替换阿里云ubuntu 22.04源 将下面内容写入/etc/apt/sources.list 文件…...
游戏引擎学习第19天
介绍 这段内容描述了开发者在进行游戏开发时,对于音频同步和平台层的理解和调整的过程。以下是更详细的复述: 开发者表达了他希望今天继续进行的工作内容。他提到,昨天他讲解了一些关于音频的内容,今天他想稍微深入讲解一下他正…...
简单实现vue2响应式原理
vue2 在实现响应式时,是根据 object.defineProperty() 这个实现的,vue3 是通过 Proxy 对象实现,但是实现思路是差不多的,响应式其实就是让 函数和数据产生关联,在我们对数据进行修改的时候,可以执行相关的副…...
TypeScript 中扩展现有模块的用法
declare module 是 TypeScript 中用于扩展现有模块的特性。它允许开发者在已有模块的基础上,添加新的功能(比如扩展接口、添加类型声明等)。通过 declare module,可以将额外的声明合并到原模块中。以下是用法详解: 用…...