今回、インテル(R) Joule(TM) 570x 開発キット が届きました。
この製品の発表のときに「ロボティクスへの応用」を強調していましたが、これに本当に適しているのか?が気になりますよね。
なのでロボット用のミドルウェアROSを動かすところをレビューしたいと思います。
まずは準備
開封の儀とかは他のレビューでやっているようなので省略。
今回の目的のために用意したのは、こんなところです。
・RealSense SR300(ギリで手に入ったので調達しました!)
・microSDカード(とにかく早いやつ)
・マウス
・Autonomous DeepLearning Robot(TurtleBot)の代わり
Ubuntuのインストール
ROSを動かすには前提としてUbuntu(特にROSで一番使われているバージョンのIndigoを使うには14.04)を入れないと話になりません。
これができなければ、そもそもJouleはロボティクスの土俵にも乗らないと思います。
なので、Ubuntuをいれるところから(ここが超大変だったので、結果的にいちばん長くなってしまいました、、、)
UbuntuのLivd CD(インストール用のUSBメモリ入れるモード)の準備についてはこちらをみてください。
https://www.ubuntu.com/download/desktop/create-a-usb-stick-on-mac-osx
ここで気をつけないといけないのが、isoファイルによってJouleのLiveCDモードが動かないことです。
私はここの14.04.05というのを使いました。(RealSense Robotic Development Kitで当初使われていた14.04.04ではうまくブートできませんでした。日本版だとWiFiに繋ぐところでコケていました。。。)
さてインストール作業ですが、普通にさしてBIOSからUSBを選択してもLiveCDモードすら立ち上がりません。
どうやらブートローダーに制約があるようです。
https://communities.intel.com/thread/106120
先にUbuntuを載せるのに成功した方がブログ記事を作ってくれました(本当に感謝です)
http://takesan.hatenablog.com/entry/2016/11/03/234828
しかし、やはり個体差があるのか、ディレクトリとかに微妙に違いがあったので、私なりのやり方を書いておきますね。
まずF2でBIOSを立ち上げて「BootOption」にしてください。
起動する選択については「InternalShell」をつかってください。(常にこれじゃないと立ち上がらないのが本当につらいです。。。)
私の場合はFS0かFS1かFS2にUSBが検出されていたので、いっぱい出てきてFS*がいくつかわからなければmapコマンドを叩いてください。もう一度表示してくれます。
まずはfs0:(もしくはfs1:もしくはfs2:)のコマンドを叩きます。
(どれだかわからない場合はlsコマンドを打てばわかります。)
cd casper
でcasperディレクトリに移動して、以下のコマンドを叩きます。
vmlinuz.efi initrd=/casper/initrd.lz file=/cdrom/preseed/ubuntu.seed boot=casper quiet splash ---
※私はブートにあまり詳しくないので現段階でこれが意味するものはよくわからず。。。調べておきます)
するとこのようにLiveCDモードが立ち上がります。
次に使用するmicroSDカードをUSB3.0ハブ経由に指します(開発キットがデフォルトでもっているmicroSDポートには入れないでください。私はうまくいきませんでした)。
刺しましたらアプリケーションで gparted Editorというのがあるので、そちらを開きます。
これを見るとでわかるのがeMMcと思われる「*******」にefiというのがあることです。つまりブートはEFIでないとできないみたいで、いつもWindowsのデュアルブートするときに立ち上がるGRUB2ではできない。だから面倒なやり方で立ち上げないといけないようです。
(普通にやるとおそらくGRUB2を動かしに行くのでしょう。)
さて話は逸れましたが、SDカードを使えるようにします。
ext4フォーマットとfat16(32GBの場合はfat32でも大丈夫です)に分割します。
メインはext4なので領域は全体の9割以上私でも問題ないです。
fatはブード用なので500MBもあれば十分だと思います。(参考ブログにも書いて頂きました。)
私はSDカードはsddというところに認識していたのでext4の領域をsdd1にfat16(または32)の領域をsdd2にしました。
できましたらapplyします。
これでインストールするSDカードのフォーマットは完了です。
なのでデスクトップ上にあるインストーラーをダブルクリックしてインストールを開始しましょう。
(インストールする前にはかならずWiFiには繋いでおきましょう)
さてイントールですが、これもデフォルトとは異なるやり方でやりました(ここはRealSenseのRobotics Development KitのUP Boardで学んだので私はそんなに苦ではありませんでした。
日本語にしてあとでトラブっても面倒なのでとりあえず私はEnglish(US)設定で全部やっています。
まずは言語は「English」
Preparing to Install Ubuntuの画面ではなにもチェックせず
※ここで何を聞かれてもすべてYesと答えます。
Installation typeでは「Something Else」を選びます。
※ここでまともなことをやっていないのですよねw
次にインストールさせるパーテーションを選びます。
先程つくった「sdd1」(ext4)の領域を選びます。
ここで注意したいのはext4の領域マウントポイントを「/」に設定しないといけないので、sdd1を選んだらダブルクリックします。
Edit partationが出てきたらUse as:を「Ext4 journaling file system」にして、Mount Pointを「/」と入力します。そしたら「OK」
Device for boot loader installationを「/dev/sdd1」にしました(ここは適当にそうしました)。
でキーボードは「English(US)」> 「English(US)」にする。
Your name & User name & Passwordはすべて「ubuntu」(今はセキュリティなんぞ関係ない!)
でインストール開始。
USB3.0ハブ経由で、microSDもSanDiskのExtreme Proを使ったらメチャ早いです。ものの5分くらいでインストール完了!
(最初に格安のmicroSDでデフォルトのポートにインストールしたら朝までかかったのに、、、しかもブートできない状態で、、、)。
これで終わりではありません。まだやることはあります。
fatフォーマットのパーテーション(sdd2)をブート設定しないといけないことです。
基本的にはeMMcもfatのパーテーションも(sdd2)もext4のパーテーション(sdd1)もすべてマウントされている状態です(していなければ再起動でOKです)。これはcomputerの/mediaディレクトリにマウントされているのがわかります。マウントの名前はgpartedを見ればわかります。
さて、まずeMMcにある/bootディレクトリにあるEFIフォルダごとsdd2(fat)のパーテーションにコピーします。
そうするとsdd2のディレクトリ構成は
EFI
BOOT
になります。
こんどはEFIディレクトリ内に「ubuntu」というフォルダをつくってください。
なのでディレクトリ構成は
EFI
BOOT
ubuntu
になっています。
次にインストールされたファイルはすべてsdd1(ext4)にあるので、必要だと思われるファイルをsdd2のubuntuディレクトリに移します。
必要だと思われるファイルとはsdd1のboot以下のファイル全部です(とりあえずわからないのでw)
System.map-4.4.0-31-genericファイルはスーパーユーザーでないとコピーできないので、terminalでsudoを使いながらコピー操作したほうがよいでしょう。
最後に「vmlinuz-4.4.0-31generic」に.efi拡張子を足して「vmlinuz-4.4.0-31generic.efi」としましょう。リネームでできます。
これでUbuntu起動の準備は完了です。
しかし、これで普通に起動できると思ったら大間違いです。
基本的にはUbuntuの場合は、普通には起動できません。それを望むのであれば、正式リリースがでるのを待ちましょう。
基本的にはBIOS→Internal ShellIからの起動がデフォルトだと思ってください。
LiveCDモード立ち上げたときのようにBIOS>Boot Option>Internal Shellと続けます。
そしてfs0:かfs1:かfs2:でmicroSDのsdd2のディレクトリに入ります。
(このときLiveCD用のUSBメモリはすでに抜いています)
ls
して「EFI」が出てきたら成功です。
さらに「cd EFI/ubuntu」でubuntuディレクトリに移動して
vmlinuz-4.4.0-31generic.efi initrd=/EFI/ubuntu/initrd.img.-4.4.0-31generic root=/dev/sdd1 ro rootfstype=ext4
と打てば、、、
Ubuntuが起動します!
(sd*は環境によって違うので、「cd /dev」コマンドで確認してください。)
ここまででようやく環境準備が終了です。
まずはRealSenseを動かしてみる
さてさっそくRealSenseを動かしてみました。ここではR200とSR300を比較の意味とJouleがどこまで動くのか検証したくて両方用意しました。
作業はこんな感じ
パッケージの更新
sudo apt-get update
sudo apt-get upgrade
依存パッケージのインストール
sudo apt-get install libusb-1.0-0-dev
リポジトリのクローン
git clone https://github.com/IntelRealSense/librealsense.git
glfw3のインストール
cd librealsense
scripts/install_glfw3.sh
※Ubuntu14.04ではglfw3がapt-getのリポジトリからダウンロードができないためらしい。
makeしてインストール
make
sudo make install
この時点でRealSenseはまだ刺してはいけません。刺さっていたら抜いてください。
ドライバのロード
sudo modprobe uvcvideo
udevルールのコピーしてudevのリロード
sudo cp config/99-realsense-libusb.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules
udevadm trigger
ここまで完了したらRealSenseを刺してください。
さてサンプルでPointCloudを動かします。
bin/point-cloud
まずはR200でPointCloudを動かすとこんな感じでした。
次にSR300で動かします。
するとこんな感じで画面がゆれ、コアダンプしてしまい、そのまま落ちてしまいました、、、
(で、またInternal Shellから起動、、、)
しかし、Jouleのヒートシンクを触ってみるとメチャ熱くなっており、どうやら熱暴走したようです、、、なので扇風機を当てながら再開。
しかし、SR300は安定せず、、、
SR300はダメってことでしょうかね。
しかし、あとでもう一つのSDカード(少しスペックが下のやつ)でやったら普通に動くんですよね。
しかも背景除去がかなり精度がいい。
この差はなんなんでしょうね。。。
とりあえずここまでのまとめとして
・R200は普通に動く
・SR300だと熱暴走しやすい
・SR300も環境によっては動くときがある(しかし推奨環境ではないのは確か、、、)
ROSをインストールしてRealSenseを動かしてマッピング
さて今回のメインディッシュはROSを動かすということ、ここも以下のサイトをそのまま使えるので手順は割愛。
https://01.org/developerjourney/installing-ubutnu-1404-lts-intel-realsense-robotic-development-kit
まずは「r200_nodelet_default.launch」をroslaunchしてRvizで見てみました。
tfをつかいながらこんな感じでマッピングができました。
※注意点としては、RealSenseのRobotics Development KitのWebサイトではカラーでしたが、うまく色がでません。
最後にTurtlebotを動かしてみる
ROSにつながったということで何か動かさないといけません。
ということでTurtlebot(実際はAutonomous社のDeepLearningロボットというヤツですが)を動かしてみました。
構成はこんな感じです。
まずはTurttlebotの
ここについては以下のURLを参考にしています。なので手順はまったくこの通りやっているので割愛。(中身をたいして見ず、ひたすら書いてあるコマンドを叩きました)
http://wiki.ros.org/turtlebot/Tutorials/indigo/Turtlebot%20Installation
この辺はとくにつまずきませんでした。
さてTurtlebotの準備ができればいよいよ動かします。手順はこんな感じ
まず、コンピュータのクロックを、ネットワーク上の時刻に同期させるために、NTPクライアントのChronyをインストール
sudo apt-get install chrony
NTPを設定
sudo ntpdate ntp.ubuntu.com
次にTurtlebotとJouleを通信させます。
ifconfig
でJouleのIPアドレスを確認したら
echo export ROS_MASTER_URI=http://xxx.xxx.xxx.xxx:11311 >> ~/.bashrc
echo export ROS_HOSTNAME=xxx.xxx.xxx.xxx>> ~/.bashrc
これで動かす準備は完了です!
次に、Terminalでminimal.launchをroslaunchします。
roslaunch turtlebot_bringup minimal.launch
Ctrl+Tで新しい端末を立ち上げ、
roslaunch turtlebot_teleop keyboard_teleop.launch
するとこんな感じで操作できました!
自動追跡ロボットをつくってみる
今回の最終目標とするのが自動追跡ロボット。なので
「RealSense R200」「Kinect V1」「Xtion Pro Live」の3つでトライしてみました。
RealSense
インテル(R) Joule(TM) 570x 開発キットはは、USB3.0のポートを持っているので、USB3.0のハブを使えばそのままRealSenseも使えるのでいいですね
Kinect V1
次にKinect V1にトライしてみました。Kinect V1の面倒なのは入出力ポートと電源が分かれており、デフォルトだとコンセントに繋がないといけないので、このままでは使えません。Kobukiの12V1.5Aの口から電源を供給できるようにする必要があります。
しかし、このハウジングとターミナルが入手がこんなん、秋葉原のお店じゃ普通に売ってないし、まともにDigi-Keyなどのオンラインストアで探すとロットで購入する必要があります(送料も高いです)
ここはアールティさんでKobuki用のコネクタセットが売っているのでそれを買いましょう。
こんな感じでつくってみました。
さっそく挿して自律制御のプログラムを動かしてみました。
roslaunch turtlebot_follower follower.launch
しかし、動かない、、、
そうなんですよね。
Turtlebotで使うとき、Kinect V1はUSB2.0でないと動作しないとという問題がそもそもあり、使っている開発キットのUSBポートは3.0。
なので、USB3.0のポートにUSB2.0のハブを挿してみました。USB2.0を使えば、それ以上のスピーードがでないということで。
でもダメでした、、、
それではと、もう一つC-typeでUSB2.0の口があるので、ここに変換ケーブルを使ってみましたが、、、
やっぱりダメでした。。。
もっと使えないのには根本的な理由があるんですかね。
Xtion Pro Live
それでも、追跡ロボットは諦められない!残った手段はXtion Pro Live。
そもそもAutonomous DeepLearning RobotにはXtion Pro Liveがセットで付いてきます。これは電源供給も同じUSBからしてくれるので、Kinect V1みたいに電源口をつくる必要がありません。
しかし、やはりこれもデフォルトはUSB2.0で動作。。。
でもネットでいろいろ調べてみると、
Firmwareを書き換えるとUSB3.0に対応するみたい。
さっそくやってみると、これでなんとかFirmwareは書き換えることができました。
で、これで動かしてみると。
無事Jouleをメインのコンピューティングボードにして、自動制御のロボットができました!
でもやっぱり、RealSenseでやってみたいですね。RealSenseはToF形式なので、KinectV1はXtionのOpenNIとは違うので、そこからちょっと調べないといけないのかなあ。
Jouleパワーはすばらしい。しかし、まだまだソフトおよびキャリアボードで改善が必要
最後にJouleをこんな感じで使ってみましたが、感想としては以下の感じです。
長所として
・RealSenseがSR300に耐えられることもあるのでかなりパワーがある
・USB3.0を使えば、かなり外部装置とのやりとりがはやい。
欠点としては
・一方でキャリアボードのポートが少ない。
・USB3.0しか役に立たない。2.0のポートが動かない(ブートしてからでないと使えない)
・なんたって正式にUbuntuに対応していない
モジュールのパワーとしてはあれだけ小さいのにコンピュータービジョンにも耐えられるので、ロボットや組み込みとしてはいまのところ十分なチカラをもっていると思います(あと20,000円くらいは安くしてほしいですが、、)。まあ産業用としてはツライでしょうが、、、
一方でキャリアボード
あと、Ostroはスペックに対しては意味がないので、変えたほうがいいと思います。あれって、Curieくらいのパワーが弱いもの向けではないのでは^ ^;
なにはともあれ、もっと開発を進めて自動制御ロボットくらいまでを目指したいですね。
ZIGSOWにログインするとコメントやこのアイテムを持っているユーザー全員に質問できます。