[[太田研 公開用Wiki]] *移動ロボットのための位置情報モニタリングシステムの開発 [#t9b351a2] #contents *はじめに [#g0835e51] 人間と共存するロボットの技術開発を目指す実験の一つにつくば市で行われている「つくばチャレンジ[1]」というものがある.つくばチャレンジは「人々が暮らしている現実の世界でキチンと働く」ロボットを作るための技術開発であり,研究者・技術者が実際のロボットを試作して実地で実験を行い,いろいろな方式を試してその経験と結果を互いに共有することにより,ロボット技術のレベルを向上させることを目的としている.~ 昨年行われたつくばチャレンジ2015 では,つくば市内の遊歩道や広場に定められたコースをロボットに自律走行させ,途中のエリアで決められた服装の人間を探索するといった課題の達成を目指す.つくばチャレンジで実際に走行させているロボット外観を図1 に示す.また,つくばチャレンジ2015 のコースを図2 に示す. CENTER:#ref(robot.png,center,70%) CENTER:&size(12){図1:ロボットの外観(左:外装有り,右:外装無し)};~ &br; CENTER:#ref(tsukuba.png,center,40%) CENTER:&size(12){図2:つくばチャレンジ2015 のコース};~ &br; つくばチャレンジでは,課題とは別に推奨されている事項として「スタート点付近にロボット状態モニタリングステーションを準備し,誰もがロボットの現在位置や時々刻々の状況を知ることができるようにする」というものがある.ロボットがつくば市内に設定された図コース内を動き回るため,その現在位置や状況をスタート地点付近に設置されたつくばチャレンジの本部にある端末から確認できるようにしたいというのがつくばチャレンジの運営側から提示されている.この推奨事項を達成するために屋外を移動するロボットと端末の間で通信を行い,ロ ボットの位置情報を端末へ送信して離れた端末上でロボットの位置を表示するシステムを設計した.~ ロボットが送信する情報は現在位置と向いている方向という2 つの情報とし,これら2 つの情報を使ってロボットの移動の様子と進行方向を端末上に表示する.また,端末上にあらかじめロボットの移動範囲の地図を表示させその地図上にロボットの移動の様子を表示する.地図は全体のどこにロボットがいるか表示したものと,ロボットの周囲一定範囲の地図を切り抜いて拡大して表示したものの2つを用意して,誰にでも分かりやすくロボットの位置や状況をモニタリングできるようにしている.~ *位置情報モニタリングシステム [#o08adba5] **通信方法について [#ybde35fe] ロボットと端末間の通信は,無線によりロボットの位置情報を端末へ送信する.以下に代表的な無線通信方法の例を挙げる. +''Bluetooth''&br; 数m~数十mの短距離での通信を目的とした通信技術.ノートパソコンやスマートフォンなど様々な機器に標準的に搭載されていて手軽に利用でき,障害物に遮断されにくい. +''LTE''&br; 「Long Term Evolution」の略称で,携帯電話の通信規格.高速・大容量・低遅延という特徴があり,パソコンでの利用にはテザリングでスマートフォンなどを経由する. +''WiMAX''&br; 「Worldwide Interoperability for Microwave Access」の略称で,マイクロ波を利用した無線通信の規格である.屋外や移動中でも安定した通信を行うことができ,機材があれば手軽に利用できる. つくばチャレンジではロボットは遊歩道や広場などの屋外を移動し,モニタリング用の端末も屋外に設置される.そのため,屋外を移動するロボットと離れた距離にある端末の間で安定して通信を行い,データのやり取りをする必要がある.~ このような理由から,今回設計したロボットのモニタリングシステムでの通信にはWiMAX を利用した無線でのインターネット回線による通信を行う.また,インターネット回線により直接ロボットと端末で通信を行うためにはグローバルIP アドレスを取得する必要がある.しかし,サーバを中継してロボットと端末間の通信を行うことで,サーバの持つIP アドレスを利用して通信を行うよう設計した.~ これにより,今回の通信用にグローバルIP アドレスを取得する必要をなくしている.また,サーバを中継することでLinux のscp コマンドを利用して通信を行えるため手軽な実装ができた.今回通信を中継するサーバは太田研究室のものを使っている. **位置情報通信アプリケーション [#w3c9551e] ***ロボットから端末への情報の受け渡し [#laaa36bb] ロボットから送信する情報は,ロボットの現在位置と角度という2 つの情報とする.ロボットが自身の現在いる位置のx 座標とy 座標,向いている方向の角度という情報を取得し,その数値をテキストファイルへ書き込みサーバへ送信する.同時に,端末側もサーバと通信を行いロボットから送信されたテキストファイルを受信する.~ このとき,ロボット側と端末側で同時にテキストファイルへのアクセスが起こってしまうと通信に失敗したり,予期せぬ数値がファイルに書き込まれたり,正しいロボットの位置情報を端末へ送信できず,モニタリングを行う際の障害になる可能性がある.その対策として,ロボット側と端末側それぞれのサーバへのアクセスを一定間隔で行うことで,通信が衝突する可能性を減らしこの問題を回避する.~ 今回のシステムではロボットからのデータの送信を0.1 秒,端末側のデータの受信を1 秒ごとに行っている.また,通信に失敗した場合は端末上へのロボットの位置の表示は行わず,再度通信をし直す. ***座標系の違いの補正 [#rf32633c] 端末側で受信したファイルから,ロボットの現在の位置座標と角度の数値を取得する.それらの数値は地図画像の縮尺に数値を合わせてから使用する.~ しかし,ロボットが持つ座標系と端末側に表示された地図画像が持つ座標系(OpenCV のMat 型の座標系) には違いがあるため,表示に使用する前にその違いを補正する必要がある.図3 の右にロボットが持つ座標系,左に地図画像が持つ座標系を示す. CENTER:#ref(Coordinate.jpg,center,40%) CENTER:&size(12){図3:2つの座標系(右:ロボットの座標系,左:Mat 型の座標系)};~ &br; 2つを比べると,x 軸,y 軸が入れ替わっており,各軸の正の方向も逆になっている.また,原点座標もロボット側は画像中心であるのに対し,地図画像上では画像の左上となっている.~ さらに地図画像上でロボットの原点に対応する位置の座標を求め,その座標と原点の差についても補正を行う.ロボットの座標系の原点と対応した地図画像上の座標をO'(mx,my) とする.^ これを用いてロボットの座標をp(x1,y1),角度を1, とすると,地図画像上でロボットの位置に対応した座標p'(x2,y2),角度2 への補正の式は次のようになる.~ CENTER:#ref(siki1.png,center,70%) &br; ロボットから受信した各数値を,端末側で上記の式のように補正してからモニタリングに使用する. **位置情報描画アプリケーション [#h581a823] 今回のシステムで使う地図画像を図4 に示す. CENTER:#ref(map_campus3.png,center,10%) CENTER:&size(12){図4:地図画像};~ &br; この画像はロボットが桐生キャンパス内を自律走行し,LRF によって周囲を探索しながら作成した画像である.そのため,この地図画像は実際のロボットの走行と対応が取れており,モニタリングがしやすいと考えられる.~ 地図画像の大きさは3001[px]×3001[px],また実際の距離との縮尺は1[px] = 10[cm] である.ロボットの位置情報の単位は[mm] なので,縮尺を合わせるにはロボットが取得した数値に1/100を掛ける.~ また,ロボットの原点座標と対応した地図画像の点M(mx,my)はこの画像の中心となっているため,M(mx,my) = (1500,1500) である.これらの数値より補正の式は下記のようになる. CENTER:#ref(siki2.png,center,70%) &br; ***地図上への表示 [#v7620976] 端末側でロボットの位置を地図上へ表示する方法は,地図上のロボットの位置と対応した位置にマーカーを表示することで行う.マーカーとする画像は方向が一目瞭然なものを使い,ロボットの現在位置と向いている方向を分かりやすく表示する. ロボットから送られた位置情報,角度の数値に補正を施し,それらの数値を使ってマーカーにアフィン変換を行い実際のロボットの位置にに対応した座標へマーカーを移動,回転をして地図画像上に合成する.~ マーカーの変換前の座標を(nx,ny),変換後の座標を(n'x,n'y) とすると,アフィン変換の式はp'(x2,y2),角度2 の数値を使って次のような式となる.また,地図上へマーカーを表示した様子を図5 に示す. CENTER:#ref(siki3.png,center,70%) &br; CENTER:#ref(allmap.jpg,center,50%) CENTER:&size(12){図5:地図上へのマーカー};~ &br; ロボットの移動によって位置情報が更新されると,その情報を端末上へ受信しマーカーへアフィン変換を行って地図上のマーカーの位置や角度も更新する.これをロボットの移動中に繰り返すことで,マーカーの位置や角度が地図上で断続的に変化するので実際のロボットの移動の様子と進行方向を地図上に表示したマーカーの移動によりリアルタイムで確認することができる.~ また,何らかの原因によりロボットが走行できず停止してしまった場合,ロボットにトラブルが発生し走行不能になってしまった場合も考えられ,これを離れた地点から確認できることは特に重要であると考えられる.そこで,一定時間ロボットから送られる位置情報と角度の数値が全て変化しなかった場合に,マーカーの色を変えることで,停止している状態を確認できるようにした.停止状態の表示を図6 に示す. CENTER:#ref(stop.jpg,center,50%) CENTER:&size(12){図6:停止状態の表示};~ &br; ***ロボット周辺の様子の表示 [#ffc27320] 全体を確認できる地図は端末上へ表示する際,画面のサイズに合わせて縮小をする.そのため,全体の地図ではロボットの周囲の様子が小さく表示されてしまい,端末からロボットの周辺の状況を確認することが難しいと考えられる.~ そこで,縮小を行う前にマーカーを中心に一定範囲を地図から切り抜き,原寸大のまま別の地図として画面へ表示する.このように作成したロボット周辺を表示した地図で,ロボットの周囲の様子を大きく表示することでロボットの周辺の状況を分かりやすく表示する.切り抜く範囲はロボットの周囲200[px] の正方形の範囲としている.~ ロボットの移動に合わせてマーカーが移動しても,切り抜く範囲は常にマーカーが中心となるようにすることで常に現在のロボットの周辺の状況を確認できるようにする.図7 に周辺地図の作成の例を示す. CENTER:#ref(kirinuki.jpg,center,50%) CENTER:&size(12){図7:周辺地図作成の様子};~ &br; また,ロボットの位置が地図の端であった場合,そのままマーカーの周辺を切り抜こうとすると切り抜く範囲が地図画像からはみ出てしまい,ロボット周辺の地図作成に失敗することが想定される.~ そのような場合は,図8 のように切り抜く範囲を地図画像からはみ出さないように指定し,ロボット周辺の地図を作成する.その際,マーカーの位置が中心とならなくてもよいことにする. CENTER:#ref(kirinuki2.jpg,center,50%) CENTER:&size(12){図8:地図の端にいる場合の範囲指定};~ &br; ***システムの画面 [#z897e426] 今回作成したシステムにより端末上へ表示される画面を図9 に示す. CENTER:#ref(MainWindow.jpg,center,50%) CENTER:&size(12){図9:端末上の画面};~ &br; 画面の右側に地図全体を表示し,ロボットの現在位置を赤い丸のマーカーで表示する.左側には前節で説明したロボットの周辺地図を表示し,ロボットの進行方向と周囲の様子を表示する.~ ロボットの移動に応じて,右側の地図上ではマーカーの位置が対応した位置に移動し,左側の地図上では常にロボットの周囲の様子を表示する.これら2つの地図により,リアルタイムでロボットの移動の様子と周囲の状況のモニタリングをする. *実験 [#oba6e4e1] **実験の方法 [#if8c8416] 実験はロボットが桐生キャンパス内を実際に走った際のログデータを用いて行った.現段階ではロボットと端末でのリアルタイムでの通信はできていないため,本実験はサーバと端末間でのみの通信によってデータをやり取りしたものである.~ 実験用に作成したデータの送信用プログラムにより端末からロボットのログデータをサーバへ送信し,同じ端末でサーバからそのログデータを受信して送信時とは別の場所に保存する.そのデータを用いて画面上に表示した地図上へロボットの移動の様子を描画し,実際の走行を再現できるかを実験する.~ また,実験に使うデータは2つの異なる走行の結果のものを用意し,それぞれのデータについて実験を行った.ロボットが走行したルートを地図上に表すと,それぞれ図10,図11のようになる. CENTER:#ref(jikkenrute1.jpg,center,50%) CENTER:&size(12){図10:実験1でのロボットの走行ルート};~ &br; CENTER:#ref(jikkenrute2.jpg,center,50%) CENTER:&size(12){図11:実験2でのロボットの走行ルート};~ &br; 端末上に表示された地図上でもこのようにマーカーが動き,走行の様子を再現できれば実験は成功とする.図10 における走行におけるログデータの個数は50,図11 におけるログデータの個数は287 である. **実験結果 [#f32d52be] 実験1 のデータに対して行った結果を図12 に,実験2 のデータに対して行った結果を図13 にそれぞれまとめる.画像は[1]~[8] の順にシステムの画面の推移を表したものである. CENTER:#ref(result1.jpg,center,40%) CENTER:&size(12){図12:実験結果1};~ &br; CENTER:#ref(result1.jpg,center,40%) CENTER:&size(12){図13:実験結果2};~ &br; *考察 [#k8ff2b71] 実験1,2 ともに実際のロボットの走行と端末上で表示したマーカーの動向はほぼ一致したため,走行の様子を再現できたと考えられる.よって,今回作成したシステムでの実験は成功したと言える.~ しかし,今回の実験はロボットと実際に通信をして行ったものではないため,次は走行中のロボットとリアルタイムで通信を行い,受信した位置情報を用いて今回の実験と同じように走行の様子を表示できるかという実験が必要である.~ 通信を行うタイミングもロボットとの通信を行った実験の結果によって,最適なタイミングを見つけ,調整をしていく.また,現状ではロボットの現在位置と向いている方向という2 つの情報について送信し,端末上でロボットの位置と進行方向の表示を行っているが,ロボットから送信する情報をさらに増やすことでより詳細な状況を端末上で表示できると考えられる.~ 例えば,人物の探索中や発見した際に信号を送り,それに応じて端末の地図上でマーカーの色を変えたり,発見したものに記しを付けたりなどして,ロボットの移動以外の状況についても端末上から確認できればより便利であると考えられる.また,ロボットが停止している状態については,現在はロボットが意図的に停止している状態とトラブルにより停止してしまった状態とが区別ができない.これについても,トラブル時にはエラー信号を送信しそれを受けて停止状態の表示を行うなどすれば,この問題は解決できると考えられる.~ 実験にて使用した地図画像はモニタリングをする上では使いやすい画像であったが,人間にとって見やすい画像とは言い難い.本システムはつくばチャレンジで使用することを目的とし,誰にでも分かりやすくロボットの移動と状況を表示することが必要なので,人間が見て分かりやすい地図を使ってモニタリングができるような改良をしていきたい. そのような改良をするためには,使用する地図画像の縮尺や角度の違いについてや,ロボット側の原点座標と対応した地図上の座標をあらかじめ把握し,それらを用いてロボットから受信した情報に適切な補正をする必要がある. *まとめ [#x666f6dc] 本研究では,つくばチャレンジで推奨されているロボットの位置と状況のモニタリングの達成のため,屋外を移動するロボットと通信を行い,端末上に表示された地図上へその移動の様子と周囲の状況を表示するシステムの設計をした.~ 本研究で設計したシステムは屋外の離れた距離でも通信可能なWiMAX を利用した通信によりロボットの位置情報を送信し,またロボットと端末間の通信をサーバを中継して行うことで,手軽かつ簡単な実装を実現した.端末上では,ロボットからの情報を使ってマーカーを地図上で現実のロボットの位置と対応した座標へ移動させる.地図はロボットの移動範囲全体を表示したものとロボットを中心に一定範囲を拡大表示したものの2 つを作成し,これら2 つの地図上に表示されたマーカーでロボットの現在位置と周辺の状況を分かりやすく標示する.これをロボットの移動中に繰り返すことで,ロボットの移動の様子と進行方向をリアルタイムで端末上で表示する.~ 実験としては,桐生キャンパス内をロボットが走行した際のログデータを使って,サーバと端末でのみ通信を行ってロボットの移動の様子を端末上で再現できるかを行った.実験は2 つの異なる走行のデータを使い,そのどちらもロボットの移動の様子を端末に表示された地図上で再現ができた.しかし,実際に走行しているロボットの移動の様子を表示できるかについては,今後さらに実験を重ねていく必要がある.~ 今後の課題としては,ロボットの状況に応じて送信する情報を追加し,端末上で探索中やトラブルによる停止など詳細な状況についても端末上で表示して確認できるような改良を考えている.端末上での表示についても,人間にとって分かりやすい地図画像を使ってロボットの移動をモニタリングできるようにすることが必要と考えられる.その他通信のタイミングの調整や機能の追加など,実際につくばチャレンジで使う際のことを考えて改良を加えていきたい. *参考文献 [#v7fc93b1] [1] つくばチャレンジ:http://www.tsukubachallenge.jp/~ [2] アフィン変換画像処理ソリューション: http://imagingsolution.blog107.fc2.com/blog-entry-284.html~ [3] Qt - Home : http://www.qt.io/~ [4] OpenCV:http://opencv.org/~