SLAMシリーズ LSD-SLAMとpointgreyとwebカメラで環境の3次元復元を行う
目的
LSD-SLAMとpointgreyのカメラを使って3Dスキャンを行う
LSD-SLAMとは
Large-Scale Direct Monocular SLAMの略で、特徴点を用いず、直接的に勾配情報を用いることを特徴としたSLAM
環境
ubuntu14.04
ROS indigo
ROS indigoのインストール
HPの通りにする
LSD-SLAMのインストール
githubの2.2の通りにする
まずは、ワークスペースを作成
sudo apt-get install python-rosinstall
mkdir ~/rosbuild_ws
cd ~/rosbuild_ws
rosws init . /opt/ros/indigo
mkdir package_dir
rosws set ~/rosbuild_ws/package_dir -t .
echo "source ~/rosbuild_ws/setup.bash" >> ~/.bashrc
bash
cd package_dir
依存関係のあるシステムをインストール
sudo apt-get install ros-indigo-libg2o ros-indigo-cv-bridge liblapack-dev libblas-dev freeglut3-dev libqglviewer-dev libsuitesparse-dev libx11-dev
githubからcloneしてmake
git clone https://github.com/tum-vision/lsd_slam.git lsd_slam
rosmake lsd_slam
2.3はスキップしました。
OpenCV nonfree moduleのインストール
ROS indigoにはOpneCVのnonfree module が含まれていないので手動でインストールしておきます。
CHECK http://coffeegkgk.hatenablog.com/entry/2015/05/25/112307
sudo apt-get install build-essential cmake
sudo apt-get install libjpeg-dev libtiff4-dev libjasper-dev
sudo apt-get install libgtk2.0-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
cd ~
wget https://github.com/Itseez/opencv/archive/2.4.8.zip
unzip 2.4.8.zip
cd opencv-2.4.8
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_OPENGL=ON ..
cmake -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_OPENGL=ON -D MAKE_INSTALL_PREFIX=/usr/local ..
make
sudo make install
echo "/usr/local/lib" | sudo tee /etc/ld.so.conf.d/opencv.conf
sudo ldconfig
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
opneCVインストール後データセット起動
CHECK https://noshumi.blogspot.com/2016/12/lsd-slamros1.html
その前にlsd_slam_coreの中にあるCMakeLists.txtを少し変えます。
下のコメントアウトされている部分の#を消して、
#add_subdirectory(${PROJECT_SOURCE_DIR}/thirdparty/openFabMap)
#include_directories(${PROJECT_SOURCE_DIR}/thirdparty/openFabMap/include)
#add_definitions("-DHAVE_FABMAP")
#set(FABMAP_LIB openFABMAP )
もう一度rosmakeを実行
rosmake lsd_slam
データセットを↓から好きな場所にダウンロード
http://vmcremers8.informatik.tu-muenchen.de/lsd/LSD_room.bag.zip
そしてterminalを4つ開いて下のコマンドをそれぞれ実行します。
roscore
rosrun lsd_slam_viewer viewer
rosrun lsd_slam_core live_slam image:=/image_raw camera_info:=/camera_info
rosbag play ~/LSD_room.bag #データセットをDLした場所を指定
これでデモが再生されれば成功です。
rosmake lsd_slamでCmakeのエラーが出てたとき
python2.7のファイルを編集
sudo nano /opt/ros/indigo/lib/python2.7/dist-packages/dynamic_reconfigure/parameter_generator.py
check_name(name)
check_description(description) <--消す
self.gen.fill_type(newparam)
self.gen.check_type_fill_default(newparam, 'default', self.gen.defval[paramtype])
self.gen.check_type_fill_default(newparam, 'max', self.gen.maxval[paramtype])
これでもう一度rosmake lsd_slam
キャリブレーションツールのインストール
キャリブレーションでは、個々のカメラの内部パラメータ、外部パラメータを計算します。
正確なSLAMを実行する上で欠かせない工程です。
ROSにもキャリブレーションツールが用意されているので、今回はそちらをインストールします。
rosdep install camera_calibration
rosmake camera_calibration
まずは普通のwebカメラでLSD-SLAM
CHECK https://noshumi.blogspot.com/2016/12/lsd-slamros2.html
ではいよいよLSD-SLAMを実行します。
まずは普通のwebカメラ、今回はlogicoolのwebカメラ使用しました。
ドライバusb-camをインストール&実行
下3つのコマンドは、それぞれ別のターミナルで実行します。
sudo apt-get install ros-indigo-usb-cam
roscore
rosrun usb_cam usb_cam_node
rosrun image_view image_view image:=/usb_cam/image_raw
カメラの映像が表示されればおkです。
キャリブレーション
PTAMのキャリブレーションボードをディスプレイに表示 or 印刷したら実行
これもそれぞれ別のターミナルで
roscore
rosrun usb_cam usb_cam_node
rosrun camera_calibration cameracalibrator.py --size 11x7 --square 0.02 image:=/usb_cam/image_raw
※--sizeは横縦の交点の数, --squareはマス目の大きさで今回は20mm
しばらく色々な角度からキャリブレーションボードを見せていると、calibrateボタンが押せるようになります。そこからまた色々な角度で何回かsaveボタンを押して保存したのち、commitボタンを押してキャリブレーションは完了です。
calibrateを押すとフリーズした状態になることがありますが、しばらく待っていれば復活してきます。
ファイルは/tmpの中のcalibrationdata.tar.gzの中にost.txtとost.yamlとして出力されます。
usb_camを実行すると、unable to open calibration・・・・~/home/username/.ros/camera_info とwarningが出るはずので、この時探している場所に今回つくったost.yamlのファイルの名前をhead_camera.yamlに変えて入れます。
cd ..
cd ..
cd tmp
tar -zxvf calibrationdata.tar.gz
cd calibrationdata.tar.gz
mv ost.yaml head_camera.yaml
mv head_camera.yaml /home/username/.ros/camera_info
前回のyamlファイルがあるのなら古い方の名前を変えておきましょう。末尾に.oldとか付けておくと便利です。
cd /home/okubo14/.ros/camera_info
mv head_camera.yaml head_camera.yaml.old
あと一応最後にキャリブレーション結果の確認しておきましょう。
パラメータが0でなければ成功
rosrun usb_cam usb_cam_node
rostopic echo /usb_cam/camera_info
キャリブファイルを使ってカメラ起動
では、このファイルを使ってカメラを起動します。
もうあるべき場所にキャリブレーションのファイルは移動させたので、ターミナルを2つ開いて以下のコマンドを順番に実行します。
※ここで、[head_camera] does not match name narrow_stereo in file ~~~的なコメントが出ても無視してとりあえずは大丈夫です。
roscore
rosrun usb_cam usb_cam_node
この状態でrostopic listを実行し、/image_rawと/camera_infoのトピック名を調べます。
rostopic list
LSD-SLAMの実行
下の2つ目のコマンドのusb_camとcamera_infoのトピック名を書き換えて、2つのコマンドをさらに実行します。
※usb_cam/image_raw usb_cam/camera_info のところがカメラによって変わります。
rosrun lsd_slam_viewer viewer
rosrun lsd_slam_core live_slam /image:=/usb_cam/image_raw /camera_info:=/usb_cam/camera_info
CHECK https://noshumi.blogspot.com/2016/12/lsd-slam3.html
コマンドまとめ
roscore
rosrun usb_cam usb_cam_node
rosrun lsd_slam_viewer viewer
rosrun lsd_slam_core live_slam /image:=/usb_cam/image_raw /camera_info:=/usb_cam/camera_info
pointgreyのカメラでLSD-SLAM
pointgreyのドライバインストール
roscore
rosrun usb_cam usb_cam_node
rosrun lsd_slam_viewer viewer
rosrun lsd_slam_core live_slam /image:=/usb_cam/image_raw /camera_info:=/usb_cam/camera_info
pointgreyのドライバインストール
まず、ROSが用意してくれているROSindigoのpointgreyのドライバをインストール
http://wiki.ros.org/pointgrey_camera_driver
sudo apt-get install ros-indigo-pointgrey-camera-driver
rosrun pointgrey_camera_driver list_cameras
カメラ起動
カメラ起動
rescore
roslaunch pointgrey_camera_driver camera.launch
この状態でrostopicを確認
rostopic list (image:とcamera_info:を調べる)
rostopic type /camera/iamge (カメラのタイプを見る.)
キャリブレーション
PTAMのキャリブレーションボードをディスプレイに表示 or 印刷したら実行
rosrun camera_calibration cameracalibrator.py --size 11x7 --square 0.02 image:=/camera/image_raw
image:=/camera/image_rawのところ、rostopicでimage:を確認したところ、さっきはusb_cam/image_rawでしたが、pointgreyは/camera/image_rawになってました。
あとはさっきと同じようにキャリブレーションすれば、/tmpの中のcalibrationdata.tar.gzの中にost.txtとost.yamlが出力されます。
キャリブレーションファイルの編集
ここから少しwebカメラの方法と変わって編集が必要になってきます。
以下のフォルダにcfgファイルを作成します。
場所:~/rosbuild_ws/package_dir/lsd_slam/lsd_slam_core/calib
nano ~/rosbuild_ws/package_dir/lsd_slam/lsd_slam_core/calib/FOV_flea3_calib.cfg
ファイルの中身は👇
fx fy cx cy k1 k2 p1 p2
inputWidth inputHeight
"crop" / "full" / "none" / "e1 e2 e3 e4 0"
outputWidth outputHeight
1行目:ptamでcalibした結果(ost.yaml)からの値を入力
2行目:入力画像の大きさ
3行目:crop or 1行目と同じ
4行目:推奨 640 480
camera matrix は3*3の行列で、fx,fy,cx,cyは下の値に対応します。
LSD-SLAM実行
準備が整ったらLSD-SLAM実行します。
それぞれ別のターミナルでコマンドを打ちます。
roscore
roslaunch pointgrey_camera_driver camera.launch
rosrun lsd_slam_viewer viewer
rosrun lsd_slam_core live_slam /image:=/camera/image_raw _calib:=FOV_flea3_calib.cfg
これでうまいことviewerが動いて、点群が見えるようになったら成功です。
便利コマンド
ノードのやり取りが見える便利なコマンドです。
ノード同士がどのようにやり取りしているか見えます。
うまくいかないときも、どのノードが動いてないとか繋がってないとか確認できるのでかなり役に立ちます。
rosrun rqt_graph rqt_graph
おわり
試した結果としてはpoitgreyのカメラは性能が良いあまり、LSD-SLAMで使うとかなり重たかったです。
Author And Source
この問題について(SLAMシリーズ LSD-SLAMとpointgreyとwebカメラで環境の3次元復元を行う), 我々は、より多くの情報をここで見つけました https://qiita.com/okubo999/items/8ba414afc05fb31e53b0著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .