1. RGB-D SLAM 高博
在 slam3d 项目的源码中,有来自高翔博士的RGB-D SLAM的代码部分,今天对这部分代码进行学习;
源码地址:https://github.com/MuMuJun97/rgbd-slam-tutor2
下载好rgbd-slam-tutor2至本地后,编译第三方库(详见 README.md)
其CMakeLists.txt中:
set( CMAKE_CXX_COMPILER "clang++" )
如果没有clang++,会出现错误:
/bin/sh: 1: clang++: not found
sudo proxychains apt-get update
sudo proxychains apt-get install llvm clang
clang+命令会在/usr/bin/clang++
之后rgbd-slam-tutor2 成功build:
09:32:21: Running steps for project rgbd-slam-tutor2...
09:32:21: Starting: "/usr/bin/make"
[ 61%] Built target rgbd_tutor_lib
[ 69%] Built target exp_mapping
[ 76%] Built target exp_pose_graph
[ 84%] Built target match_orb
[ 92%] Built target run_tracker
[100%] Built target test_pnp
09:32:21: The process "/usr/bin/make" exited normally.
09:32:21: Elapsed time: 00:00.
TUM数据集下载地址:https://vision.in.tum.de/rgbd/dataset/freiburg1/rgbd_dataset_freiburg1_room.tgz
读取参数文件的类
#ifndef PARAMETER_READER_H
#define PARAMETER_READER_H
#include "common_headers.h"
namespace rgbd_tutor
{
struct CAMERA_INTRINSIC_PARAMETERS;
class ParameterReader
{
public:
string filename="./parameters.txt" ;
ParameterReader( )
{
ifstream fin( filename.c_str() );
if (!fin)
{
// try ../parameter.txt
fin.open("../parameters.txt");
if (!fin)
{
cerr<<"parameter file does not exist."<<endl;
return;
}
}
while(!fin.eof())
{
string str;
getline( fin, str );
if (str[0] == '#')
{
// 以‘#’开头的是注释
continue;
}
int pos = str.find('#');
if (pos != -1)
{
//从井号到末尾的都是注释
str = str.substr(0, pos);
}
pos = str.find("=");
if (pos == -1)
continue;
string key = str.substr( 0, pos );
string value = str.substr( pos+1, str.length() );
data[key] = value;
if ( !fin.good() )
break;
}
}
template< class T >
T getData( const string& key ) const
{
auto iter = data.find(key);
if (iter == data.end())
{
cerr<<"Parameter name "<<key<<" not found!"<<endl;
}
return boost::lexical_cast<T>( iter->second );
}
rgbd_tutor::CAMERA_INTRINSIC_PARAMETERS getCamera() const;
public:
map<string, string> data;
};
};
#endif // PARAMETER_READER_H