-
Notifications
You must be signed in to change notification settings - Fork 8
kintzhao/cv-slam
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
说明: 2015-06-28 by Kint Zhao yhzhao_hit@163.com 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);
About
5 point;ekf;gazebo;g2o;loop closure;
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published