在VC++中获取Rplidar数据并使用OpneCV显示出来
最近时间空闲下来想研究下SLAM,正好看到大牛的文章http://www.cnblogs.com/gaoxiang12/p/3695962.html,其中讲到如何用kinect深度相机做特征点匹配,进而算出位移。由于手头没有深度相机,想着无非是降个维度,使用2D激光雷达来做位置数据的获取,然后在网上继续查找关于激光雷达数据获取及特征匹配的文章,然后看到http://blog.csdn.net/renshengrumenglibing/article/details/8596401,虽然不是用的思岚科技的Rplidar,但是数据应该差异不大,决定从这个文章入手按照作者的套路用Rplidar一步步做数据获取和展现。
开发环境:Visual Studio 2013
OpenCV版本:OpenCV3.0
文章结构
- 配置OpenCV3.0
- 下载Rplidar sdk
- 创建解决方案并添加sdk项目
- Rplidar数据获取
- 使用OpenCV显示数据
先上显示效果图:
http://blog.csdn.net/renshengrumenglibing/article/details/8596401
配置OpenCV3.0
配置OpenCV花了很长时间,分别尝试下载OpenCV2.4.9和OpenCV2.4.10,环境变量都配好,跑测试程序均死在后提示“OpenCV 无法启动此程序,因为计算机中丢失opencv_core249.dll。请尝试重新安装改程序已解决此问题”尝试各种解决方案无果,抱着试试看的态度下载了OpenCV3.0.0,配置过程参考:http://blog.csdn.net/u010009145/article/details/50756751,最后成功,可以用了
下载Rplidar sdk
在思岚官网下载sdk和应用手册 http://www.slamtec.com/cn/Lidar
解压后可以在tools文件夹中先安装驱动,并记下设备对应的串口号,我的是com30
设备的初始化和数据获取,我是直接看的sdk中带的示例程序ultra_simple,直接看main.cpp很好理解。RPlidar的简单使用流程如下,这些代码是从main函数中摘出来的,方便理解
// create the driver instanc
//创建一个RPlidar的实例,一个实例对应一个设备
RPlidarDriver * drv = RPlidarDriver::CreateDriver(RPlidarDriver::DRIVER_TYPE_SERIALPORT);
// make connection... 连接
drv->connect(opt_com_path, opt_com_baudrate;
//startMotor 启动电机
drv->startMotor();
// start scan...
drv->startScan();
//获取一次旋转一周的数据
op_result = drv->grabScanData(nodes, count);
//停止扫描,停止电机,释放实例
drv->stop();
drv->stopMotor();
RPlidarDriver::DisposeDriver(drv);
如果我们新建一个项目,只需要将路径\rplidar_sdk.1.5.6\sdk\sdk中的sdk文件夹中文件拷贝出来就可以。
创建解决方案并添加sdk项目
在VC2013中按照以下目录结构创建解决方案