##目的
ROSのrosserialを使ってArduinoでLチカをする。
ROSには、arduinoと通信を行うパッケージros-indigo-rosserial-arduinoが用意されており、
これでArduinoを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
ArduinoIDEをインストールする。
以下のページから、ArduinoIDEのLinux版をダウンロードして回答する。
https://www.arduino.cc/en/main/software
そして、Arduinoのライブラリにros_libを追加する。
ros_libはArduinoのlibrariesフォルダでmake_libraries.pyを実行することでインストールできる
ArduinoIDEのスケッチ→ライブラリをインクルード→ros_libがあればOK。
cd
mkdir dev
wget https://downloads.arduino.cc/arduino-1.8.5-linux64.tar.xz
tar Jxfv arduino-1.8.5-linux64.tar.xz
cd arduino-1.8.5/libraries/
rosrun rosserial_arduino make_libraries.py .
cd ..
./arduino
##デバイスファイルの設定
PCとArduinoをUSBで接続すると、/dev/ttyACM*のバイスファイルが生成される。
デバイスファイルに書き込み権限をつける。
ttyACM0の場合
sudo chmod 666 /dev/ttyACM0
##Lチカのテスト
ArduinoのDigital-11番ピンにLEDの足の長い端子を、GNDに足の短い端子を接続する。
ArduinoIDEで下記のソースを貼り付けて、
「スケッチ」→「検証・コンパイル」→「マイコンボードに書き込む」
11番ピンにつけたLEDがチカチカできていることを確認する。
test.ino
void setup() {
pinMode(11, OUTPUT); //A0
}
void loop() {
digitalWrite(11,HIGH);
delay(100);
digitalWrite(11,LOW);
delay(100);
}
##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」を受けとると、arduinoはLチカを行う。
roscore
rosrun rosserial_python serial_node.py /dev/ttyUSB0
rostopic pub toggle_led std_msgs/Empty --once
##参考