ROSを用いて自動運転ロボットを作る [序章]

久々の投稿になります。突然になりますが、ここ最近、とあるきっかけで自律移動・自動運転の技術に興味をもっていろいろと調べたりしています。そして、これをDIYで製作してみようと思いましたので、その記録をここに書いておこうと思います。

まずは何となく理解したこの分野のあらましから。大学院の専門などではないので間違いがあったらご指摘いただければ幸いです。というか、ROSまでたどり着けませんでした。

世間的にも、自動車の自動運転が何かと話題になってきていますが、意外とその技術的な内容は知られていないように思います。自動運転車の話題は世間的には最近の人工知能ブームに乗って出てきたようにも見えますが、実は10年以上も前から研究されている技術です。また、最近のブームは主にDeep Learningによる画像認識・自然言語処理などの技術を皮切りに始まっているように思いますが、自動運転の基礎技術はこれらとは全く別の、確率論をベースとしたアルゴリズムとなっています。

この分野の基礎技術が、Probablistic Robotics(邦訳:確率ロボティクス)という本にまとめられています。著者はSebastian Thrunというスタンフォード大学の教授で、移動ロボット分野の権威であり後にGoogle自動運転車プロジェクトのリーダーを務めた方です。

この本はかなり分量もあり数学ベースの理論もかなりあるため、読み切るのはなかなか大変そうです。私もまだ途中です。ここでは、勉強の経過なども書いていけたらと思っています。

自律移動ロボから自動運転車へ

さて、上で自動運転車の技術が昔から研究されてきたと書きましたが、最初から全て自動車において研究されてきたわけではないようです。現在の自動運転車の技術分野が生まれてくる以前に、「自律移動ロボット」という一大研究分野がありました。自律移動ロボットというと概念としては広そうですが、レーザーレンジセンサ(LIDAR)と左右2つの駆動輪を備え、マップ作成と自己位置推定、経路計画といった手順で目標位置までの移動を行うロボットを指すことが多いようです。初期の研究として以下のようなものがあります。

Minerva's Image

