-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathREADME.txt
170 lines (126 loc) · 7.73 KB
/
README.txt
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
166
167
168
169
170
说明: 2015-06-28 by Kint Zhao [email protected]
1.工程依赖的库: artoolkitplus(2d mark的运动跟踪) + opencv(运算库与图像显示)
ros(机器人操作系统indigo hydro) g2o eigen
IDE: Qt creator
2. 硬件平台:turtlebot + usb camera
3. 软件架构说明:
在ROS分布式架构下,usb摄像头采集图像,并发送相应的topic;
turtlebot 在键盘控制下运行,读取相应的速度信息;
最后在同时接受并综合到两信息的情况下,进行EKFSLAM进行数据融合。
4. 文件说明:
/ARTolkitPlus 存放的是artoolkitplus的相应源文件 /include 是包含的相应源码头文件
/image_convert 是用来将opencv处理的图像转换到ros的rviz可以显示识别的形式
/qrslam 主程序文件与相应算法操作文件
/class 定义的用来提取image中 2d mark的操作
qrslam 定义的算法实现文件
main.cpp 主程序
/pub ROS操作中的机器人控制程序
/camera_calibration 用于opencv图像校正的文件
/data_sources 配置文件夹 结果输出
/turtorial_slam2d g2o仿真部分
5 功能设计:
初始化定位 坐标系特征 地图固定
ekfslam算法框架 速度运动模型 天花板观测模型 逆观测模型
闭环检测 g2o:2d 图优化
图像光照补偿 与 多阈值优化策略
主动搜索
gazebo 环境 : 模型设计 + 仿真设计
6 配置参数说明:
高度=292cm-29cm=263-->2.62m
相机校正有不同的结果出现
1) 4×5 26.5mm
5.0417785095242891e+02 0.0000000000000000e+00 3.2095560744042672e+02
0.0000000000000000e+00 5.0211839253022396e+02 2.4002402013102110e+02
0.0000000000000000e+00 0.0000000000000000e+00 1.0000000000000000e+00
dist=[-8.541216e-02 3.559430e-02 -1.212648e-04 2.928131e-03 0.000000e+00]
Average err. of reprojection: 0.380944 pixels (OpenCV error=0.224036)
2) 6*8 24.0cm
4.8803670216488337e+02 0.0000000000000000e+00 3.3343614367151707e+02
0.0000000000000000e+00 4.8416195284531801e+02 2.3790648860285884e+02
0.0000000000000000e+00 0.0000000000000000e+00 1.0000000000000000e+00
-9.2742978271077053e-02 1.0872208126910321e-01 8.1927553576490911e-05 6.6169920915418482e-03
-------------------------------------------------------------------------------------------
4.5367089850887925e+02 0.0000000000000000e+00 3.3599586672205800e+02
0.0000000000000000e+00 4.5226946762347319e+02 2.1850187295097194e+02
0.0000000000000000e+00 0.0000000000000000e+00 1.0000000000000000e+00
-1.3140859932396523e-01 -2.5872208323177265e-01 -8.7802416308985394e-03 5.4069129267498425e-03
---------------------------------------------------------------------------------
7 数据频率说明:
rostopic hz /odom
average rate: 50.807
min: 0.003s max: 0.025s std dev: 0.00223s window: 166
average rate: 50.471
min: 0.000s max: 0.040s std dev: 0.00498s window: 216
rostopic hz /usb_cam/image_raw
average rate: 19.492
min: 0.010s max: 0.071s std dev: 0.00706s window: 462
average rate: 19.383
min: 0.010s max: 0.071s std dev: 0.00719s window: 479
--->>>> 频率不一致,限制算法。。odom需要与image的速率相一致匹配。。 ===> ROS 信息滤波
运动速度不能太大,偏差会增大。
--->>>> 速率协调一致性问题: 拆分slam
1) 同步时,一致 ekf-slam
2) 非同步时,里程积累
```````````````````````````````````````````````````````````````````
之前rosbag record 的数据都是在这样的基础下进行的,应该需要注意: ros 下相机校正。 采集数据时需要注意
<去畸变 param="D">[0.025751483065329935, -0.10530741936574876,-0.0024821434601277623, -0.0031632353637182972, 0.0000]</rosparam>
<内参阵 param="K">[558.70655574536931, 0.0, 316.68428342491319, 0.0, 553.44501004322387, 238.23867473419315, 0.0, 0.0, 1.0]</rosparam>
<rosparam param="R">[1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0]</rosparam>
<rosparam param="P">[558.70655574536931, 0.0, 316.68428342491319, 0.0, 0.0, 553.44501004322387, 238.23867473419315, 0.0, 0.0, 0.0, 1.0, 0.0]</rosparam>
``````````````````````````````````````````````````````````````
8. 协方差说明
协方差值越大表示数据可信度越低,也就是该数据的测量代入误差大。统计特性优化
1) robot运动输入偏差 Mt
2) 运动模型协方差初始值
3) 观测模型方差
9. 显示相关的说明
10. 偏差累积的问题
11. 利用边信息求高度,求焦距 ---》》高度测量可信度 与相机校正可信度
高度差值对应10cm 换算 x: 1cm y: 5-6cm
焦距问题 相机校准的准确性问题
12. 最后是map 应该是在均值化的表示下。
13. 加入robot 显示以后,发现角度计算存在严重的积分误差累积
14 抗扰动判断:利用结算f 与测量f 对比。。-->评判标准
15 讨论时间戳,数据的一致性
1) GMAPPING if(!got_map_ || (scan->header.stamp - last_map_update) > map_update_interval_)
2) 地图是否更新的判断
if(!got_map_ || (scan->header.stamp - last_map_update) > map_update_interval_)
{
updateMap(*scan); //zyh 地图更新
last_map_update = scan->header.stamp;
ROS_DEBUG("Updated the map");
}
16 odom校准
17 固定坐标mark纠偏 || 多mark 线性纠偏
坐标系整体纠偏调整.
18 利用角点方式与mark标示的方式 作为landmark:
1) 提取角点 + 角点描述
19 坡度自适应的情况 :自身量测高度与观测求高度 ++> 实际需要的正确自适应
20 储存数据队列匹配,时间最近匹配
时间的一致性,必须保持,预测与更新必须使用时间戳的时间.
21 ekfslam update 新特征加入时先建立向量表,在向表中均值化后再进行地图更新
22 图像畸变 边界效应.
23 ******* 加入机器人状态观测量 *******
24 相机校正文件加载: camera.h 文件中
ar形式
camf >> xsize >> ysize;
camf >> cc[0] >> cc[1];
camf >> fc[0] >> fc[1];
for(int i = 0; i < 6; i++)
{
camf >> kc[i];
}
camf >> undist_iterations;
opencv形式
Camera::loadOpenCVCalib(const char* filename)
25 相机标定需要多拍一些标定板,满足以下条件会比较好:
1.不同距离上的分布;
2.同一距离上不同姿态的分布;
3.尽量保证标定板覆盖整个屏幕(距离远的话,就多拍照片,还是能够保证标定板覆盖整个屏幕的)
26 时间系统:采取:img-odom
27 图像提取速率 13.3ms ===> 75.4hz
28 运动预测模型的构建: 直线运动/转角度运动/曲线运动
29 换图片时: 要改变方格块的大小值。 p_tracker_marks_->setPatternWidth(2.0);
30 artoolkitplus 使用说明: TrackerSingleMarker需要定义track的图片cols 和 rows
主动搜索的时候要注意..
TrackerSingleMarker* p_tracker_raw_marks_ = new TrackerSingleMarker(image.cols, image.rows, 5, 6, 6, 6, 0);