ArduinoとROSを繋ぐ

Arduino IDEのダウンロード

$ tar Jxfv arduino-1.8.9-linux64.tar.xz
$ cd arduino-1.8.9
$ ./install.sh
  • シリアルポートのアクセス許可
$ ls -l /dev/ttyACM0
$ sudo usermod -a -G dialout `whoami`

rosserialのAruduino用ライブラリをインストール

$ sudo apt install ros-melodic-rosserial ros-melodic-rosserial-arduino
$ rosrun rosserial_arduino make_libraries.py ~/arduino-1.8.9/libraries/

サンプルプログラムの実行

新規ファイルから以下のコードをコピペして,ボードに書き込む.

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

//PWM
const int PWM1 = 10;
const int PWM2 = 11;

//ノードハンドルの宣言
ros::NodeHandle nh;

void messageCb(const std_msgs::Int32& toggle_msg){
    analogWrite(PWM1, toggle_msg.data);  
}

// トピック名をtoggle_ledとしてSubscriberをインスタンス化し、messageCbを呼び出す
ros::Subscriber<std_msgs::Int32> sub("toggle_led", &messageCb );

void setup()
{ 
  nh.initNode();
  nh.subscribe(sub);

  pinMode(PWM1, OUTPUT);
  pinMode(PWM2, OUTPUT);
}

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

ターミナルで以下のコマンドを実行すると数字(ここでは255)に応じたPWMが生成される.

$ roscore
$ rosrun rosserial_pyhton serial_node.py /dev/ttyACM0
$ rostopic pub toggle_led std_msgs/Int32 255 --once