forked from awesomeleo/SceneLib2
-
Notifications
You must be signed in to change notification settings - Fork 0
/
README
166 lines (142 loc) · 5.28 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
==========================================
SceneLib2 - MonoSLAM open-source library
==========================================
Please also refer to the following links;
http://hanmekim.blogspot.com/2012/10/scenelib2-monoslam-open-source-library.html
https://github.com/hanmekim/SceneLib2
**********************
* What is SceneLib2? *
**********************
SceneLib2 is an open-source C++ library for SLAM originally designed and
implemented by Andrew Davison and colleagues at the University of Oxford.
******************************
* Why is it named SceneLib2? *
******************************
His version, SceneLib 1.0, was released with full source code under the LGPL,
and as SceneLib2 is a reimplemented version of it, I gave the same name with a
new version number to this library.
****************************
* Why is it reimplemented? *
****************************
I reimplemented his version with the following objectives;
1. Understand his MonoSLAM algorithm in code level.
2. Replace older libraries (i.e. VW34, GLOW, VNL, Pthread) with newer ones
(Pangolin, Eigen3, Boost).
3. Support USB camera instead of IEEE1394.
4. Make it more portable and convenient by using CMake and git repository.
******************
* Implementation *
******************
I tried to make it as same as the original version, so that I can easily find
any problems that I might have introduced to it by accident (I didn't even
change most of functions' and variables' name). But, at the same time, I also
tried to make it easier to understand by using different class architectures
and various changes.
To give you the same executable example program like MonoSLAMGlow in
SceneLib 1.0, I implemented a very similar one called MonoSlamSenceLib1, and
again I tried to make it as same as the original version.
**********************
* Notes and Warnings *
**********************
Even though my intention is to make it as a cross-platform library, I only
added and tested it for the following platforms, but, of course, I will
increase its portability continuously (you can check the following platforms
list later on).
* Ubuntu 12.04 LTS - 32bits
* Ubuntu 12.04 LTS - 64bits (thanks to Prof. Davison for testing it)
* Ubuntu 12.10 - 64bits
* Mac OS X 10.9
This library is a research-level software which is still in development. It
will be frequently changed without notification to fix bugs, to add more
features and to make it better.
****************
* Installation *
****************
1. Install various development related packages
$ sudo apt-get install build-essential
$ sudo apt-get install git cmake
$ sudo apt-get install freeglut3-dev libglu-dev libglew-dev
$ sudo apt-get install ffmpeg libavcodec-dev libavutil-dev libavformat-dev libswscale-dev
2. Install Engen3
$ sudo apt-get install libeigen3-dev
3. Install Boost
$ sudo apt-get install libboost-all-dev
4. Install OpenCV
$ cd MY_EXTERNAL_LIBRARIES_DIRECTORY
$ wget http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.4.2/OpenCV-2.4.2.tar.bz2
$ tar xvf OpenCV-2.4.2.tar.bz2
$ cd OpenCV-2.4.2
$ mkdir BUILD
$ cd BUILD
$ cmake ..
$ make -j4
$ sudo make install
5. Install Pangolin
$ cd MY_EXTERNAL_LIBRARIES_DIRECTORY
$ git clone https://github.com/stevenlovegrove/Pangolin.git
$ cd Pangolin
$ mkdir BUILD
$ cd BUILD
$ cmake ..
$ make -j4
$ sudo make install
6. Install SceneLib2
$ cd MY_WORK_DIRECTORY
$ git clone git://github.com/hanmekim/SceneLib2.git SceneLib2
$ cd SceneLib2
$ mkdir BUILD
$ cd BUILD
$ cmake ..
$ make -j4
7. Download an example image sequence
$ cd MY_IMAGE_DIRECTORY
$ wget www.doc.ic.ac.uk/~ajd/Scene/Release/testseqmonoslam.tar.gz
$ tar xvf testseqmonoslam.tar.gz
**************
* How to use *
**************
1-1. Modify the configuration file to use the example image sequence
$ gedit MY_WORK_DIRECTORY/SceneLib2/data/SceneLib2.cfg
> input.mode = 0;
> input.name = MY_IMAGE_DIRECTORY/TestSeqMonoSLAM;
# these are default camera parameters for the example image sequence
> cam.width = 320;
> cam.height = 240;
> cam.fku = 195;
> cam.fkv = 195;
> cam.u0 = 162;
> cam.v0 = 125;
> cam.kd1 = 9e-06;
> cam.sd = 1;
1-2. Modify the configuration file to use a USB camera
$ gedit MY_WORK_DIRECTORY/SceneLib2/data/SceneLib2.cfg
> input.mode = 1;
# change [number] to your camera (e.g. mine is video0)
> input.name = convert:[fmt=RGB24]//v4l:///dev/video[number];
# these are default camera parameters for (Logitech V-U0009),
# not calibrated properly, but it works for now
> cam.width = 320;
> cam.height = 240;
> cam.fku = 195;
> cam.fkv = 195;
> cam.u0 = 162;
> cam.v0 = 125;
> cam.kd1 = 1e-12;
> cam.sd = 1;
2. Run MonoSlamSceneLib1
$ cd MY_WORK_DIRECTORY/SceneLib2/BUILD/examples
$ ./MonoSlamSceneLib1
****************
* Known issues *
****************
There are known issues, and they will be resolved as soon as possible.
* Detected features are slightly different to the original version's.
* Most of member functions and variables are currently public for convenient
debugging, and they will be properly encapsulated later.
*************
* Thanks to *
*************
I really appreciate Professor Andrew Davison for sharing his great achievement,
and I promise him that I will share every findings based on this to help others
who are interested in this field as he is doing continuously in various ways.
Thank you.