LoginSignup
4
5

More than 5 years have passed since last update.

ROSのrosserialを使って、M5stackとUSB通信してLチカする

Last updated at Posted at 2018-06-10

目的

ROSのrosserialを使ってM5stackでLチカをする。
ROSには、arduinoと通信を行うパッケージros-indigo-rosserial-arduinoが用意されているが、これはM5stackでも使うことが出来、ROSノード化することができる。

環境

Ubuntu-14.04.1(x64)
ROS:Indigo

インストール

rosserialとrosserial-arduinoをapt-getでインストールする。

ROS Indigoの場合

 sudo apt-get install ros-indigo-rosserial-arduino
 sudo apt-get install ros-indigo-rosserial

ROS kineticの場合

 sudo apt-get install ros-kinetic-rosserial-arduino
 sudo apt-get install ros-kinetic-rosserial

ArduinoIDE+espressif+M5stacklibをインストールする。

Ubuntuで始めるM5stack
を参考にして、ArduinoIDEとespressifとM5stackライブラリをインストールする。

ArduinoIDEにros_libを入れる。

ArduinoIDEのスケッチ→ライブラリをインクルード→ros_libからインストールする。

img.jpg

デバイスファイルの設定

PCとM5StackをUSBで接続すると、/dev/ttyUSB*のバイスファイルが生成される。
デバイスファイルに書き込み権限をつける。

ttyACM0の場合

sudo chmod 666 /dev/ttyUSB0

Lチカのテスト

ArduinoIDEに下記のソースを貼り付けて、
「スケッチ」→「検証・コンパイル」→「マイコンボードに書き込む」

test.ino

#include <M5Stack.h>
#include <ros.h>
#include <std_msgs/Empty.h>

TFT_eSprite img = TFT_eSprite(&M5.Lcd);
ros::NodeHandle nh;

void messageCb( const std_msgs::Empty& toggle_msg) {
  img.fillSprite(TFT_GREEN);
  img.pushSprite(0, 0);
  delay(500);
}
ros::Subscriber<std_msgs::Empty> sub("toggle_led", &messageCb );

void setup() {
  M5.begin();
  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からのTopicをSubscribeしてLチカのテスト

ArduinoIDEで下記のソースを貼り付けて、
「スケッチ」→「検証・コンパイル」→「マイコンボードに書き込む」

test_L_tika.ino


#include <ros.h>
#include <std_msgs/Empty.h>

ros::NodeHandle nh;

void messageCb( const std_msgs::Empty& toggle_msg) {
  digitalWrite(11, HIGH);
  delay(100);
  digitalWrite(11, LOW);
  delay(100);
}

ros::Subscriber<std_msgs::Empty> sub("toggle_led", &messageCb );

void setup(){
  pinMode(11, OUTPUT);
  digitalWrite(11, HIGH); 
  nh.initNode();
  nh.subscribe(sub);
}

void loop(){
  nh.spinOnce();
  delay(1);
}

下記のコマンドで、ROSを立ち上げ、rostopicで「toggle_led」をpublishする。
「toggle_led」を受けとると、M5StackはディスプレイでLチカを行う。

roscore
rosrun rosserial_python serial_node.py _port:=/dev/ttyUSB0 _baud:=115200
rostopic pub toggle_led std_msgs/Empty --once

参考

rosserial_arduino Tutorials
http://wiki.ros.org/rosserial_arduino/Tutorials
ROS serial for ESP8266 over WiFi:
https://github.com/agnunez/espros

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5