ArduinoをROSで動かす
OSでArduinoを動かす第一歩として書きました。
ROSでArduinoを動かす基礎になりますが、応用もできるようになるはずです。
環境
ROS kinetic
Ubuntu 16.04.4
ThinkPad X1 Carbon 2017
Arduino Uno
サーボモータSG90
セットアップ
2018年5月現在最新のバージョンは1.8.5です。リンク
Arduino-1.8.5-linux64.tar.xzのダウンロードが始まります。ダウンロード容量は99MBぐらいあります。
ダウンロードが完了したら解凍します。解凍はArduino-1.8.5-linux64.tar.xzのアイコンを右クリックして、ここに展開(Extract Here)を実行してもいいですし、端末で下記を実行することでも解凍可能です。
$ xz -dc arduino-1.8.5-linux64.tar.xz | tar xfv -
解凍がおわったら、端末で下記のコマンドを実行し、arduino-1.8.5のフォルダーを/opt下に移動しておきます。
*もしうまくいかなかったらchmod +x install.shを実行したあとに./install.shを実行してみてください。
インストールが終わったらPCとArduino UnoをUSBで接続します。
$ ls /dev/ |grep ttyACM*
ttyACM0
rosserial_arduinoをインストール
$ sudo apt-get install ros-kinetic-rosserial-arduino ros-kinetic-rosserial
上記を実行すると 実行したルート下にschetchbookというフォルダーが生成されその下にROS_libがあります。
File -> Preferences -> Sketchbook location に先ほど生成したschetchbookのpathを通します。私の場合は下記です。
/home/username/sketchbook
これで完了です。
File -> Examples -> ros_libがあればokです。
サーボモータGS90をサクッと動かす
まずハードウェア構成です。
SG90の3本線は下記のようにArduinoとワイヤーで接続してください。
オレンジの信号線はサンプルコードの都合上Pin9に接続してください。
ソフトウェアの設定によってはdigitalピンであればどれでもかまいません。
ソフトウェアの用意
File -> Sketchbook -> libraries -> ros_libの中にServoControlにサンプルコードがあるので開き、Arduinoに送信します。
プログラムの実行
端末を開き、Arduinoに権限を与えます。*AMC0でない場合もあります。
$ sudo chmod 666 /dev/ttyACM0
端末をもう一つ開いてroscoreを実行しておく
$ roscore
最初に開いた端末に戻って下記のコマンドを実行 *ACM0出ない場合もあります。
rosrun rosserial_python serial_node.py _port:=/dev/ttyACM0
Arduinoに送信したサンプルコードをちょっとみてみると"servo"というtopic名でUInt16型のmessageをtopicで受けとり、その値をservo.writeの引数に渡し、サーボを動かしています。
ros::Subscriber<std_msgs::UInt16>sub("servo",servo_cb);
servo.write(cmd_msg.data) //サーボの角度 0 - 180
ではさらにもう一つ端末を開き、servo topicにUInt16型で0°を送ってみます。0の箇所は角度なので0 - 180まで入力可能です。
$ rostopic pub -1 /servo std_msgs/UInt16 0
サーボが動くことが確認できましたでしょうか?
ネコのたわごと
環境構築は最初にして最大の難関です!環境構築で挫折してしまうことが多いので、導入をわかりやすく誰にでもできることを考えて書いています。部分的な解決策ではなく環境構築からその先のサーボモータを動かすところまでカバーできるように書きました。参考にしていただけたら幸いです。Arduino + ROSはとても相性がいいと感じました。私が学生時代のころArduinoが登場しましたが、そのときはROSとの連携など考えもしませんでしたが、今ではライブラリが充実しています。センサーを実装するところはArduinoのライブラリにあったりするので、それをROS対応にするだけなのでお手軽に開発できてしまいます。
ただいまGW中、田舎に帰省し田舎過ぎてやることが何もないので開発がはかどりました。いいねとおもったらスターつけていただけると今後の継続とやる気につながります!
参考文献
下記のサイト参考にさせていただきました。ありがとうございます。