自動運転:魚眼レンズカメラのキャリブレーション

AutoRaceパッケージを使用して、ROSで自動運転TurtleBot3を構築する方法について説明です。

【 自動運転に必要なもの 】
1.ROSでの自動運転にAutoRaceパッケージを使用することが基本モデルです。
1.提供されるソースコードであるAutoRaceパッケージは、TurtleBot3 Burgerに基づいて作成されています。

2.Turtlebot3のシングルボードコンピューター(SBC)と通信します。
2.ROS1を搭載したラップトップ、デスクトップ、またはその他のデバイス。

3.RaspbrryPi_CameraはROSがサポートしています、別のモジュールも使用できます。
3.カメラを較正するために提供されるソースコードは、(魚眼レンズ)モジュールに基づいて作成されます。

4.ROBOTIS_GIT / autoraceで、AutoRaceトラック、交通標識、信号機、その他のオブジェクトの3D CADファイルをダウンロードします。
4.ROBOTIS -GIT / autorace_refereeでレフリーシステムをダウンロードします


【 Autoraceパッケージをインストールする 】
次の手順では、パッケージのインストール方法とカメラの調整方法について説明します。
Remote PCSBC の両方にAutoRaceパッケージをインストールします。

 $ cd ~/catkin_ws/src/
 $ git clone https://github.com/ROBOTIS-GIT/turtlebot3_autorace_2020.git
 $ cd ~/catkin_ws && catkin_make

リモートPC側操作の make でエラー発生  <解決:エラー対応の18項目参照>
エラー対応は、リモートPC側、RaspbrryPi側 両方に必要です。対応しないと全く同様のエラーが出ます。rwx rwx で実行権限を与える


Remote PCSBC の両方に追加の依存パッケージをインストールします。

 $ sudo apt-get install ros-kinetic-image-transport ros-kinetic-cv-bridge ros-kinetic-vision-opencv python-opencv libopencv-dev
   ros-kinetic-image-proc


SBCでカメラを調整する必要があります。<RaspbrryPiカメラ標準レンズでは、道路外にある信号機等が近くで視覚外にり魚眼レンズ要>

下記は標準レンズを取り外した物


標準レンズ、カメラ部を取り外したもの(カメラ部は両面接着テープでついている)


魚眼レンズカメラのレンズを外したもの(動作が遅いので、レンズのみ利用の為:レンズは2個のネジで簡単に外れる)


Turtlebot3に魚眼レンズ付きカメラを取り付けた写真(後に、時々フリーズするくらい遅いので取り外した)


上記魚眼レンズ付きのカメラで、コースを撮像した写真が下記です。

概ねコースサイドも画角的に良好です。
測定した結果、ロボット前面から約7cmから視野に入っています。
魚眼レンズなので、画像は歪んでおり校正が必要です。動作はかなり遅いので部分切り出しとかリモートPCで画像を表示させない等の工夫が必要。


【SBCでカメラを調整する】
 リモートPC:$roscore
 TurtuleBot3:$ roslaunch turtlebot3_bringup turtlebot3_robot.launch
 TurtuleBot3:$ roslaunch turtlebot3_autorace_traffic_light_camera turtlebot3_autorace_camera_pi.launch

 リモートPC:$ rqt_image_view(カメラ画像が表示される)
 リモートPC:$ rosrun rqt_reconfigure rqt_reconfigure(カメラパラメーター設定画面が表示される。)
       左メニューの camera を選択します。
       表示された画面のパラメーターを触り最適条件を見つけ、その値を記録する。
記録した値に下記フォルダ内の数値を変更します。
<Turtlebot3側>:カメラ設定なのでリモートPC側は関係ない
/catkin_ws/src/turtlebot3_autorace_2020/turtlebot3_autorace_construction/turtlebot3_autorace_construction_camera/calibration/
camera_calibration/camera.yaml




【カメラキャリブレーション】
チェッカーボードをA4サイズの用紙に印刷します。チェッカーボードは、組み込みカメラのキャリブレーションに使用されます。
チェッカーボードはturtlebot3_autorace_camera / data / checkerboard_for_calibration.pdfに保存されています。
 ネット上に多くのチェッカーボードが落ちていますが、サイズ、ブロック数が異なるとキャリブレーション出来ないので指定の物を使用します。
turtlebot3_autorace_camera / launch / turtlebot3_autorace_intrinsic_camera_calibration.launchのパラメーターの値を変更します

 PC:$ roscore
 PC:ssh jun@192.168.1.100
    PW:ja3dxa
 R1:$ roslaunch turtlebot3_autorace_${Autorace_Misson}_camera turtlebot3_autorace_camera_pi.launch
   $roslaunch turtlebot3_autorace_traffic_light_camera turtlebot3_autorace_camera_pi.launch
   上記茶色部分は、ミッション内容で変えてください。

 PC:$ export AUTO_IN_CALIB=calibration
 PC:$ export GAZEBO_MODE=false
 PC:$ roslaunch turtlebot3_autorace_${Autorace_Misson}_camera turtlebot3_autorace_intrinsic_camera_calibration.launch
   $ roslaunch turtlebot3_autorace_traffic_light_camera turtlebot3_autorace_intrinsic_camera_calibration.launch
   上記茶色部分は、ミッション内容で変えてください。


