根據 rgb-d
影象和相機內參,我們可以計算任何乙個畫素在相機座標系下的位置。同時,根據相機位姿,又能計算這些畫素在世界座標系下的位置。如果把所有畫素的空間座標都求出來,相當於構建一張類似於地圖的東西。
本程式提供了五張
rgb-d
影象,並 且知道了每個影象的內參和外參:
準備了五對影象,位於 slambook/ch5/joinmap
中。在
color/
下有 1.png
到 5.png 五張 rgb
圖,而在
depth/
下有五張對應的深度圖。同時,
pose.txt
檔案給出了五張影象的相機位姿(以t
wc 形式)。位姿記錄的形式是平移向量加旋轉四元數: [
x, y, z, q
x, q
y, q
z, qw]
, 其中 qw
是四元數的實部。例如第一對圖的外參為:
[[ 0
.228993, 0
.00645704, 0
.0287837
, ; 0.
0004327
, ; 0.
113131
, ; 0.
0326832, 0
.993042]
. 下面一段程式,完成兩件事:
(1).
根據內參計算一對
rgb-d
影象對應的點雲;
(2).
根據各張圖的相機位姿(也就是外參),把點雲加起來,組成地圖。並視覺化拼接後的點雲;
cmakelists.txt
cmake_minimum_required( version 2.8 )
project( joinmap )
set( cmake_build_type release )
set( cmake_cxx_flags "-std=c++11 -o3" )
# opencv
find_package( opencv required )
include_directories( $ )
# eigen
include_directories( "/usr/include/eigen3/" )
# pcl
find_package(pcl 1.2 required)
include_directories( $ )
add_definitions( $ )
link_directories($)
add_executable( joinmap joinmap.cpp )
target_link_libraries( joinmap $ $ )
.cpp
#include #include using namespace std;
#include #include #include #include #include // for formating strings
#include #include #include int main( int argc, char** ar** )
// 計算點雲並拼接
// 相機內參
double cx = 325.5;
double cy = 253.5;
double fx = 518.0;
double fy = 519.0;
double depthscale = 1000.0;
cout<
pointcloud::ptr pointcloud( new pointcloud );
for ( int i=0; i<5; i++ )
}pointcloud->is_dense = false;
cout<
SLAM第五講點雲拼接思路筆記
1.用vector和vector定義變數和相機位姿。vectorcolorimgs,depthimgs 彩色圖和深度圖 vector poses 容器的基本使用 2.讀取 1 先設位址,位姿位址就乙個。用 ifstream fin pose.txt 直接讀取。位址有多個,需要在for迴圈裡,先boo...
SLAM學習報告
一 概述 也稱為即時定位與地圖構建,或併發建圖與定位。問題可以描述為 將乙個機械人放入未知環境中的未知位置,是否有辦法讓機械人一邊逐步描繪出此環境完全的地圖,所謂完全的地圖 a consistent map 是指不受障礙行進到房間可進入的每個角落。slam 技術距今已有 30 餘年的發展歷史,但相比...
語義SLAM學習
閱讀了slam學習之旅專欄的一篇文章,邊看邊寫,裡面借鑑了很多文章裡的內容 文章名字叫做語義slam 閱讀精華提煉 1.object centric photometric bundle adjustment with deep shape prior 通過深度學習網路 點與點之間的關聯通過深度學習...