记笔者自己连上ros的经历:
第一步,在linux上配置arduino ide:
在arduino官网下载linux对应版本,比如笔者下的是压缩包形式:
接着就是解压后直接运行其中的arduino-ide文件:
./arduino-ide
注意不要不要关闭终端,这时终端和ide一起运行。
这时我们还要下载ESP32开发板的包,导入rosserial_arduino库:
这里加入开发板管理器地址:https://dl.espressif.com/dl/package_esp32_index.json
这里搜索rosserial_arduino库安装
这里搜索esp32开发板安装
第二步,改arduino例程:
笔者这里使用的是这个例程:
这个例程中将wifi名称和密码改成你的网络(手机热点),这里注意虚拟机的网络要改为桥接模式才能让虚拟机和主机在一个局域网下(?我也不知道原理,欢迎大佬解答)
IP地址和端口为你的linux虚拟机IP和ros端口,IP可以使用ip addr指令查询,一般是ens33下面的ip,端口可以使用后面配置好的rosserial软件包中的指令来查询
rosrun rosserial_python serial_node.py tcp
改完后编译烧录就好。
第三步:安装rosserial软件包:
sudo apt-get install ros-${ROS_DISTRO}-rosserial-arduino
sudo apt-get install ros-${ROS_DISTRO}-rosserial
其中${ROS_DISTRO}替换为你的ros版本
第四步:编写一个测试节点来订阅ESP32发布的话题:
我的代码为:
#include "ros/ros.h"
#include <std_msgs/String.h>
void chatterCallback(std_msgs::String msg)
{
printf(msg.data.c_str());
printf("\n");
}
int main(int argc, char *argv[])
{
ros::init(argc,argv,"test_node");
ros::NodeHandle nh;
ros::Subscriber sub = nh.subscribe("chatter", 10, chatterCallback);
while(ros::ok())
ros::spinOnce();
return 0;
}
至于如何建立节点或者编译,大家可以看b站up主:机器人工匠阿杰,我认为他讲的很生动形象,十分好懂,编译后就可以进行最后一步啦。
第五步:展示成果:
首先运行ros
roscore
接着使用指令等待ESP32连接:
rosrun rosserial_python serial_node.py tcp
连接上后使用指令查看我们的ESP32话题
rostopic list
同时运行我们刚刚的测试节点
rosrun test_pkg test_node
最后就可以看到hello world啦!
PS:有没有大佬知道如何用esp-idf连接上ros,真的不太想用arduino进行开发
参考文献: