Help us understand the problem. What is going on with this article?

ROSのrosserialを使ってArduinoでLチカをする

More than 3 years have passed since last update.

目的

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に足の短い端子を接続する。

IMAGE.jpg

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

参考

http://wiki.ros.org/rosserial_arduino/Tutorials

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away