校正が可能レベルになると右側に大きな「CALIBRATE」のボタンが表示されるのでマウスで押します。(xyzの軸が緑に変わるまで色々の角度で))
その後、1分程度経つと更に「Save」ボタンが現れるので保存します。<1分程度かかりますので、じっくり待ちましょう>
同時に「COMMIT」ボタンも表示されるが、キャリブレーション情報をカメラに送るコマンドに様なので使用しない。
<他の資料には、色々な条件で「SAVE」を何回か押して保存し、最終的に「COMMIT」ボタンを押すという物もある。>

「Save」で、/tmp/ にファイルが保存される。<このファイルをコピーする必要があります。>

 $ cd /tmp
 $ tar -zxvf calibrationdata.tar.gz
 $ mv ost.txt ost.ini
 $ rosrun camera_calibration_parsers convert ost.ini camera.yaml
 $ mv camera.yaml ~/.ros/camera_info (ファルダが無ければ作る) 



ここで疑問が生じた。
カメラレンズ歪補正値は、リモートPC上に保存されるが、複数のロボットに搭載されているカメラレンズの歪補正値が有る場合はどのようにして
使い分けをするのか?

<調査>
1.複数回「SAVE」が必要か?
2.「Save」で保存される /tmp/ 内ファイルはどのようになるのか?
3.2台のロボットのカメラキャリブレーションを実行したとき、校正データは上書き保存されてしまうのか?
4.(3)の場合、1台目の校正データのファイル名を変えておけば、上書きされることが無くなるのか、その場合の校正データの使用方法は?
5. /tmp/ 内のデータファイルを、なぜコピーする必要があるのか?

下記は、リモートPC内の内容です。( /tmp/ 内です。)
2回校正したので、キャリブレーションデータファイルが、赤色表示になったのか??<calibrationdata.tar.gz>、関係なかったパッケージ形式の色別け

後に圧縮ファイルだと判明しました。解凍の必要がある。


一度、上記フォルダー内の「calibrationdata.tar.gz」を削除して一からやり直します。<$rm calibrationdata.tar.gz>

再度、実行(キャリブ)した結果は以下の通りです。


「calibrationdata.tar.gz」の中を見てみると、校正中のチェッカーフラグ画像が多数と「ost.txt」、「ost.yaml」があります。


「ost.txt」内部です。


「ost.yaml」内部です。


2回「CALIBRATE」ボタンを押しましたが、ファイルが2個は出来ていない。
「CALIBRATE」ボタンは何回も押せます。「SAVE」ボタンも何回も押せます。「COMMIT」ボタンでアプリが終了します。
「CALIBRATE」ボタンを押すと画像を含めてフリーズ状態になりますが、
  $ roslaunch turtlebot3_autorace_traffic_light_camera turtlebot3_autorace_intrinsic_camera_calibration.launch
を実行した端末をみていると「calibration中」と表示されているので安心できます。「COMMIT」ボタンを押すとアプリが終了し通常プロンプトに
戻ります。

再度キャリブレーションして、ファイル内部の数値が変化するか確認してみます。(少しの変化だとは思われますが)
その場合は、上書き保存されるという事となります。

次の日リモートPCの電源を入れ /tmp/ フォルダ内を確認してみると「calibrationdata.tar.gz」が無くなっている。
コピーする意味はその様な理由なのか。



今回は、上記内容を踏まえてキャリブ後、別ファイル名でコピーして保存後、電源の再投入を行ってみます。
ROS以前にLinux(Ubuntu)のコマンド操作に慣れていないので、まったく素人的に記述していきます。

先ずキャリブ操作画面(上記動画の様にチェッカーフラグ操作)を途中でサイズ変更すると画面フリーズするのでNG

校正後の /tmp/ フォルダ内「calibrationdata.tar.gz」が出来上がっている。


「calibrationdata.tar.gz」内を nano エディタで強制的に覗くと下記の様に見える。(邪道)


当然、ディレクトリでもないので叱られます。


中を見る方法が解らないので、幸いPC内部なのでGUIで見てみますと下記のようになります。(Windows風なのでなじみ深い)
そこで「calibrationdata.tar.gz」をクリックすると何なく中を見る事ができた。


中は、下記の様に多くのPNG画像(チェッカーフラグ)と「ost.txt」、「ost.yaml」がある。


ost.yaml 内部は下記の通りです。



端末上で「calibrationdata.tar.gz」に入れないので、コピーもできなくしかたなくこのままで再起動させてファイルが消えるか確認をする。
再起動後の /tmp/ 内です。見事に消えています。一時保管場所という文字通り「tmpフォルダ」でした。




このページは、次のページへ続きます。