#author("2021-06-11T19:05:30+00:00","default:ail-wiki","ail-wiki")
#author("2021-06-11T19:12:38+00:00","default:ail-wiki","ail-wiki")
[[太田研 公開用Wiki]]

*移動ロボットのためのステレオカメラによる障害物検出のためのブロックマッチングの性能比較 [#o2398d7d]
#contents
*はじめに [#j05b81c6]
近年では自律的に移動するロボットの研究などが盛んにおこなわれている.
企業や研究機関はロボット開発などに力を入れているが
自律的に移動するロボットの開発が盛んにおこなわれてきている.[1]
工場の中や人などが立ち入らない場所など決められた場所でロボットを動かす場合などはロボットが移動するための制約等を設けて移動させることは可能であると思われるが人が普段通るような道などでロボットを自律的に移動させるためには障害物等を正確に検知して,その障害物を回避して目的地に向かわなければならない[1].
自律的にロボットを障害物検出を行うのにレーザーを用い距離計測を行うLiDARと呼ばれるモノがあり、障害物検出に多く使用されている.
しかし,概要で述べた通りLiDARはカメラに比べて比較的高価である傾向があるため[1],
安価なセンサーであるカメラを用いて距離を計測することができるならば今後新たな障害物検出の手段として利用できることが考えられる.
そこで本研究ではOpenCVにあるブロックマッチング[2][3]の関数で性能を評価することにした.

*背景理論 [#d93ccc79]
つくばチャレンジの課題の1つとして障害物検出があるが,
その際にロボットと障害物との間の距離を測定する必要がある.
ステレオカメラでは3次元空間から得られた2次元情報を3次元情報に
変換する操作が行われる.
この操作で三角測量の原理[4]が用いられる.
CENTER:#ref(../Stereo_Triangulation.png,center,50%)
CENTER:&size(14){図1:ステレオカメラ 三角測量[4]};

*評価実験 [#d93ccc79]
**実験手段 [#d93ccc79]
今回用いたロボットはRevast社が開発したScamperにUSBカメラを接続したものを使用した.~
カメラについては2つのカメラ間の距離は6.5cm~
距離を計測する対象物として段ボールに~
チェッカーボードを張り付けたモノを使用した.~
**実験手順 [#d93ccc79]
1.キャリブレーション[5][6]~
2.ブロックマッチング[2][3][7]で視差を取得~
3.Rviz[4]を起動~
**実験結果 [#d93ccc79]
***静止状態 [#d93ccc79]
CENTER:#ref(../result.png,center,50%)
CENTER:&size(14){図2:ステレオカメラ 三角測量[1]};
~
~
CENTER:#ref(../result_difference.png,center,50%)
CENTER:&size(14){図3:実際距離と計測距離との差[4]};
~
~

以下の画像は実験の際に取得した真上からの画像[8]である.~
~
~
CENTER:#ref(../1m.png,center,50%)
CENTER:&size(14){図4:1m};
~
~

CENTER:#ref(../1.5m.png,center,50%)
CENTER:&size(14){図5:1.5m};
~
~
CENTER:#ref(../2m.png,center,50%)
CENTER:&size(14){図6:2m};
~
~
CENTER:#ref(../2.5m.png,center,50%)
CENTER:&size(14){図7:2.5m};
~
~
CENTER:#ref(../3m.png,center,50%)
CENTER:&size(14){図8:3m};
~
~
CENTER:#ref(../3.5m.png,center,50%)
CENTER:&size(14){図9:3.5m};
~
~
CENTER:#ref(../4m.png,center,50%)
CENTER:&size(14){図10:4m};
~
~

***動作状態(対象物体に近づいていく状況)[#d93ccc79]

[0.5mから1.5mの間を移動時]
~
~
stereoBM,stereoSGBMともにロボットの動きに合わせてほぼ正確な距離で対象物が動いて 
いることを確認~  
 
[1mから2mの間を移動時]~
~
多少カメラからの実際の位置よりズレてはいたが~
stereoBM,stereoSGBMともに~
ロボットの動きに合わせて前後にぶれたりすることなく~
グリッド上を対象物が動いていることを確認.~

[1.5mから2.5mの間を移動時]
~
~
ロボットを移動させたときに対象物の点群が大きくぶれていることが確認.~
~


*まとめ [#d93ccc79]
**静止状態 [#d93ccc79]
静止状態で実験を行ってみたところ,stereoBM,stereoSGBMともに1m地点までは
距離をほぼ正確な位置に対象物の点群が表示されていることを確認することができた.
しかし,1.5m地点以降になるとstereoBM[2][7],stereoSGBM[3][7]共に計測距離が実際の距離よりもおよそ0.5m以上遠くにずれてしまい実際の距離が遠くに離れていくにつれて計測距離のズレも大きくなっていくことを確認した.

そして2.5m地点以降ではstereoBMでは対象物の点群を確認することは困難となった.
一方,stereoSGBMの方では1.5m地点までは対象物を確認することができたが,
2m以降では対象物を確認することができなかった.

**動作状態 [#d93ccc79]
対象物体から2m以上の距離ではロボット動作時に対象物の位置が前後に大きくぶれることを確認.~
1.5m以内では対象物の位置が比較的ぶれることなく安定していた.


*考察 [#d93ccc79]
およそ2m以降で対象物が表示されなかった原因として画像サイズが320×240で小さかったことが考えられる.~
今回はカメラから対象物までの距離を測定するのにブロックマッチング[2][3][7]というアルゴリズムを用いて視差を取得する必要があった.~
画像サイズを大きくすればピクセル数が増えることによりカメラから遠くにある対象物まで視差を取得することが出来るようになり,対象物を正確に測れる距離が長くなると考えられる.~
stereoBM[2][7],stereoSGBM[3][7]両者とも障害物までの距離が1mまでは正確に測れているが1.5m以降になると徐々にstereoBMの方では実際の距離より測定された対象物の点群が遠くに表示されていた.~
stereoSGBMでも2m以降は対象物を確認することはできなかったが1mくらいの範囲である程度正確な距離を測定することができたので近くで障害物検出を行う際には利用できると考えた.~
今回基礎実験ということでOpenCVにあるstereoBMとstereoSGBMを用いて視差を取得し,~
点群で表示させてみることで対象物が表示されていることを確認できて実際の距離と同じ位置に点群が表示されているのかということやロボット移動時に点群が大きくぶれずに移動地点に沿って動いているのかという検証を行ってみたが実際にその対象物をロボットに障害物検知させるといったことまでは行っていないので今後そういったことを検証していく.


*参考文献 [#d93ccc79]
[1]村上公介.移動ロボットのためのステレオカメラを用いた障害物検出の性能向上手法.群馬大学理工学部電子情報理工学科 卒業論文.2017.~
[2]OpenCV:cv::StereoBM Class Reference :~
[2]OpenCV: cv::StereoBM Class Reference :~
https://docs.opencv.org/master/d9/dba/classcv_1_1StereoBM.html(最終閲覧日:2021/02/07)~
[3]OpenCV:cv::StereoSGBM Class Reference :~ 
https://docs.opencv.org/master/d2/d85/classcv_1_1StereoSGBM.html/(最終閲覧日:2021/02/27)~
[4]ZMP robot of everything : https://www.zmp.co.jp/knowledge/adas_dev/adas_sensor/adas_camera/adas_stereo(最終閲覧日:2021/02/27)~
[5]ROS stereo calibration : http://wiki.ros.org/camera_calibration/Tutorials/StereoCalibration~
(最終閲覧日:2021/02/27)~
[6]鹿貫悠多 「scamperによるROS&Raspberry Pi製作入門」 株式会社オーム社 pp.203-211,2018.~
[7]長谷川和彦,岩崎和博,片山大貴,西谷友汰,間所洋和,佐藤和人.クアッドリコプターに 
よる電動車いすの自動操縦支援 秋田県立大学 脳情報工学研究室 自主研 
究.p.3,2014:~
http://www.akita-pu.ac.jp/neuro/jisyuken/H26/h26wheelchair.pdf(最終閲覧 
日:2021/02/18)~
[8]ja/rviz-ROS Wiki : http://http://wiki.ros.org/ja/rviz(最終閲覧日:2021/02/03)~

[9]つくばチャレンジ2019 :~
https://tsukubachallenge.jp/2019/regulations/tasks(最終閲覧日:2021/02/10)~

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS