SLAM學習 拼接點雲

2021-09-25 05:20:36 字數 2058 閱讀 7470

根據 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 通過深度學習網路 點與點之間的關聯通過深度學習...