2017年8月9日水曜日

Raspberry PiとROSでロボット製作(概要)

ROSについて

Raspberry Piは強力なツールです。これを使うことで今までのマイコンでは扱うのが難しかったカメラや無線LANをロボットで簡単に使うことが出来ます。またROSを使うことでプログラムをモジュール化できるので、プログラムの再利用性が格段と上がります。
個人的にはROSの利点として以下の点をあげます。
  1. プログラム間の通信部分が規格化されている
    例えば(1)ジョイスティックの入力を読んで、それをもとに(2)タイヤの回転量を決めて、(3)タイヤを制御するというプログラムを書くとします。普通は(1)、(2)、(3)を1つのソースコードで記述して、その間の通信は自分で作ったデータ型を使うでしょう。
    これでは例えば(1)のジョイスティックをキーボード入力に変えようとすると、ソースコードを地道に直さなければなりません。
    しかしROSではジョイスティックのデータ型等のロボットで使われそうなものはすべて定義されていて、またプログラム間での通信の方法が規格化されています。そのために3つのプログラムを個々のノードに分離でき、前のような状況でもノードを置き換えることで実現できます。
  2. PC間接続が簡単にできる
    例えばロボットのWEBカメラの画像をコントローラーのPCで見たい時には、わざわざMJPEGのストリーマーを起動させる必要があったり、ラジコン化させようとしたときにはコマンドを送るソケット通信をわざわざ書く必要があります。しかしROSではそのようなことをする必要はありません。上記のプログラム間接続の規格というのは実はTCP/IP通信です。同じPCの中でもTCP/IP通信をしているのです。そのために同じPCで(1)WEBカメラの画像を取り込むプログラムと(2)画像を表示するプログラムの2つを使ってWEBカメラの画像を表示するのと同じように、(1)がロボットPCで起動していて、(2)がコントローラーPCで起動することが出来ます。
  3. 座標の管理が簡単にできる
    ROSにはtfという座標管理システムがあります。これを使うことでバグの多い座標管理を簡単に行えます。
  4. 公開されているパッケージが多い
    例えばWEBカメラの画像を取り込むソフトも十分にありますし、ロボットで使うそうなセンサーに対応するプログラムは大体あるみたいです。
  5. Launchファイルでプログラムを改変できる
    通常ロボットのプログラムに変更を加える場合はソースを編集してビルドする必要がありますが、それとは別にLaunchという起動スクリプトでパラメーターを変更することが出来ます。例えば移動速度をいくつかのパターンで試したいときにソースではスクリプトから変数を取得するようにします。そして起動スクリプトで変数をしていして起動します。この方式ではビルドすることなくプログラムを変更することが出来ます。
 さあここまで良いことを書いてきましたがROSにも欠点があります。
  1. インストールが面倒
    ROSを使うハードルが高いと言われる最大の原因です。ROSは複雑な移動関係を持つのでインストール時にトラブルが発生しやすいです。
  2. (特に駆動系統の)ハードウェアを自作する必要がある
    これはROSの問題というよりもロボット開発における問題ですが、現在IoTなどが流行っていてUSB接続できるセンサー等が増えています。しかし流通している大体のセンサーはSPIやI2C等の接続の物です。これらはArduinoでは簡単に使えるのですが、PCで使うのには工夫が必要です。またモータードライバも同様でUSB接続の物の無いことは無いのですが産業用で高価であり、これもPCとつなぐには間の通信する部分をArduinoなどで作る必要があります。
このような欠点がありますが、Raspberry Piを使えば、皆が同じハードウェアを使い、空の状態からインストールするので、インストール手順は皆同じになります。またハードウェアについては今後私オリジナルのハードウェアを順次公開していくつもりです。これは多脚歩行ロボットSRS002等で使われたもので、シリアルポート経由でサーボモーターやDCモーターを駆動できるシステムです。是非ROSでロボットを製作しましょう。

Ros on Raspberry Pi

ここからやっとRaspberry Piの話に入ります。Raspberry PiでROSを使う方法はいろいろあります。
  • Raspbianを使う(Raspberry Pi2、Raspberry Pi3)
    Raspbianは標準のOSですがROSをapt-getすることが出来ません。apt-getはdebian系のOSでプログラムを自動でタウンロードできる便器な機能ですが、何故かROSではできません。そのためにソースをgitからダウンロードして、ビルドする必要があります。また追加のパッケージもapt-getできなく、別途gitからソースをダウンロードしなくてはならないのですが、この辺りは慣れた人でも大変らしいです。
  • Ubuntu16を使う(Raspberry Pi2)
    Raspberry Pi2用のイメージデータがあります。これを使うと普通のデスクトップでROSを使うのと同じように使えます。しかしRaspberry Pi3用のイメージは無く、無理やり2用の物を入れても3の特徴であるWiFiを使うことは面倒です。
  • Ubuntu mate16をつかう(Raspberry Pi3)
    Ubuntu mateはデスクトップ環境にmateを使ったUbuntu派生ディストリビューションでUbuntuより軽量らしいです。Raspberyy Pi3用のUbuntu mate16イメージが公開されているので、Raspberry Pi3を使うならこれがベストです。また中身はUbuntuと変わらないので、apt-getでのインストールなどUbuntuと同じように使うことが出来ます。
ROSにもバージョンがいくつかあり、今では1年に1回更新されています。Ubuntu14に対応しているのがindigo、16がkineticというのを覚えておけば良いでしょう。

0 件のコメント:

コメントを投稿