Single USB Stereo Camera を試す。
OAK-D-Lite が、rtabmap_ros with Depth Camera で、役立たないので、
最近購入した、HBV-1780-2 S2.0 を 使ってみました。
当初、使い方が判らなかったので、困りました。
Web で検索して、画像サイズの指定のしかたで、
1画像に、Stereo 画像の、左右を一緒に Capture して送って来るみたいです。
640x240 -> 320x240 Stereo
下記に、記述がありました。
https://www.programmersought.com/article/17263978832/
Python のサンプルも、下記にありました。
https://www.programmersought.com/article/2094884799/
しかし、このカメラを、ROS and rtabmap_ros with stereo camera で試すには、
どうしたもんじゃろか?
キャリブレーションをしないと使えないのだが?
uvc_camera で、一旦取り込んで、C++ で、分割して、別々に Publish するのか?
uvc_camera の中に組み込むか?
この手のカメラを、Single USB binocular camera と呼んでいるのか!!
オリジナルの uvc_camera に、Single USB camera 部分だけ、追加してみました。
github に公開しました。
tosa-no-onchan/uvc_camera_single
開発環境
ubuntu mate 18.04
ros: melodic
Camera: HBV-1780-2 S2.0
注) noetic & ubuntu mate 20.04 (Jetson Nano ubuntu20.04 and Jetpack4.6) でも、動作確認済。
ビルド方法。
1. original の uvc_camera を git clone します。
$ cd ~/work
$ git clone https://github.com/ros-drivers/camera_umd.git
$ cd camera_umd
$ copy -ar uvc_camera ~/catkin_ws/src
2. uvc_camera_single を git clone して、ダウンロードしたファイルを、全て、上記
~/catkin_ws/src/uvc_camera へコピーします。
$ cd ~/work
$ git clone https://github.com/tosa-no-onchan/uvc_camera_single.git
$ cd uvc_camera_single
$ copy -rf ./* ~/catkin_ws/src/uvc_camera
3. build
$ cd ~/catkin_ws
$ catkin_make
4. 実行
$ rosrun uvc_camera uvc_single_stereo_node
or
$ roslaunch uvc_camera single_stereo_node.launch --screen
なんとか使える様です。
出来れば、caption した 画像 Frame は、左右に並べるよりは、上下に並べてほしかったぞね!!
製造元へのお願いじゃ!!
後で、calibration して、rtabmap_ros with stereo camera で試してみます。
calibration 方法は、下記に、記載してあります。
ROS rtabmap_ros 自作 Stereo Camera
自作 Stereo Camera よりは、calibration が早いのかも?
rtabmap_ros with Stereo Camera も試してみました。
レンズの間隔のTF の値が、自作 Stereo Camera 版のままですが、
それでも、大夫、具合が良いみたいです。
注) rtabmap_ros with Stereo Camera では、左右のレンズ間隔の指定は、ありませんでした。tf-camera の位置だけでした。
この後、nodelet 版にしてみないといかんぞね!!
今は、nodelet 版 でテストしています。
rtabmap-nishi_stereo_outdoor2_bz3_navi.launch
此処に来て、やっと rtabmap_ros 中心のテストが、できるようになりました。
今、問題として出てきたのは、以前にもありましたが、
3D-Map だと、ロボットの高さ位置を、tf-base_footprint で与えないといけないようです。
自作 Turtlebot3 自立走行に向けたプログラム。#7
Vis/EstimationType=1(3D->2D) にしていますが、どうも 3Dのマップになるようで、
ロボットが、高い所に移動したら、床の中にめり込んで行きます。
その後、IMU から、高さを計測して、/odom_fox tf-base_footprint の position z を与えるように組み込んでみました。
詳しくは、上記 "自作 Turtlebot3 自立走行に向けたプログラム。#7" ページをご覧ください。