##目的
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からインストールする。
##デバイスファイルの設定
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