用Cartographer做二维的激光SLAM,用杉川给的ROS例子发布LaserScan数据,发现在Rviz中显示的数据,本来应该是平直的墙变成弧形的,建图也是混乱的,如下图:

研究杉川的ROS例子,转换过程在ltme_node.cpp里,发现参数有些问题,相关代码如下:

const int LidarDriver::DEFAULT_SCAN_FREQUENCY = 15;
const double LidarDriver::ANGLE_MIN_LIMIT = -2.356;
const double LidarDriver::ANGLE_MAX_LIMIT = 2.356;
const double LidarDriver::DEFAULT_ANGLE_EXCLUDED_MIN = -3.142;
const double LidarDriver::DEFAULT_ANGLE_EXCLUDED_MAX = -3.142;
const double LidarDriver::RANGE_MIN_LIMIT = 0.05;
const double LidarDriver::RANGE_MAX_LIMIT = 30;int beam_count = 0;
switch (scan_frequency) {case 10: beam_count = 3072; break;case 15: beam_count = 2048; break;case 20: beam_count = 1536; break;case 25:case 30: beam_count = 1024; break;default: beam_count = 2048; break;
}
int beam_index_min = std::ceil(angle_min_ * beam_count / (2 * M_PI));
int beam_index_max = std::floor(angle_max_ * beam_count / (2 * M_PI));
int beam_index_excluded_min = std::ceil(angle_excluded_min_ * beam_count / (2 * M_PI));
int beam_index_excluded_max = std::floor(angle_excluded_max_ * beam_count / (2 * M_PI));sensor_msgs::LaserScan laser_scan;
laser_scan.header.frame_id = frame_id_;
laser_scan.angle_min = angle_min_;
laser_scan.angle_max = angle_max_;
laser_scan.angle_increment = 2 * M_PI / beam_count * average_factor_;
laser_scan.time_increment = 1.0 / scan_frequency / beam_count * average_factor_;
laser_scan.scan_time = 1.0 / scan_frequency;
laser_scan.range_min = range_min_;
laser_scan.range_max = range_max_;

发现参数里都用的2*M_PI(360度),看着没什么问题,但是杉川3i-T1这款雷达是270度的扫描范围的,所以用360度就有问题了,需要改成270度的,如下:

//int beam_index_min = std::ceil(angle_min_ * beam_count / (2 * M_PI));
//int beam_index_max = std::floor(angle_max_ * beam_count / (2 * M_PI));
int beam_index_min = std::ceil(angle_min_ * beam_count / (4.712));
int beam_index_max = std::floor(angle_max_ * beam_count / (4.712));
//int beam_index_excluded_min = std::ceil(angle_excluded_min_ * beam_count / (2 * M_PI));
//int beam_index_excluded_max = std::floor(angle_excluded_max_ * beam_count / (2 * M_PI));
int beam_index_excluded_min = std::ceil(angle_excluded_min_ * beam_count / (4.712));
int beam_index_excluded_max = std::floor(angle_excluded_max_ * beam_count / (4.712));sensor_msgs::LaserScan laser_scan;
laser_scan.header.frame_id = frame_id_;
laser_scan.angle_min = angle_min_;
laser_scan.angle_max = angle_max_;
//laser_scan.angle_increment = 2 * M_PI / beam_count * average_factor_;
laser_scan.angle_increment = (4.712) / beam_count * average_factor_;
laser_scan.time_increment = 1.0 / scan_frequency / beam_count * average_factor_;
laser_scan.scan_time = 1.0 / scan_frequency;
laser_scan.range_min = range_min_;
laser_scan.range_max = range_max_;

再次测试还是有问题,扫描出的仍然是弧形的,继续跟代码,最后发现接收到的每块数据的点数不对,研究SDK的说明:

最后发现ROS的例子虽然可以设置扫描频率,但是只是数据解析这改变了,设备的扫描频率并没有改变……,先用官方软件改完频率,再用ROS的例子跑,终于正常了,建图效果还不错:

