ORB-SLAMノートパソコンカメラ

17369 ワード

環境:Ubuntu 14.04+ROS indigo+ORB-SLAM 2(Thinkpad T 460 s)
1.ORB-SLAMをインストールする:
Pangolin
Pangolinはいくつかの依存ライブラリがあって、ヒントに従ってインストールします
git clone https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
mkdir build
cd build
cmake ..
make -j

OpenCV
2.4.8バージョン、2.4.11バージョンはすべて使うことができて、3.2バージョンはテストしていないで、同じくするべきです
注意OpenCVの互換性には常に問題があり、ヘッダファイルを含むパスは各バージョンで変化する.
そのためsourceからコンパイルするのが比較的に良くて、コンピュータの中でいくつかの常用バージョンのOpenCVをコンパイルすることができて、後でアンインストールしたいと思って、直接buildディレクトリの中でsudo make uninstallすればいい、インストールしたいと思って、buildディレクトリの中でsudo make install、このように異なるバージョンを切り替えるのは比較的に速いです.
Eigen
sudo apt-get install libeigen3-dev

Eigenはヘッダファイルのみのライブラリであり、デフォルトでは/usr/include/eigen 3/にインストールされているが、Eigenの位置に問題がしばしばあるため、CMakeLists.txtはこのライブラリが見つからないので、ORB-SLAMはFindeigen 3を提供した.cmakeファイルはEigen 3を探すのに役立ち、自分のプロジェクトでもこのファイルを使ってEigenライブラリの場所を探すのに役立ちます.
DBOwとg 2 o
この2つのライブラリORB-SLAMのThirdpartyディレクトリには、ORB-SLAMソースコードをダウンロードして提供するスクリプトを使用すればよい.
ORB-SLAMをROSのワークパスcatkin_にインストールwsでは、ROSの原理を理解していない必要があるROS公式サイトに行ってBeginner Level Tutorialを見終わった.
cd catkin_ws/src
git clone https://github.com/raulmur/ORB_SLAM2.git

ORB-SLAMディレクトリの下のbuildを実行します.shスクリプト:
cd ORB-SLAM2
./build.sh
// build.sh
echo "Configuring and building Thirdparty/DBoW2 ..." cd Thirdparty/DBoW2 mkdir build cd build cmake .. -DCMAKE_BUILD_TYPE=Release make -j cd ../../g2o echo "Configuring and building Thirdparty/g2o ..." mkdir build cd build cmake .. -DCMAKE_BUILD_TYPE=Release make -j cd ../../../ echo "Uncompress vocabulary ..." cd Vocabulary tar -xf ORBvoc.txt.tar.gz cd .. echo "Configuring and building ORB_SLAM2 ..." mkdir build cd build cmake .. -DCMAKE_BUILD_TYPE=Release make -j

Dbow,g 2 o,ORB-SLAMのコンパイルを完了し、Dbow辞書ファイルを解凍する.ORB-SLAM起動時にも、この100 M以上のファイルを読み込む必要があり、比較的時間がかかる.
 
2.ノート型カメラの取り付けとカメラの標定
1.博世社の「usb_cam」:A ROS Driver for V 4 L USB Camerasを使用
cd catkin_ws/src
git clone https://github.com/bosch-ros-pkg/usb_cam.git
cd ../
catkin_make

標定が必要な白黒の碁盤をダウンロードし、印刷してタブレットに貼る.
2.ROSカメラ標定パッケージのコンパイル
rosdep install camera_calibration
rosmake camera_calibration

3.usb_を起動するcam、ノートパソコンカメラの画像を取得
// sudo apt-get install ros-indigo-usb-cam optional      usb_cam     
roslaunch usb_cam usb-cam-test.launch

4.標定プログラムの起動
rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.025 image:=/usb_cam/image_raw camera:=/usb_cam

標定界面が出現すると、x(左右)、y(上下)、size(前後)、skew(傾斜)などのように碁盤を移動する、x,y,size,skewの進捗バーが緑の位置になるまで移動する.
このときCALIBRATEボタンを押すことができ、しばらく待ってから標定を完了することができます.
完了後Commit、端末後に結果yamlファイルアドレスが表示されます.開いたらTUM 1.yamlのフォーマット変更、mycamと命名yaml./home/shang/catkin_にコピーws/src/ORB_SLAM 2/Examples/Monocular/ディレクトリの下
ただcameraのサイズを加える必要がありますCamera.widthとCamera.height
私のT 460 sカメラの標定結果とORB-SLAMパラメータは
%YAML:1.0

