Skip to content
This repository was archived by the owner on Jan 5, 2025. It is now read-only.

Commit 43a351d

Browse files
committed
init
1 parent ba38c9b commit 43a351d

File tree

7,976 files changed

+3041511
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

7,976 files changed

+3041511
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#!/bin/bash
2+
##################
3+
#
4+
#LSD安装编译
5+
#
6+
##################
7+
8+
###安装依赖
9+
10+
sudo apt-get install ros-kinetic-libg2o ros-kinetic-cv-bridge liblapack-dev libblas-dev freeglut3-dev libsuitesparse-dev libx11-dev
11+
sudo apt install libqglviewer-dev-qt4
12+
cd /usr/lib/x86_64-linux-gnu
13+
sudo ln -s libQGLViewer-qt4.so libQGLViewer.so
14+
15+
16+
###创建LSD工作空间
17+
echo "创建LSD工作空间......"
18+
mkdir -p ~/catkin_lsdws/src
19+
cd ~/catkin_lsdws/src/
20+
git clone https://github.com/anchuanxu/LSD.git
21+
cd ~/catkin_lsdws/
22+
catkin_make
23+
##################
24+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
#!/bin/bash
2+
##################
3+
#
4+
#部署LSD
5+
#
6+
##################
7+
8+
###安装依赖
9+
10+
sudo apt-get install ros-kinetic-libg2o ros-kinetic-cv-bridge liblapack-dev libblas-dev freeglut3-dev libsuitesparse-dev libx11-dev
11+
sudo apt install libqglviewer-dev-qt4
12+
cd /usr/lib/x86_64-linux-gnu
13+
sudo ln -s libQGLViewer-qt4.so libQGLViewer.so
14+
###创建LSD工作空间
15+
echo "创建LSD工作空间......"
16+
mkdir -p ~/catkin_lsdws/src
17+
cd ~/catkin_lsdws/src/
18+
read -p "下载链接的lsd_slam.zip文件并解压到~/catkin_lsdws/src目录下 https://yt.droid.ac.cn/xbot-u/vslam-evaluation/blob/master/LSD/lsd_slam.zip ,并按y继续" LSD
19+
if [ $LSD = "y" -o $LSD = "Y" ] ; then
20+
cd ~/catkin_lsdws/
21+
catkin_make
22+
##################
23+
#
24+
#部署Xbot
25+
#
26+
##################
27+
read -p "是否部署过Xobt?请输入[y/n]" answer
28+
if [ $answer = "n" -o $answer = "N" ] ; then
29+
echo "创建Xot工作空间......"
30+
mkdir -p ~/ROS/src
31+
cd ~/ROS/src
32+
git clone https://yt.droid.ac.cn/anchuanxu/simulation_base_environment.git
33+
cd ~/ROS
34+
rosdep install --from-paths src --ignore-src --rosdistro=kinetic -y
35+
catkin_make
36+
##################
37+
#
38+
#启动Xbot
39+
#
40+
##################
41+
gnome-terminal -x bash -c "cd ~/ROS;source devel/setup.bash;roslaunch robot_sim_demo robot_spawn.launch; exec bash"
42+
elif [ $answer = "Y" -o $answer = "y" ] ; then
43+
read -p "部署过Xobt的话请自行启动Xbot并按y继续" start
44+
if [ $start = "y" -o $start = "Y" ] ; then
45+
echo "启动Xobt......"
46+
fi
47+
fi
48+
##################
49+
#
50+
#启动LSD
51+
#
52+
##################
53+
sleep 15s
54+
gnome-terminal -x bash -c "cd ~/catkin_lsdws/;source devel/setup.bash;rosrun lsd_slam_core live_slam /image:=/camera/rgb/image_raw /camera_info:=/camera/rgb/camera_info; exec bash"
55+
sleep 10s
56+
gnome-terminal -x bash -c "cd ~/catkin_lsdws/;source devel/setup.bash;rosrun lsd_slam_viewer viewer; exec bash"
57+
sleep 5s
58+
if [ $answer = "n" -o $answer = "N" ] ; then
59+
gnome-terminal -x bash -c "cd ~/ROS/src/simulation_base_environment/robot_sim_demo/scripts;./robot_keyboard_teleop.py; exec bash"
60+
fi
61+
if [ $answer = "Y" -o $answer = "y" ] ; then
62+
echo "请自行启动Xbot控制脚本"
63+
fi
64+
fi
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
## LSD算法思路初步解析
2+
LSD-SLAM系统整个过程分为三大模块,第一个模块是Tracking,第二个模块是Depth Map Estimation, 第三个模块是Map Optimization
3+
4+
![image](./images/LSD.png)
5+
6+
7+
1\.跟踪部分连续地跟踪摄像机获取的图像,即估计相对于当前的关键帧的刚体变换位姿,其中初始值为前一帧的位姿。
8+
2\.深度地图估计部分将跟踪的帧用于精化或者替代当前关键帧。通过对像素小基线立体的比较滤波和空间规则化来精化深度。如果相机移动过快,通过将已存在的邻近的关键帧的点投影到当前帧来初始化一个新的关键帧。
9+
3\.地图优化部分将作为当前跟踪参考帧的关键帧整合到全局地图中,该关键帧的深度地图将不再进行精化。此外,使用尺度感知的直接图像配准方法估计相对于临近关键帧的相似变换,实现回路闭合和尺度漂移的检测。
10+
### Tracking
11+
tracking部分使用直接法即最小化光度误差,每当获取一张新的帧时,就对它进行Tracking。论文进行了一些小的改进,使用的是方差归一化后的光度误差(variance-normalized photometric error):
12+
13+
![image](./images/LSDTracking.png)
14+
### Depth Map Estimation
15+
这部分主要是用Tracking跟踪后的帧更新或构建深度图,分两种情况:
16+
<br>1.构建关键帧时,则构建新的深度图(Depth Map Creation)
17+
<br>2.不构建关键帧时,则更新当前关键帧的深度图(Depth Map Refinement)
18+
<br>其中,是否构建关键帧是通过计算当前帧与当前关键帧的距离判断的,大于一定距离时才构建新的关键帧。
19+
<br>当我们获得一个新的帧,并且判断不构建新的关键帧,则进行当前关键帧深度图的更新过程。这部分论文中称为基于立体匹配的深度更新(Stereo-Based Depth Map Update),具体可分为以下四个步骤:
20+
<br>1.根据一些标准选择出“好的”像素
21+
<br>2.为每个像素自适应选择最合适的参考帧
22+
<br>3.极线上进行立体匹配
23+
<br>4.深度观测融合
24+
#### 1.选择出“好的”像素
25+
部分论文中称为不确定性估计(Uncertainty Estimation),主要通过建模(对逆深度的不确定度进行估计),并以此为依据挑选出好的像素。
26+
#### 2.为每个像素自适应选择参考帧
27+
挑选好像素后,需要为每个像素找合适的参考帧。为什么需要找合适的参考帧?因为在立体视觉中:
28+
<br>小基线,准确度accuracy高,精度precision低
29+
<br>大基线,准确度accuracy低(有局部最小值,易误匹配),精度precision高
30+
31+
因此,必须尽可能选择距离当前帧较远的帧作为参考帧,但是当极线上超过一定距离还没有匹配到,就需要退而求其次,选择距离较近的、新获得的这些帧作为参考帧。
32+
#### 3.立体匹配策略
33+
在立体匹配的过程中,论文采用了极线段上5个采样点计算SSD误差的方式。采用5个点主要的方式很大程度上提高了匹配的效率。由于这5个点是相邻的,在极线段上移动的时候,每次只需要更新一个点的值,这就非常高效了。
34+
#### 4.深度观测融合
35+
通过当前帧匹配的像素为深度提供一个新的观测值,然后就可以把当前观测的深度融合到关键帧的深度地图中去。
36+
37+
### Map Optimization
38+
这部分在论文中叫建图一致性约束(constraint acquisition),是算法的核心(解决尺度问题)。因为长距离会出现尺度漂移,因此建图一致性约束也就是做闭环检测和全局优化。
39+
40+
单目slam由于它的绝对尺度信息是不能直接得到的(一只眼睛很难确定远近),导致长距离运动之后,会产生巨大的尺度漂移。为了解决这个问题,需要对地图进行全局优化。
41+
<br>首先需要插图关键帧到地图当中,在插入帧的同时,还需要知道两帧之间是如何变换的,由于我们是单目slam,尺度漂移几乎是不可避免的,因此如果在这么”大”的一个尺度上,还是用se(3),可能会导致两帧之间的变换不那么准确,因此LSD放出一个尺度的自由度,使用sim(3)来衡量两帧之间的变换,也就是说,需要找到一个sim(3)群中的变换kesi,使得误差最小。
42+
<br>如何去寻找要插入的位置呢?首先去寻找所有可能相似的关键帧,并计算视觉意义上的相似度,之后对这些帧进行排序,得到最相似的那几帧,某一帧的相似度足够高,那么便将这一帧插入map中,最后执行图优化(g2o中的pose graph optimization),边为连接关系,节点为关键帧,即优化:
43+
44+
![image](./images/LSDMap Optimization.png)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# LSD在仿真xbot上的部署
2+
3+
### 环境
4+
5+
* Ubuntu 16.04
6+
* bro2018fall-codes
7+
* LSD代码(详见LSD部署教程)
8+
* 仿真xbot自带摄像头
9+
10+
### 操作步骤
11+
12+
打开仿真环境:
13+
14+
```
15+
cd catkin_ws/ # catkin_ws为Xbot仿真环境的工作空间
16+
source devel/setup.bash
17+
roslaunch robot_sim_demo robot_spawn.launch
18+
```
19+
再开一个终端
20+
21+
```
22+
cd catkin_lsdws #catkin_lsdws为LSD工作空间
23+
source devel/setup.bash
24+
rosrun lsd_slam_core live_slam /image:=/camera/rgb/image_raw /camera_info:=/camera/rgb/camera_info
25+
```
26+
再开一个终端
27+
28+
```
29+
cd catkin_lsdws #catkin_lsdws为LSD工作空间
30+
source devel/setup.bash
31+
rosrun lsd_slam_viewer viewer
32+
```
33+
再开一个终端
34+
35+
```
36+
cd catkin_ws/ #catkin_ws为Xbot仿真环境的工作空间
37+
source devel/setup.bash
38+
rosrun robot_sim_demo robot_keyboard_teleop.py #启动键盘控制程序
39+
```
40+
控制Xbot移动并建图
41+
42+
![image](./images/LSD+Xbot.png)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
# LSD部署
2+
3+
### 环境
4+
5+
* Ubuntu 16.04
6+
* [LSD代码包](https://yt.droid.ac.cn/xbot-u/vslam-evaluation/blob/master/LSD/lsd_slam.tar)
7+
* [数据集](http://vmcremers8.informatik.tu-muenchen.de/lsd/LSD_room.bag.zip)
8+
9+
### 操作步骤
10+
11+
- 安装依赖
12+
```
13+
mkdir -p ~/catkin_lsdws/src
14+
cd ~/catkin_lsdws/src/
15+
sudo apt-get install ros-kinetic-libg2o ros-kinetic-cv-bridge liblapack-dev libblas-dev freeglut3-dev libsuitesparse-dev libx11-dev
16+
sudo apt install libqglviewer-dev-qt4
17+
cd /usr/lib/x86_64-linux-gnu
18+
sudo ln -s libQGLViewer-qt4.so libQGLViewer.so
19+
```
20+
下载链接的lsd_slam.tar文件并解压到~/catkin_lsdws/src目录下
21+
22+
修改 `~/catkin_lsdws/src/lsd_slam/lsd_slam_core/src/util/settings.cpp` 文件代码` bool displayDepthMap = true `` bool displayDepthMap = false `
23+
24+
- 编译LSD
25+
26+
```
27+
cd ~/catkin_lsdws
28+
catkin_make
29+
```
30+
31+
- 启动LSD
32+
33+
```
34+
cd ~/catkin_lsdws
35+
source devel/setup.bash
36+
rosrun lsd_slam_viewer viewer
37+
```
38+
<br>再开一个终端
39+
```
40+
cd ~/catkin_lsdws
41+
source devel/setup.bash
42+
rosrun lsd_slam_core live_slam image:=/image_raw camera_info:=/camera_info
43+
```
44+
- 运行数据集,测试效果
45+
<br>下载[数据集](http://vmcremers8.informatik.tu-muenchen.de/lsd/LSD_room.bag.zip)并解压缩
46+
<br>在数据集所在目录打开终端
47+
```
48+
rosbag play ./LSD_room.bag
49+
```
50+
<br>部署效果如下:
51+
![image](./images/LSD+Datasets.png)
+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
# LSD算法安装、测试、运行仓库
2+
3+
### 包含内容
4+
- LSD算法理论文档
5+
- LSD部署教程
6+
- lsd安装及bug说明
7+
- LSD部署到Xbot仿真平台教程
8+
- LSD代码包lsd_slam.zip
9+
- 部署LSD+Xbot脚本Install_LSD+Xbot.sh
10+
## 启动Xbot+LSD
11+
12+
### 环境
13+
14+
* Ubuntu 16.04
15+
* bro2018fall-codes
16+
* LSD工作空间(catkin_lsdws)
17+
* 仿真xbot自带摄像头
18+
19+
### 操作步骤
20+
21+
打开仿真环境:
22+
23+
```
24+
cd catkin_ws/ # catkin_ws为Xbot仿真环境的工作空间
25+
source devel/setup.bash
26+
roslaunch robot_sim_demo robot_spawn.launch
27+
```
28+
再开一个终端
29+
30+
```
31+
cd catkin_lsdws #catkin_lsdws为LSD工作空间
32+
source devel/setup.bash
33+
roslaunch lsd_slam_viewer lsd+Xbot.launch
34+
```
35+
再开一个终端
36+
37+
```
38+
cd catkin_ws/ #catkin_ws为Xbot仿真环境的工作空间
39+
source devel/setup.bash
40+
rosrun robot_sim_demo robot_keyboard_teleop.py #启动键盘控制程序
41+
```
42+
控制Xbot移动并建图
43+
44+
![image](./images/LSD+Xbot.png)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
#!/bin/bash
2+
##################
3+
#
4+
#在仿真环境下用Xbot测试lsd-slam
5+
#
6+
##################
7+
read -p "是否部署过Xobt?请输入[y/n]" answer
8+
if [ $answer = "n" -o $answer = "N" ] ; then
9+
echo "创建Xot工作空间......"
10+
mkdir -p ~/ROS/src
11+
cd ~/ROS/src
12+
git clone https://yt.droid.ac.cn/anchuanxu/simulation_base_environment.git
13+
cd ~/ROS
14+
rosdep install --from-paths src --ignore-src --rosdistro=kinetic -y
15+
catkin_make
16+
##################
17+
#
18+
#启动仿真环境和Xbot
19+
#
20+
##################
21+
gnome-terminal -x bash -c "cd ~/ROS;source devel/setup.bash;roslaunch robot_sim_demo robot_spawn.launch; exec bash"
22+
elif [ $answer = "Y" -o $answer = "y" ] ; then
23+
read -p "部署过Xobt的话请自行启动Xbot并按y继续" start
24+
if [ $start = "y" -o $start = "Y" ] ; then
25+
echo "启动Xobt......"
26+
fi
27+
fi
28+
##################
29+
#
30+
#启动LSD
31+
#
32+
##################
33+
sleep 15s
34+
gnome-terminal -x bash -c "cd ~/catkin_lsdws/;source devel/setup.bash;rosrun lsd_slam_core live_slam /image:=/camera/rgb/image_raw /camera_info:=/camera/rgb/camera_info; exec bash"
35+
sleep 10s
36+
gnome-terminal -x bash -c "cd ~/catkin_lsdws/;source devel/setup.bash;rosrun lsd_slam_viewer viewer; exec bash"
37+
sleep 5s
38+
if [ $answer = "n" -o $answer = "N" ] ; then
39+
gnome-terminal -x bash -c "cd ~/ROS/src/simulation_base_environment/robot_sim_demo/scripts;./robot_keyboard_teleop.py; exec bash"
40+
fi
41+
if [ $answer = "Y" -o $answer = "y" ] ; then
42+
echo "请自行启动Xbot控制脚本"
43+
fi
44+
fi
Loading
Loading
162 KB
Loading
Loading
Loading
Binary file not shown.

LSD/READEME.md

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# LSD算法实践
2+
3+
### 包含内容
4+
5+
- LSD各个环境下安装编译教程
6+
- LSD理论简介
7+
- 修改版LSD源码
8+
- 安装脚本
9+
10+
### 源码
11+
12+
##### lsd_slam
13+
14+
[原仓库地址 https://github.com/tum-vision/lsd_slam.git](https://github.com/tum-vision/lsd_slam.git)
15+
16+
##### copyright
17+
18+
![copyright](./copyright.png)
19+

LSD/copyright.png

40.3 KB
Loading

0 commit comments

Comments
 (0)