使用杉川3i-T1单线激光雷达和Cartographer库SLAM问题及解决相关推荐

  1. 激光雷达和V2X技术

    激光雷达和V2X技术

  2. 使用二维激光雷达和cartographer_ros实现实时SLAM

    在前面已经完成了cartographer_ros的安装和demo的运行了.接下来,就要放到机器人上,实时进行SLAM了. 前一篇内容的链接如下: Cartographer_ros的下载.配置及编译与问 ...

  3. 激光雷达和IMU联合标定包 lidar_IMU_calib 基于RS-32的扩展

    前段时间参与一个项目需要进行激光雷达和imu的外参标定,发现目前网上开源的标定包只有浙江大学开源的方案-lidar_IMU_calib.lidar-align等少数几种,其中lidar-align听说 ...

  4. 激光雷达和3D点云算法

    文章目录 1.1 激光雷达硬件平台 1.2 激光雷达原理 1.3 三维激光系统研发难点 1.4 点云应用方向 1.5 点云分类,点云分割,点云特征提取(pointnet++) 1.6 点云补全(PF- ...

  5. hector-slam之杉川雷达配置过程

    hector-slam之杉川雷达配置过程 一.配置环境(安装驱动) 1.系统环境:ubuntu16.04+ROS-kinetic 2 .安装 ROS-kinetic 详细说明过程 http://wik ...

  6. 【EHub_tx1_tx2_E100】Ubuntu18.04 + ROS_ Melodic + 万集716 单线激光 测试

    简介:介绍 万集716 单线激光 在EHub_tx1_tx2_E100载板,TX1核心模块环境(Ubuntu18.04)下测试ROS驱动,打开使用RVIZ 查看点云数据,本文的前提条件是你的TX1里已 ...

  7. 【EHub_tx1_tx2_A200】Ubuntu18.04 + ROS_ Melodic + 锐驰LakiBeam 1L单线激光 雷达评测

    大家好,我是虎哥,最近这段时间,又手欠入手了锐驰LakiBeam 1L激光雷达,实在是性价比太优秀,话说,最近激光雷达圈确实有点卷.锐驰官网的资料已经很丰富,我这里总结一下自己的简单测试经验,分享给大 ...

  8. walking机器人入门教程-视觉转激光建图-cartographer算法建图

    系列文章目录 walking机器人入门教程-目录 walking机器人入门教程-硬件清单 walking机器人入门教程-软件清单 walking机器人入门教程-测试底盘 walking机器人入门教程- ...

  9. 拓展模块使用教程和心得(7):3irobotix杉川Delta-1A激光雷达的STM32F407HAL驱动

    成就更好的自己 随着现代智能化设备程度的提高,激光雷达已经是在智能控制与检测领域的极其常用的智能化传感器,今天就来介绍一下3irobotix公司的Delta-1A激光雷达. Delta-1A激光雷达是 ...

最新文章

  1. Datawhale组队学习周报(第002周)
  2. R语言stringr包str_extract函数检查数据是否包含特定模式实战
  3. Node.js:get/post请求、全局对象、工具模块
  4. 数据库内核杂谈 - 一小时实现一个基本功能的数据库
  5. 傅里叶级数FS, 离散傅里叶变换DFT
  6. hadoop伪分布式模式_Hadoop模式介绍-独立,伪分布式,分布式
  7. python numeric_Python pandas.to_numeric函数方法的使用
  8. LeetCode 1610. 可见点的最大数目(atan2函数求夹角)
  9. Windows Moible, Wince 使用.NET Compact Framework的进行蓝牙(Bluetooth)设备配对的开发
  10. win7屏幕录制软件psr.exe使用教程(转)
  11. django后台集成富文本编辑器Tinymce的使用
  12. Android开发之桌面快捷键使用细则(原创)
  13. 迈克尔·霍利:当我看到人们急着加入新行列、抛弃高度发展的老技术时,我就感到很伤心
  14. Vin码识别车牌识别检测-年检又没过关,总是卡在尾气
  15. JSP 实用程序之简易图片服务器
  16. FS68001 全新原装 SOP8 无线充电供电IC 无线充电芯片 无线输电芯片5W方案
  17. [机器学习] - 岭回归与Lasso回归
  18. 五年级计算机教学要点,五年级信息技术教学工作计划
  19. 机器学习基础——香农熵、相对熵(KL散度)与交叉熵
  20. 【2017年】阿里巴巴算法笔试第二题

热门文章

  1. hdu - 1789 题解
  2. 解决一个JAVA小问题
  3. phpstudy端口被占用
  4. BP神经网络的详细推导
  5. DoNet:浅淡对delegate的理解
  6. 开源CRM+SaaS云服务的生态模式能否撬动中国管理软件市场?
  7. HTML期末作业课程设计大作业~环境保护学生网页设计作业源码(HTML+CSS)
  8. Qt深入浅出(十五)QTableView
  9. Linux常用命令及演示
  10. ANTLR学习(三)antlr的功能