#--------------------------------------------------------------------------------------------
# Camera Parameters. Adjust them!
#--------------------------------------------------------------------------------------------

# Camera calibration and distortion parameters (OpenCV) 
Camera.fx: 626.3131886043523
Camera.fy: 624.0872390416225
Camera.cx: 280.8331825622062
Camera.cy: 234.9590765749035

Camera.k1: 0.1226796723026339
Camera.k2: -0.1753096021786491
Camera.p1: 0.003319071389844154
Camera.p2: -0.01267716347709299
Camera.k3: 0

Camera.width: 640
Camera.width: 480

# Camera frames per second 
Camera.fps: 30.0

# Color order of the images (0: BGR, 1: RGB. It is ignored if images are grayscale)
Camera.RGB: 1

#--------------------------------------------------------------------------------------------
# ORB Parameters
#--------------------------------------------------------------------------------------------

# ORB Extractor: Number of features per image
ORBextractor.nFeatures: 1000

# ORB Extractor: Scale factor between levels in the scale pyramid     
ORBextractor.scaleFactor: 1.2

# ORB Extractor: Number of levels in the scale pyramid    
ORBextractor.nLevels: 8

# ORB Extractor: Fast threshold
# Image is divided in a grid. At each cell FAST are extracted imposing a minimum response.
# Firstly we impose iniThFAST. If no corners are detected we impose a lower value minThFAST
# You can lower these values if your images have low contrast            
ORBextractor.iniThFAST: 20
ORBextractor.minThFAST: 7

#--------------------------------------------------------------------------------------------
# Viewer Parameters
#--------------------------------------------------------------------------------------------
Viewer.KeyFrameSize: 0.05
Viewer.KeyFrameLineWidth: 1
Viewer.GraphLineWidth: 0.9
Viewer.PointSize:2
Viewer.CameraSize: 0.08
Viewer.CameraLineWidth: 3
Viewer.ViewpointX: 0
Viewer.ViewpointY: -0.7
Viewer.ViewpointZ: -1.8
Viewer.ViewpointF: 500

 
3. ノートブックカメラを使用してORB-SLAMを実行
これで準備が完了する.
1.環境変数にORB-SLAMのROSパケットパスを追加する
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/shang/catkin_ws/ORB_SLAM2/Examples/ROS // you should change /home/shang/catkin_ws to your catkin workspace

2.ORB-SLAMをコンパイルするROSノード
cd src/ORB_SLAM2/Examples/ROS/ORB_SLAM2
mkdir build
cd build
cmake .. -DROS_BUILD_TYPE=Release
make -j

3.この一歩が一番!
ORB ROSノード購読のtopicとusb_camが発表したtopicの名前は違います!
2つの方法があります.1つ目は手間がかかりますが、ROSの仕事の過程を理解するのに役立ちます.2つ目は簡単です.ORB_SLAMは、そのサブスクリプションのコードを変更し、再コンパイルします.
方法1:
カスタムROSパッケージを作成し、ORB-SLAMのROSノードにノートパソコンカメラの公開画像のtopicを購読させる
問題は、ORB-SLAM ROSノードが購読するtopicが/camera/image_view、ノートブックカメラ画像ストリームパブリッシュtopicは/usb_cam/image_raw、これらはrostopic list-v/rosnode listで見ることができる.
そのため、自分でROS nodeプログラムを書いて、この2つのtopicを結合して、私たちは自分でros packgeを再定義することを選択します.
cd catkin_ws/src
catkin_create_pkg orb_image_transport image_transport cv_bridge
cd ..
catkin_make
cd orb_image_transport
gedit orb_image_converter.cpp

orb_image_converter.cppファイルはノートパソコンのカメラの画像publishをtopicに担当して、ORB-SLAMにこのtopicを購読させます
#include 
#include 
#include 
#include 
#include  //include the headers for OPENCV's image processing and GUI module
#include   //
 
