STAN FU

Stan

通过WiFi将ESP32与ROS集成

将 ESP32 与 ROS 通过 WiFi 集成#

在这篇博客文章中,我将指导您如何使用 WiFi 将 ESP32 开发板连接到机器人操作系统(ROS)。这是一个适合初学者的指南,将带您了解如何使用 rosserial_arduino 库将 ESP32 与 ROS 集成,该库为 Arduino 开发板提供了 ROS 通信协议。

查看我的 GitHub。

https://github.com/Xiangyu-Fu/ESP32_ROS_wifi

先决条件#

在我们开始之前,请确保您拥有以下开发环境:

  • Ubuntu 20.04
  • ROS Noetic
  • PlatformIO espressif32
  • ESP32 Arduino 框架
  • frankjoshua/Rosserial Arduino 库 @^0.9.1

您也可以使用树莓派代替 PC。

环境设置#

在您自己的 PC 或树莓派上#

您需要安装所需的 ROS 软件包。在终端中使用以下命令:

$ sudo apt-get install ros-${ROS_DISTRO}-rosserial-arduino
$ sudo apt-get install ros-${ROS_DISTRO}-rosserial

安装必要的软件包后,启动 ROS 主节点:

$ roscore

然后,在一个新的终端窗口中,运行 rosserial 节点:

$ rosrun rosserial_python serial_node.py tcp

这将启动与我们的 ESP32 通过 TCP 连接的 ROS 节点。

在您的嵌入式设备上(这里是 ESP32)#

确保您已将适当的示例代码烧录到开发板上。您可以使用 PlatformIO 环境或 Arduino IDE 来完成此操作。

运行示例#

依赖项#

第一步是包含必要的库。这些是 Arduino 核心库、用于连接网络的 WiFi 库以及用于与 ROS 系统交互的 ROS 库。

#include <arduino.h>
#include "WiFi.h"
#include <ros.h>
#include <std_msgs/String.h>

我们定义几个全局变量:

  • Arduino 开发板和 ROS 服务器的 IP 地址。
  • ROS 服务器的服务器端口。
  • WiFi 网络的 SSID 和密码。
  • 我们将发送到 ROS 服务器的消息(“hello world!”)以及我们将发送的频率。
  • ROS 节点的句柄和用于向 ROS 系统发送消息的发布者。

连接到 WiFi#

我们的setupWiFi()函数将 Arduino 开发板连接到 WiFi 网络。它会重复检查连接状态,并在每次尝试时打印一个句号,直到连接建立。一旦连接成功,它会打印出 WiFi 连接的 SSID 和本地 IP 地址。

void setupWiFi()
{  
   WiFi.begin(ssid, password);
   while (WiFi.status() != WL_CONNECTED) { delay(500);Serial.print("."); }
   Serial.print("SSID: ");
   Serial.println(WiFi.SSID());
   Serial.print("IP:   ");
   Serial.println(WiFi.localIP());
}

主设置#

setup()函数中,我们初始化串行通信以进行调试,设置 WiFi 连接,建立与 ROS 服务器的连接,初始化 ROS 节点,并宣传发布者。

void setup(){
    Serial.begin(115200);
    setupWiFi();

    nh.getHardware()->setConnection(server, serverPort);
    nh.initNode();

    Serial.print("ROS IP = ");
    Serial.println(nh.getHardware()->getLocalIP());

    nh.advertise(chatter);
}

主循环#

在主loop()中,我们检查时间,如果自上次消息以来已经过去足够的时间,我们就发送一条新消息。我们还检查连接状态,并相应地在串行监视器中打印消息。在这些检查之后,我们调用nh.spinOnce()来处理任何传入的消息,然后延迟一毫秒。

void loop(){
  if(millis() - last_time >= period)
  {
    last_time = millis();
    if (nh.connected())
    {
      Serial.println("Connected");
      str_msg.data = hello;
      chatter.publish( &str_msg );
    } else {
      Serial.println("Not Connected");
    }
  }
  nh.spinOnce();
  delay(1);
}

就是这样!现在您可以开始使用 Arduino 通过 WiFi 与 ROS 进行交互。祝您编码愉快!

一旦您设置好一切,并且 ESP32 连接到与您的 PC 或树莓派相同的网络,ESP32 应该开始向 ROS 系统发送 “hello world!” 消息。您可以使用像 rqt_console 这样的工具可视化此输出,或者简单地在终端中监控输出。

如果一切设置正确,您应该会看到类似于以下的屏幕:

result

就是这样!您的 ESP32 现在已通过 WiFi 连接到 ROS。这个基本框架可以成为更复杂项目的基础,在这些项目中,ESP32 与 ROS 交互以控制机器人或其他设备。

最后思考#

我们刚刚走过了将 ESP32 通过 WiFi 连接到 ROS 的过程。虽然这个例子相对简单,但它为更复杂的项目提供了强大的基础。ROS 是一个强大的系统,用于控制和管理机器人,将其与灵活且强大的 ESP32 集成,打开了广泛的可能性。无论您是在构建无人机、移动机器人还是任何其他需要与 ROS 接口的设备,这个指南提供了您入门所需的基础。

所以现在轮到您了。祝您编码愉快!

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。