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

news/2024/11/22 13:13:03/

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

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

http://www.ppmy.cn/news/1549040.html

相关文章

系统思考—结构影响行为

过去的成功&#xff0c;是实力&#xff0c;还是“电梯效应”&#xff1f; 在经济高速发展的那些年&#xff0c;就像站在一部一直上升的电梯里&#xff0c;数字不断跳动&#xff0c;仿佛一切尽在掌握。但当电梯停下&#xff0c;你继续沿用过去的方法&#xff0c;甚至更拼、更卷…

PW系列工控电脑复制机:效率与精度双重提升

工控电脑复制应用&#xff1a;效率与精度的双重提升 随着现代企业对大数据、数据备份、和跨平台兼容性需求的快速增长&#xff0c;工控电脑已成为数据密集型产业的核心设备。针对工控环境中大量数据复制的特殊需求&#xff0c;PW系列NVMe/SATA PCIe SSD复制机&#xff08;如PW…

NuGet如何支持HTTP源

今天是2024年11月21号&#xff0c;最近更新了VisualStudio后发现HTTP的包源已经默认禁止使用了&#xff0c;生成时会直接报错。如下图&#xff1a; 官方也明确指出了要想使用HTTP包源的解决办法&#xff0c;这里就简单总结一下。 一、全局配置 1、全局NuGet包的配置文件路径在…

富格林:安全指正规防欺诈套路

富格林指出&#xff0c;在现货黄金投资操作中&#xff0c;有众多的投资技巧和投资方式&#xff0c;但其实并不是所有的都适用。投资者应该注意选择安全、可信的投资方式去规防欺诈套路。值得提醒的是&#xff0c;现货黄金虽然拥有很多获利的机会&#xff0c;但也有不少欺诈套路…

DAY3 多进程并发通讯

服务器代码&#xff1a; #include <myhead.h> #define IP "192.168.128.59" #define PORT 8888 #define BACKLOG 20 void fun(int sss) {if(sssSIGCHLD){while(waitpid(-1,NULL,0)>0);} } int main(int argc, const char *argv[]) {if(signal(SIGCHLD,fun)…

在Ubuntu 24.04 LTS上安装飞桨PaddleX

前面我们介绍了《在Windows用远程桌面访问Ubuntu 24.04.1 LTS》本文接着介绍安装飞桨PaddleX。 PaddleX 3.0 是基于飞桨框架构建的一站式全流程开发工具&#xff0c;它集成了众多开箱即用的预训练模型&#xff0c;可以实现模型从训练到推理的全流程开发&#xff0c;支持国内外多…

高级爬虫——数据清洗与处理

数据清洗是数据处理和分析过程中极其重要的一环。爬取的原始数据往往会包含噪声、不完整性、不一致性等问题&#xff0c;因此清洗和规范化数据是获得高质量数据集的必要步骤。本节将详细介绍 Pandas 库的基本使用 和 数据清洗的常用操作&#xff0c;结合代码实例&#xff0c;为…

字符串学习篇-java

API&#xff1a;应用程序编程接口。 ctrlaltv,自动生成一个变量接收数据 字符串&#xff1a; 注意点 创建string对象两种方式 1.直接赋值 2.构造器来创建 详情看黑马JAVA入门学习笔记7-CSDN博客 常用方法&#xff1a;比较 引用数据类型&#xff0c;比较的是地址值。 b…