[Carnegie Mellon’s Robotic Tourguide Project, http://www.cs.cmu.edu/afs/cs/Web/People/minerva/]

カーネギーメロン大学の博物館で案内役を行うロボットだったようです。この実験が行われたのが1999年とのことで、かなり私たちの感覚より早くから研究が行われていたかがわかると思います。この研究を行っていたのがまさにSebastian Thrunで、後にGoogle自動運転車プロジェクトの初代リーダーを務めています。このことからも、自動運転車の技術が自律移動ロボットの技術の発展であるということがわかると思います。

誰でも自律移動ロボを作れる時代に!

さて、そこからもう少し時代が進み、2000年代後半に、ある密かなブームが起こりました。それはiRobot社がロボット掃除機・Roombaを発売したことと、Microsoft社がゲーム向けデバイスとしてKinectを発売したことによります。Roombaはともかく、Kinectは一般人より研究者が大喜びだったなどと言われていました。

それは何故でしょうか。まずKinectは、それまでにないほど安価に深度データやモーションキャプチャを行えるセンサとして使うことができたからです。これまで、上記の移動ロボのように深度データを取得するにはLIDARが一般的でしたが、これは2017年現在の低性能なラインナップでも10万円くらいする高価なセンサです。また、人間の骨格の動きを測定する専用のモーションキャプチャシステムなどはいくらするか想像もつきません。しかし、これらがKinectの登場により1万円程度で誰でもできるようになってしまったのです。これによって、趣味人やお金のない研究室などで大ブームとなりました。

もう一つはRoombaです。これはKinectほどのインパクトではないかもしれませんが、実は、安価な車輪ロボとして都合が良いものだったのです。車輪ロボで自律移動を行おうとした場合、左右それぞれのモータの速度を外部から制御できることと、エンコーダ値(車輪の実際の回転数=移動距離)を取得できることが必要となります。ですので、ミニ四駆やラジコンのようなシステムでは不十分ということになります。速度制御とエンコーダ搭載は、自作もできないことはないですが、メカや電子回路、マイコンなどの知識が必要となり、ちゃんと使えるものを作るにはそれなりに骨の折れる作業でした。しかし、Roombaは一般向け製品でありながら、外部からシリアル通信で速度制御ができ、エンコーダを搭載し、さらに(実は)強度や搬送可能重量もそこそこあるという、数万円で手に入る立派な車輪ロボだったのです。

Roombaの一般向け製品の多くが実は隠しシリアルポートを備えています。研究目的やDIYへの配慮の姿勢がさすがシリコンバレー企業という感じでしょうか。

これらKinectとRoomba、さらに制御を行うためのノートPCや流行りの高機能CPUボード(Raspberry Piなど)を組み合わせれば、立派な移動ロボが作れてしまいます。中古などを上手く使えば、1万円以下でもできるかもしれません。後は、ソフトです。ソフトも、オープンソースコミュニティの発達によって、自律走行のための高度なソフトを無料で手に入れることができます。腕があれば自分で全て作ることもできます。PC内で動くソフトの開発も面白いですが、上記のようにセンサとアクチュエータをつけることで実世界に飛び出すことができます!DIYで何でもできる面白い時代だと思います。

それでは、次回から実際の製作に入っていきたいと思います!

SHARP Mebius PC-XG70J を入手!

最近、とあるきっかけで古いノートPCを入手しました。シャープのノートPC、Mebius PC-XG70Jというものです。シャープは古くから(Windows 95以前から)PCを製造していましたが、2009年を最後に撤退してしまっていますので、今となってはそこそこレアということになります。

DCIM0102

どうやら壊れているらしいのですが、外装はキレイです。ACアダプタは調達中ですのでまだ動作確認・修理はできていません。しかし、外観を見るだけでもなかなかに面白く、よく出来た製品だと思ったので、レビューしてみることにしました。今は失われてしまったPCへのワクワク感を思い出させてくれる、PC全盛期の傑作です。

DCIM0100

↑かつては栄華を誇ったMebiusのロゴ

これは、調べてみると2005年頃の製品のようです。OSとしてはWindows XPが載っています。2006年にWindows Vistaが発売されましたので、XP後期の製品ということになります。

当時を思い出してみると、テレビ(アナログ)録画機能付きのPCが流行っていたころだと思います。また、まだスマホやタブレットが流行る前で、PCの市場としては最も活気があった頃だったように思います。日本のメーカーは特に、家電のような機能を押し出した製品をたくさん出していたと記憶しています。

2005年頃というと、そのような「家電PC」が全盛だった時代のちょうど終わりごろだったような気がします。この後、PCはもはや空気のような存在になってしまい、製品としても特色・面白みのない時代に入っていったように思います。

そして、今回入手したこのPC。家電PC時代の集大成として、あらゆる機能をてんこ盛りした豪華仕様になっています。

DCIM0103

まずは本体パームレスト部の各種ロゴシールを見てみます。OSはXP、CPUはAMDのAthlonの64ビットが載っています。MS Office 2003が入っています。独立GPUとしてATIのRadeonが載っています。そして何と、デジタルアンプやスピーカにはYAMAHA製の高級そうな(?)ものを採用しているようです。なんとも日本メーカーらしいこだわりだと思います。これだけ見ても、当時かなり力の入った上位機種だったことが推察されます。

DCIM0106

燦然と輝く「SHARP」のロゴ。

DCIM0104

そして、これこそ家電PC時代を象徴するような機能、インスタントプレイ機能です。OSを立ち上げていなくてもTVやDVDを再生でき、まさに「家電」のように使うことができるというものです。実際にはWindowsとは別の、軽量のOSをデュアルブートで起動するような仕組みだったと思います。一時期よく見かけましたが、あまり使い勝手は良くなかったように思います。

DCIM0101

そしてこのフォルムです!画面を閉じると、それはもう家電のAV機器にしか見えません!この時代をよく表した傑作だと思います。

DCIM0107

次に、背面のインターフェイス周りを見てみます。まずはTVチューナの入力端子が目につきます。この他、S端子(アナログ映像)の入力端子と出力端子がついています。

DCIM0108

そして側面には昔のゲーム機でお馴染み・アナログコンポジット入力端子が装備されていました。つまり、アナログキャプチャボードが完全に内蔵されているということで、VHSデッキや古いビデオカメラから映像を取り込むことがこれ単体できることになります。この時代に流行った(というか、よく押されていた)機能でしたが、実際にどれほどの人が活用していたのかはわかりません。自分は自宅のネコの動画を編集して遊んだりはしました。

またS端子の出力が付いていることで、テレビにPC画面を単体で出力することができます。これは当時としてもわりと珍しい機能だったと思います。

IEEE1394端子も付いているので、DVカメラから映像を取り込むこともできます。これらから、映像関係は全部入りと言っても過言ではないような仕様です。この頃、映像を自由に扱えるということでとてもワクワクしたのを覚えています。

DCIM0109

AQUOSの前に置いてみました。もう家電にしか見えないですね。今回は本体のみの入手でしたが、実際にはリモコンも付属されていたようです。

ここまで見てみましたが、当時考えられる機能を惜しげも無く詰め込んだ、これを買ったら何でもできる気にさせてくれるような、良い製品だったのではないかと思います。当時は自分が子供だったこともありますが、PCはその奥に無限の可能性を感じさせてくれる夢の機械でした。ですので、最近のように「消耗品」化してしまっている現状には多少悲しさを感じています。

入手した時にはACアダプタが無かったため、現在ネットで注文しています。電源を入れてみることができたら、今度は中身のレビューも行ってみたいと思います。

21世紀に持っていくテレビ

4月から仕事で引っ越しをして、そろそろ新天地にも慣れてきました。先日、近くのハードオフ(中古屋)にバイクを走らせて行ってみたら、ジャンク品で古い液晶テレビが出ていました。値段は何と300円。電源ランプは点くものの映らないらしく、またデジタル放送にも対応していないため、相応な値段でしょうか。

DCIM0057

これは2000年前後のシャープのAQUOS。まさにシャープが他社に先駆けて液晶テレビを発売し、成功への道を歩み始めていたくらいの時期のものだと思います。

今改めて見ても、デザインは秀逸だと思います。当時のシャープの本気が感じられます。持ち手がついているところなど最初から「ポータブル」を指向したデザインとなっています。これは液晶テレビが普及しきった現在でも珍しく、依然として先進的であるように思います。

DCIM0059

これには、シャープのAQUOSに込めたメッセージが感じられます。当時のブラウン管テレビは大人にも重く、とても持ち歩くことなど考えられなかったですが、これからは自由に持ち歩ける時代なんだ、と。

もちろん、実際にはテレビを家の中で持って歩くことなんてほとんどないと思います。しかし、そうしたメッセージを多分に発信するこのデザインや、2000年前後の時点で未来を見据えた提案をしていたことなど、大きな功績のあった製品なのではないでしょうか。

DCIM0060

裏には、キタ トシユキさんという方のデザインであるというサインが入っていました。

ジャンク品なので、電源アダプタはついていませんでした。早速ネットで検索します。したら、地元・東京の秋葉原でよくお世話になっていたとある店に何故か大量に在庫があることがわかりました。しかも安い。東京にいたら即翌日向かっていたところですが、今はそうもいきません。ネットで注文します。

しかし、ハードオフによれば電源を繋いでも何も映らないそうなので、修理を試みることになりそうです。修理が趣味、というのも珍しいと思いますが、偉大な先輩方が作った「作品」に直に触れることができ、なかなか面白いことです。

Zenfone 5 LTE(Lollipop日本版)のroot化

IMG_0001

先日、ついにZenfone 5 LTE日本版のAndroid 5.0(Lollipop、12.4.5.57)アップグレードが公開されました!このroot化方法を紹介します。台湾のコミュニティで共有されていた方法をベースにしています。
http://apk.tw/forum.php?mod=viewthread&tid=703649

この方法では、root化それ自体にはKingrootという中国製アプリを使用します。このアプリはroot化はできるのですが、スパイウェアのような挙動を示すということが言われています。また、新しいLollipop ROM(12.4.5.42など)では使用できないという問題もあります。

これに対応し、以下の方法では

  • Kingrootに情報抜き取りの隙を与えないようにしつつroot化
  • その状態でKingUser(Kingrootによるroot権限管理アプリ)をSuperSUで置き換え
  • root化を維持しつつ最新のROMにアップグレード

という操作を行います。

具体的には、個人情報が全く入っていないまっさらな状態の古いROM環境でKingrootによるroot化を行い、KingrootをSuperSUに置換、さらにsuのみを維持する細工を施したうえで最新のROMにアップグレードする、という手順を踏むことによって、一般的なSuperSUによるroot化と最新のROMのroot化を実現します。

手順の概要

これから行っていく手順の概要は次のようになります。経験のある人ならこれだけ読めば十分かもしれません。

  • SD、SIM抜く
  • WW_12.4.5.22を書き込み、そのままファクトリーリセット
  • 内部メモリにKingroot(.apk)をコピー
  • Kingrootでroot化
  • 開発者モードをオン、USBデバッグをオンにする
  • RootToolsから、Remove_Kingroot.bat、Root_Survival.batを順に実行
    • 途中、デバイスの画面にroot権限取得を許可しますか?という旨のメッセージが出るので承認
  • 内部メモリにJP_12.4.5.57.zipを転送
  • JP_12.4.5.57を書き込み
    • ここでファクトリーリセットしないこと!
    • 初回起動時に、Root_Survivalで仕込んだ再root化のスクリプトが実行されます
  • 再起動
  • 初期設定画面が出たら、電源OFF、リカバリモードからファクトリーリセット
  • 通常通りセットアップし、PlayStoreからSuperSUをインストールし完了!
  • 完了

Kingrootに情報抜き取りの隙を与えないため、かなり冗長な手順を踏んでいます。

準備

Kingrootのダウンロード

まずはKingrootをダウンロードします。公式サイトでダウンロードすると新しいバージョンになってしまい、上記のツールで除去できないソフトが含まれているため、下記のサイトからダウンロードできる古いバージョンを使用することをおすすめします。

http://www.asus-zenfone.com/2015/05/how-to-root-asus-zenfone-5-lte-t00p-lollipop.html

MicroSD,SIMカードを抜く

KingrootにMicroSD内のデータやSIMのデータへアクセスされないよう、あらかじめ抜いておきます。

公式ROMのダウンロード

以下のASUS公式サイトからROMをダウンロードします。「OS」として、Androidを選択してください。その中から、最新のroot化を行いたいバージョンと踏み台となるバージョンの2つをダウンロードします。2015/10/27現在日本版最新は「JP_12.4.5.57」、世界版最新は「WW_12.4.5.50」です。踏み台バージョンとしては、「WW_12.4.5.22」をダウンロードしてください。

https://www.asus.com/jp/Phones/ZenFone_5_A500KL/HelpDesk_Download/

日本版と世界版

日本版ROMと世界版ROMの違いですが、日本版Zenfone 5にはどちらのROMも書き込むことができます。現状ではJP_12.4.5.57とWW_12.4.5.50を比較すると日本版のほうがOS自体の改良も進んでおり、最新のセキュリティパッチ(StageFright2.0対応)などがあたっています。一方世界版では、カメラのシャッター音が消せるなどのメリットがあります。世界版でも日本語表示はほぼ問題ありませんが、日本版のほうが日本語フォントの表示が綺麗に調整されています。

Kingroot、RootToolsのダウンロード

RootToolsは、以下の台湾のコミュニティで公開されている今回の方法に用いるツールです。

http://apk.tw/forum.php?mod=viewthread&tid=703649

その中のURLである以下からRootTools.zipをダウンロードしてください。

https://mega.nz/#F!tlMCBSBZ!Jh8Hd_T46G5zRcn9mORk9A

また、Kingrootのapkは以下のサイトのURLから取得してください。

http://www.asus-zenfone.com/2015/05/how-to-root-asus-zenfone-5-lte-t00p-lollipop.html

作業手順

踏み台バージョンの書き込み

まずは、これから端末を初期化するため現在の環境を完全にバックアップしてください。端末をリカバリモードで起動し、踏み台バージョンのROM(WW_12.4.5.22)のZIPファイルを選択し書き込みを行ってください。書き込みが成功したら、続けて「wipe cache partition」「wipe data/factory reset」を選択し、端末のデータを全消去します。これで、端末上から全ての個人データが消去され、Kingrootを実行しても抜き取るデータがない状態になりました。

終了したら「reboot system now」を選択し、踏み台バージョンで起動してください。ここで初期設定画面が表示されます。ここで、各種アカウント情報は絶対に入力しないでください。ただし、WiFiだけはKingrootの実行に必要なためパスワードを設定してください。これも気になるようであれば、公衆WiFiや一時的にMacのインターネット共有機能を使用することなどを考えてください。Kingrootの実行にWiFiを必要とする理由としては、第一には機種に合わせたroot化方法をダウンロードするためです。

踏み台バージョンのroot化

踏み台バージョンのOSが起動したら、設定から「提供元不明のアプリ」を許可し、また開発者モード・USBデバッグを有効化してください。このあたりの方法に関しては他サイトを参照してください。

また、PCにUSB接続しKingrootのAPKを本体メモリの最上位にコピーしてください。

完了したら、「ファイルマネージャ」アプリからKingrootのインストールを行い、そのままKingrootを起動、指示に従ってroot化を行ってください。終了したら、再起動せずにそのまま次の手順に進んでください。

SuperSUによる置き換え

ここで、いよいよ台湾コミュニティで開発されたRootToolを使用します。まず、PCのどこかにRootTools.zipを展開し、各種ファイル(Remove_Kingroot.batなど)があるディレクトリでコマンドプロンプトを開いてください。

ここで、コマンドプロンプトでRemove_Kingroot.bat、Root_Survival.batを順に実行します。前者はしばらくすると表示が止まりプロンプトが返ってきませんが、その状態になったら終了していますのでCtrl+Cで停止してください。エラーがでなければ成功です。途中、端末の画面にroot権限の使用を許可するかどうかのポップアップが表示されるので、了承してください。

これにより、まずKingroot関連ファイルを削除しSuperSUで置き換え、その後再root化プログラムがOSアップグレード後に読み込まれるように設定されます。

終了したら、最新のROMを内部メモリにコピーしてください。

ここで再起動を行います。再起動したらリカバリモードに入ってください。

最新ROMの書き込み(再root化)

リカバリモードに入ったら、先ほどと同様の手順で最新ROMのZIPファイルを選択し書き込みを行ってください。ここでは、ファクトリーリセットは行ってはいけません!先ほど仕込んだ再root化のスクリプトは、最新ROMの初回起動時に自動的に読み込まれ、処理を実行するように仕掛けられています。終了したら、再起動してください。

最新ROMで起動しますので、初期設定を行ってください。ここではWiFiも含め全ての情報を入力しなくて構いません。適当にスキップしつつ、ホーム画面が表示されるところまで行ってください。

メニューを表示し、アプリの中にKingroot関連アプリが残っていないことを確認してください。SuperSUは残っていると思います。

確認したら、再度リカバリモードに入ってください。

最後の仕上げ

リカバリモードに入ったら、総仕上げとして「wipe cache partition」「wipe data/factory reset」を行いユーザ領域のデータを全消去します。既にシステム領域にsuは転送されているため問題ありません。念のためシステムを初期状態に戻し、全バージョンから引き継いた余計なファイルを削除するようにしています。

再起動したら、今度は通常通りセットアップしてください。アカウント情報などを入れて構いません。メニューを開くと、SuperSUなどは全て消えていると思いますが、正常です。この状態でシステム内部ではroot化が行われていますので、Play StoreからSuperSUをインストールし、完了となります。

おつかれさまでした!

Windows 10の使いにくい部分を修正!!

こんにちは!去る7月29日、ついにWindows 10が公開されました!まだまだ行き渡ってはいないかもしれませんが、Windows 7, 8.1を使用している人は無償でアップグレードすることができます。XP/Vistaを使用している方は購入するしかありません・・・。

Windows 10では、タブレット向けを強く意識した8から方針転換し、7以前のようにPCを主眼においたデザインに戻されました。批判が強かったとはいえせっかくやった大転換をまた元に戻したことについては少し残念な気もしていますが、PCで使う以上は使いやすくなったと言えます。と言いますか、PCで使うWindowsとしては過去最高の完成度だと私は思っています。

まず、Windows 10ではOSの中核部分であるカーネルのメジャーアップデートが行われ[https://ja.wikipedia.org/wiki/Microsoft_Windows_10]、体感速度が大きく向上しています。最近のハードウェアを利用している場合は特に、7よりも断然速いです。OSXもそうですが、最近のリリースはハードウェアの要件をあまり上げずに軽量化に主眼をおいていますので、Windows 10はCore 2 Duo世代(Windows Vista世代)くらいのPCでも十分その恩恵を受けることができます。

ですが、残念なことに表面的な部分ではいくつか使いにくいところがあります。それは、スタートメニューと画像ビューアです。実力はあるのに、実にもったいないことです。ここでは、その解決法を提案します。

使いにくいかもしれない点: 新しいスタートメニュー

Windows 10の特徴として、新しくなったスタートメニューがあります。これはこれで悪くはないのですが、XPやそれ以前からWindowsを使ってきた人たちにはやはり馴染みにくいところがあるかもしれません。

new_startmenu_mod

そこで、まずはこれを従来の使い勝手に戻すTipsを紹介します。これには、Classic Shellというフリーウェアを利用します。旧来のスタートメニューを再現する同様のソフトはいくつかあるのですが、あるものは完成度は高いものの有料、またあるものはアドウェア疑惑があるなどで、私の一番のおすすめはこのソフトです。

Classic Shellを利用することで、以下のような旧来のスタートメニューに似たスタートメニューを再現することが可能になります。

classicshell

それでは、インストールを行いましょう。

Classic Shell公式サイト

http://www.classicshell.net/

英語のサイトになりますが、臆することはありません。「Download Now」をクリックし、ダウンロード、インストールしましょう。

インストールが完了すると、細かい見た目や使い勝手を設定するウィンドウが出ますので、適宜設定を行います。わからない場合は、そのままでも大丈夫です。

使いにくい点: 「フォト」アプリ

photo

うーん、、私としては、ここはいまいち理解できません。Windows 10では画像ビューアが「フォト」というModernアプリになってしまいました。Modernアプリは主にタブレットを志向したデザインで、PCでは利用しにくいものです。例えば、右クリックメニュー等は使えません。しかも、現状ではModernアプリは従来のWin32アプリと比較し動作速度が遅く感じられます。これも、従来のようなものに戻しましょう。

画像ビューアのフリーソフトはいくらでもあるのですが、使用感やシステム全体の安定性の観点から、できれば純正のものを使用したほうが良いということがあります。そのため、ここではMicrosoftがWindows 7の時期に提供していた、「Windows Essentials」という追加パッケージに含まれる「フォト ギャラリー」を利用することにします。インストールは問題ありませんでした。

photogallery

以下のサイトから、ソフトウェアをダウンロードし、インストールを開始します。

http://windows.microsoft.com/ja-jp/windows-live/essentials

インストール中、「フォトギャラリーとムービーメーカー」だけをインストールするよう指定します。OneDriveなどはもともとインストールされているソフトと競合する可能性があります。「Windows Live メール」は欲しければインストールしても良いかもしれません。「Windows Live Writer」は使いやすさで定評があるブログクライアントです。というか、この記事もLive Writerで書いています。

インストール時に.Net FrameWorkのインストールが始まった場合は指示に従います。

インストールが完了したら、何か画像を開いてみてください。その際、どのソフトウェアで開くか聞かれると思いますので、「フォト ギャラリー」を指定してください。

これで、旧来のような使いやすい画像ビューアで画像が開かれるようになります。

おつかれさまでした。