前期准备:
此过程是在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
找到这段,将第一行改为注释内容
重新烧录并测试,一般来讲就差不多了