static const std::string OPENCV_WINDOW = "Image window";   //define show image gui
 
class ImageConverter
{
  ros::NodeHandle nh_;                    //define Nodehandle
  image_transport::ImageTransport it_;    //use this to create a publisher or subscriber
  image_transport::Subscriber image_sub_; //
  image_transport::Publisher image_pub_;
   
public:
  ImageConverter()
    : it_(nh_)
  {
    // Subscrive to input video feed and publish output video feed
    image_sub_ = it_.subscribe("/usb_cam/image_raw", 1,
      &ImageConverter::imageCb, this);
    //image_pub_ = it_.advertise("/image_converter/output_video", 1);
    image_pub_ = it_.advertise("/camera/image_raw", 1);
    cv::namedWindow(OPENCV_WINDOW);    //Opencv HighGUI calls to create/destroy a display window on start-up / shutdon
  }
 
  ~ImageConverter()
  {
    cv::destroyWindow(OPENCV_WINDOW);
  }
 
  void imageCb(const sensor_msgs::ImageConstPtr& msg)
  {
    cv_bridge::CvImagePtr cv_ptr;
    try
    {
      cv_ptr = cv_bridge::toCvCopy(msg, sensor_msgs::image_encodings::BGR8);
    }
    catch (cv_bridge::Exception& e)
    {
      ROS_ERROR("cv_bridge exception: %s", e.what());
      return;
    }
    cv::imshow(OPENCV_WINDOW, cv_ptr->image);
    cv::waitKey(3);
     
    // Output modified video stream
    image_pub_.publish(cv_ptr->toImageMsg());
  }
};
 
int main(int argc, char** argv)
{
  ros::init(argc, argv, "image_converter");
  ImageConverter ic;
  ros::spin();
  return 0;
}

CMakeLists.txtファイルの最後の追加
add_executable(orb_image_converter orb_image_converter.cpp)
target_link_libraries(orb_image_converter ${catkin_LIBRARIES} ${OpenCV_LIBRARIES})

catkin_makeの後ですべての仕事を完成しました.
ここではカスタムメッセージタイプは使用されていませんので、Packageは必要ありません.xmlとCMakeLists.txtは別の変更をします.
最後の実行でORB-SLAMのノートブックカメラでの実行を完了
roslaunch usb_cam usb_cam-test.launch

rosrun orb_image_transport orb_image_converter

rosrun ORB_SLAM2 Mono /home/shang/catkin_ws/src/ORB_SLAM2/Vocabulary/ORBvoc.txt /home/shang/catkin_ws/src/ORB_SLAM2/Examples/Monocular/mycam.yaml // change /home/shang to your directory


1つのスクリプトを使用して、すべてのノードを実行することもできます.
demo.sh
gnome-terminal -x bash -c "rosrun orb_image_transport orb_image_converter; exec $SHELL"

gnome-terminal -x bash -c "rosrun ORB_SLAM2 Mono /home/shang/catkin_ws/src/ORB_SLAM2/Vocabulary/ORBvoc.txt /home/shang/catkin_ws/src/ORB_SLAM2/Examples/Monocular/mycam.yaml
; exec $SHELL"

roslaunch usb_cam usb_cam-test.launch

直接実行./demo.shで完了
 
方法2:
その後、この方法はあまりにも愚かで、博世のROSカメラ駆動パッケージusbをインストールしていることに気づいた.cam以降、カメラの画像が/usb_に公開されます.cam/image_raw、したがって、ORBのコードで購読されたtopicは/camera/image_からrawを/usb_に変更cam/image_rawでいい、ROSディレクトリの下のros_mono.ccファイルで修正すれば、両目、深さ、AR demoと同じです.
これにより、以下の2つのコマンドを使用するだけでよい.
roslaunch usb_cam usb_cam-test.launch
rosrun ORB_SLAM2 Mono /home/shang/catkin_ws/src/ORB_SLAM2/Vocabulary/ORBvoc.txt /home/shang/catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/mycam.yaml

 
参照先:
1. http://www.jianshu.com/p/c3e8c88edb64
2. http://www.cnblogs.com/li-yao7758258/p/5912663.html
 
転載先:https://www.cnblogs.com/shang-slam/p/6733322.html