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 Library@^0.9.1

您也可以使用 Raspberry Pi 代替 PC。

環境設置#

在您的 PC 或 Raspberry Pi 上#

您需要安裝所需的 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 或 Raspberry Pi 相同的網絡,ESP32 應該開始向 ROS 系統發送 "hello world!" 消息。您可以使用 rqt_console 等工具可視化此輸出,或簡單地在終端中監控輸出。

如果一切設置正確,您應該會看到類似以下的畫面:

result

就這樣!您的 ESP32 現在已經通過 WiFi 連接到 ROS。這個基本框架可以成為更複雜項目的基礎,其中 ESP32 與 ROS 互動以控制機器人或其他設備。

最後的想法#

我們剛剛走過了將 ESP32 通過 WiFi 連接到 ROS 的過程。雖然這個示例相對簡單,但它為更複雜的項目提供了一個強大的基礎。ROS 是一個強大的系統,用於控制和管理機器人,將其與靈活且強大的 ESP32 整合開啟了廣泛的可能性。無論您是在構建無人機、移動機器人還是任何其他需要與 ROS 介面的設備,本指南提供了您開始所需的基本知識。

所以現在輪到您了。祝您編程愉快!

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。