ROS rtabmap_ros 自作 Stereo Camera.
rtabmap_ros Tutorial で、Stereo カメラが使える とあるので、自作の Stereo Camera でも大丈夫なのか試してみました。
手元に、Logi Cool の USB カメラ C270 が1個あったので、急遽、もう一本買ってきてためしてみます。
始める前に、rtabmap_ros のパラメータで、
Kp/DetectorStrategy=6 (GFTT/BRIEF)
Vis/FeatureType=6 (GFTT/BRIEF)
がデフォルト設定になっています。これは、OpenCV に contrib を組み込まないと使えない事のようです。
introlab/rtabmap_ros
Kp/DetectorStrategy=8 (GFTT/ORB)
Vis/FeatureType=8 (GFTT/ORB)
だと、contrib は、必要ないです。
後述のドリフトの件は、デフォルトの 6(GFTT/BRIEF) を使っていた所為かもしれません。by nishi 2021.12.11
注1) 後日、改めて、新品を追加購入して、新品の C270n X 2 にしました。
古い C270 と新しい、C270n とでは、色の具合ちょっと異なりました。新しい C270n で揃えると、左右の色が同じになりました。
この違いが、後の、StereoCamera のキャリブレーションと、stereo_image_proc の結果に大きく影響してきます。
自作 StereoCamera を試す時は、必ず同じロットの C270n を2個揃えて下さい。
Rviz の strereo_camera/point2/PointCloud2 の表示で驚く程違いがでます。by nishi 2021.10.24
注2) 左右USBカメラの間隔は、空けないで、隣合わせで取り付けて下さい。by nishi 2021.10.26
間隔 無し=2[mm] で、レンズ間隔=7.3[cm] となって、Rviz の Stereo_camera/PointCloud2 の映像で最短焦点距離は、
57[cm] になりました。
以前は、レンズ間隔が、9.2[cm] でした、その時の最短焦点距離 70[cm] でした。
最短焦点距離 70[cm] で、rtabmap_ros でロボットカーを部屋の中で動かすと、近くの物体が認識出来なくて、
動作が不完全でした。
最短焦点距離を、57[cm] にして、なんとか、部屋の中で、rtabmap_ros でロボットカーを動かせるようになりました。
しかし欲を言えば、もっと短い方が良いです。できれば、最短焦点距離 35[cm] 程が良い様です。
注3) カメラの取り付けは、とにかく正確に!!
cameracalibrator.py で、左右のカメラ映像を見比べて、上下のズレ、傾きを限りなく Zero にしてください。
注4) 上記設定とStereoCamera キャリブレーションがうまく行けば、Rviz で StereoCamera/PointCloud2 を表示して、
カメラの後方からみてみると、結構きれいに表示されます。
注5) 結論を言えば、C270 は、カメラ間隔を狭められなくて、画角も狭い(55度) なので、stereo_image_proc を通した、最短焦点距離が、57[cm] 迄しか短くできない。
なので、部屋の中で、自作 Stereo_camera & rtabmap_ros を試すには、適切ではありません。
部屋の中で試すなら、最短焦点距離を短くできる、もっと画角が広くて、カメラの間隔を狭められるカメラをお勧めします。
Jetson Nano 4G、Raspberry pi 4 であれば、CSI カメラを2個繋げられるので、そちらの方が、簡単に、最短焦点距離の短い Stereo Camera を作れると思います。
画角は、80度以上が必要です。
注6) やはり、ロボットに乗せて、rtabmap_ros で使うのであれば、市販のStereo Camera、Depth Camera
を購入したほうが賢明です。
開発環境
PC: Ubuntu Mate 18.04
ROS : Melodic
USB Camera: Logi Cool C270 x 2
1. USBカメラの動作確認。
1個の場合。
PC に USB カメラを挿して、
$ lsusb
...
Bus 003 Device 009: ID 046d:0825 Logitech, Inc. Webcam C270
...
を、確認します。表示されなければ、
$ sudo update-usbids
行います。
OK であれば、