ROS의 rosserial을 사용하여 M5stack과 wifi 통신으로 L 치카

목적



ROS의 rosserial을 사용하여 M5stack에서 L 치카를한다.
ROS에는 arduino와 통신하는 패키지 rosserial-arduino가 준비되어 있지만, 이것은 M5stack에서도 사용할 수 있으며 ROS 노드화할 수 있다. rosserial-arduino는, USB로의 시리얼 통신뿐만 아니라, wifi에서의 통신에도 대응하고 있다.

환경



Ubuntu-14.04.1(x64)
ROS:Indigo

설치



ROS의 rosserial을 사용하여 M5stack과 USB 통신하여 L 치카 를 참조해 환경 정비한다.

Arduino에 쓰기



ArduinoIDE에 다음 소스를 붙여넣고,
「스케치」→「검증·컴파일」→「마이컴 보드에 기입한다」

Arduino 구현



ros의 NodeHandle을 NodeHandle_ 형으로 선언한다.
그 이외는 USB 통신과 다르지 않다.

test.ino
#include <M5Stack.h>
#include <ros.h>
#include <std_msgs/Empty.h>
#include <WiFi.h>
const char* ssid = "*****";
const char* password = "*****";

WiFiClient client;
IPAddress server(192, 168, 10, 100); //ROS core IP adress
TFT_eSprite img = TFT_eSprite(&M5.Lcd);

class WiFiHardware {
  public:
    WiFiHardware() {};
    void init() {
      client.connect(server, 11411);   
    }
    int read() {
      return client.read();      
    }
    void write(uint8_t* data, int length) {
      for (int i = 0; i < length; i++)
        client.write(data[i]);
    }
    unsigned long time() {
      return millis(); // easy; did this one for you
    }
};
ros::NodeHandle_<WiFiHardware> nh;
void messageCb( const std_msgs::Empty& toggle_msg) {
  img.fillSprite(TFT_GREEN);
  img.pushSprite(0, 0);
  Serial.println("messageCb");
  delay(500);
}
ros::Subscriber<std_msgs::Empty> sub("toggle_led", &messageCb );
void setupWiFi() {
  WiFi.begin(ssid, password);
  Serial.print("\nConnecting to "); Serial.println(ssid);
  uint8_t i = 0;
  while (WiFi.status() != WL_CONNECTED && i++ < 20) delay(500);
  if (i == 21) {
    Serial.print("Could not connect to"); Serial.println(ssid);
    while (1) delay(500);
  }
  Serial.print("Ready! Use ");
  Serial.print(WiFi.localIP());
  Serial.println(" to access client");
}
void setup() {
  Serial.begin(115200);
  M5.begin();
  setupWiFi();
  M5.Lcd.fillScreen(TFT_BLUE);
  img.setColorDepth(8);
  img.createSprite(320, 240);
  img.fillSprite(TFT_BLACK);
  nh.initNode();
  nh.subscribe(sub);
}
void loop() {
  img.fillSprite(TFT_BLACK);
  img.pushSprite(0, 0);
  nh.spinOnce();
  M5.update();
}



아래 명령으로 ROS를 시작하고 rostopic으로 "toggle_led"를 게시합니다. 「toggle_led」를 받으면, M5Stack는 디스플레이로 L치카를 실시한다.
roscore
rosrun rosserial_python serial_node.py tcp

M5Stack의 전원을 켜십시오.
rostopic pub toggle_led std_msgs/Empty --once



참고



rosserial_arduino Tutorials
h tp // 우우키. 로 s. 오 rg / 로세리 아 l_ 아 r 즈이 / 츠 토리아 ls
ROS serial for ESP8266 over WiFi:
htps : // 기주 b. 코 m / 아 g 누네 · 에스 로스

좋은 웹페이지 즐겨찾기