ESP8266与ROS话题通讯(利用Arduino)

前期准备:

此过程是在ubuntu 18.04下实现,高于此版本可能在某些位置需要一些调整
安装Arduino:可直接软件管理搜索安装,简单好用(不要安装arduino自带的rosserial库)
安装esp8266开发板(选用2.7.4版本,3版本需要python3.7以上)

一、安装ros_lib

ros_lib是第三方库,功能和rosserial库一样。但后者只支持arduino那一系列产品,前者同时也支持esp8266和esp32

安装rosserial工具

sudo apt-get install ros-melodic-rosserial-arduino
sudo apt-get install ros-melodic-rosserial
rospack profile

构建ros_lib库文件夹

首先需要先进入arduino的library文件夹下(先别关,后面可能会用):打开首选项,设置的第一条项目文件夹位置在这里插入图片描述
打开终端输入:

rosrun rosserial_arduino make_libraries.py .

如果之前安装过arduino自带的rosserial库,也会出现在这里删除即可。该库的存在对esp8266没有影响,但如果用arduino系列会报错。

接下来写入通讯测试程序:

#include <ESP8266WiFi.h>
#include <ros.h>
#include <std_msgs/String.h>
#include <std_msgs/Int16.h>
#include <std_msgs/Float64.h>
 
ros::NodeHandle nh;
int led;
 
void messageCb(const std_msgs::Int16& msg) {
  if (msg.data > 0) {
    led = abs(msg.data);
    digitalWrite(led, HIGH - digitalRead(led)); // blink the led
  }
}
 
std_msgs::String str_msg;
ros::Publisher chatter("chatter", &str_msg);
ros::Subscriber<std_msgs::Int16> sub("led", &messageCb);
 
char hello[15] = "ESP8266 alive!";
 
void setup()
{
  pinMode(2, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
  pinMode(15, OUTPUT);
  nh.initNode();
  nh.advertise(chatter);
  nh.subscribe(sub);
}
 
void loop()
{
  str_msg.data = hello;
  chatter.publish( &str_msg );
  nh.spinOnce();
  delay(1000);
}

在终端输入:USB0是端口号。根据自己的修改,一般是USB0或者ACM0

rosrun rosserial_arduino serial_node.py _port:=/dev/ttyUSB0

如果能通,那大差不差了。如果通不了就要注意下面这步啦
进入刚刚没关掉的library文件夹进入ros_lib中,打开ros.h

#if defined(ESP8266) or defined(ESP32) or defined(ROSSERIAL_ARDUINO_TCP)
//#if defined(ROSSERIAL_ARDUINO_TCP)
  #include "ArduinoTcpHardware.h"
#else
  #include "ArduinoHardware.h"
#endif

找到这段,将第一行改为注释内容
重新烧录并测试,一般来讲就差不多了

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值