VLP-16 & HDL-64E激光雷达

主要参数:

VLP-16基本特性

稍微介绍一下,扫描频率越高,短时间可以获取更多数据,在机器人运动速度快的时候可以获取连续性较好的数据,有利于SLAM的实时性;测距范围越广,意味着盲区越少;角度分辨率与两各相邻点云夹角有关,物体距离越远,角度分辨率越低,得到的相邻点云距离就越远,点云就会越稀疏。这里需要注意的一点,对于不同雷达,垂直角分辨率不一定是均匀分布,例如HDL-64E。

测试环境:
Ubuntu16.04+Kinetic

原理简介

velodyne VLP-16 coordinate system

激光雷达,是以发射激光束探测目标的位置等特征量的雷达系统。如图所示,描述了激光雷达解算三维坐标的原理。下面我们将从硬件开始,介绍一下主要的原理。

Firing Laser Sequence Timing

激光雷达首先会按照一定顺序发射激光线束,具体顺序参见表1中的laser_id,垂直方向上是跳跃发射,这样避免邻近的干扰,发射时序参见上图,发射与充电16束激光的周期为55.296us;然后,激光雷达内部马达会按照一定的转速(300-1200 r/min,以60为间隔,通常使用600r/min,对应频率10Hz,对应水平角分辨率0.2度)进行旋转,0.1s旋转1圈获取一帧数据。

表1:vertical angle,laser id,ring id of VLP-16

ring id 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
vertiacl angle −15∘-15^\circ−15∘ −13∘-13^\circ−13∘ −11∘-11^\circ−11∘ −9∘-9^\circ−9∘ −7∘-7^\circ−7∘ −5∘-5^\circ−5∘ −3∘-3^\circ−3∘ −1∘-1^\circ−1∘ 1∘1^\circ1∘ 3∘3^\circ3∘ 5∘5^\circ5∘ 7∘7^\circ7∘ 9∘9^\circ9∘ 11∘11^\circ11∘ 13∘13^\circ13∘ 15∘15^\circ15∘
laser id 0 2 4 6 8 10 12 14 1 3 5 7 9 11 13 15

然后切换到软件层面,我们比较关心的一个问题是数据。那么,旋转1圈得到的数据是怎么定义的呢?激光雷达每次得到"一包数据(data packet,1284bytes)",包含24个发射周期(384个点),具体的数据结构见下文.pcap描述。那么1圈数据是多少数据包呢?用时间计算一下,一圈大概是75.3包。ROS订阅的激光数据是通过velodyne_drive处理之后,收集组包得到的,感兴趣的同学可以看看源程序,里面还有一些数据结构以及处理方法。

参数配置

  1. 配置主机IP
    点击主机网络设置,编辑以太网有线连接;

    主机IP设置

    将IP地址改为与激光雷达同一网段(192.168.1.x),子网掩码为255.255.255.0,注意不要与激光雷达IP冲突,激光雷达的IP为192.168.1.201;

  2. 配置VLP-16

    VLP-16参数配置

使用方法

参考Ros Wiki:http://wiki.ros.org/velodyne

  1. 安装驱动

    sudo apt-get install ros-kinetic-velodyne
    
  2. 新建ROS工程

    mkdir -p data_velodyne/src
    cd data_velodyne/src
    git clone https://github.com/ros-drivers/velodyne.git
    rosdep install --from-paths src --ignore-src --rosdistro kinetic -y #安装工作空间src路径下所有功能包的依赖项
    cd ..
    catkin_make_isolated --install
    source ~/data_velodyne/devel_isolated/setup.bash
    
  3. 启动采集程序

    roscore
    roslaunch velodyne_pointcloud VLP16_points.launch
    
  4. 记录数据包

    rosbag record -o /data_velodyne/bags/data_velodyne /velodyne_points
    
  5. 可视化(rviz)

    rosrun rviz rviz -f velodyne
    

    在rviz中Add PointCloud2,输入topic /velodyne_points订阅话题信息;

3D点云可视化

最后,自己借助shell脚本封装程序,实现一键采集并录制数据,源码如下:

data_velodyne

数据格式

  • .pcap(原始数据格式)

    激光雷达数据帧

    pcap文件是常用的数据包存储格式,总体结构是文件头-数据包头1-数据包1-数据包头2-数据包2…,作为velodyne专用的数据格式,解析较为麻烦,一般在程序设计中都会采用其他格式。如上图所示,每一帧的数据长度固定为1248字节,包括前42字节的数据包标识、12组数据包、4字节时间戳和最后两字节雷达型号参数;12组数据包中前两字节为数据包的开始标识(0xFFEE)、接下去两字节为当前旋转角度值和连续32x(2字节的距离值+1字节的激光反射强度值)字节的距离信息,其中32x3 字节分别为雷达两次获取探测信息,每个数据包开头所携带的旋转角度是指当前数据包前16x3字节对应的角度,而后16x3字节对应的旋转角度激光雷达没有直接给出,需要通过计算前后两次旋转角度然后求取平均值获得。

  • .txt/.xyz/.pts/.csv(ASCII)
    读写方便,但是数据读取较慢且占用大量空间,对海量点云数据的存储和处理较困难。

    X Y Z R G B
    ...
    
  • .las
    由美国摄影测量与遥感协会提出,目前通用的点云数据格式,开放的二进制数据格式,只能用存储空间相对较小,但读写需要专业软件。

  • .pcd
    Point Cloud Library定义格式,包含文件头及点云数据。

    # .PCD v.7 - Point Cloud Data file format
    VERSION .7 #指定pcd文件版本
    FIELDS x y z rgb #维度与字段
    SIZE 4 4 4 4 #各字段字节大小
    TYPE F F F F #字段类型
    COUNT 1 1 1 1 #各维度包含元素数目
    WIDTH 213 #点云数据集宽度
    HEIGHT 1 #点云数据集高度
    VIEWPOINT 0 0 0 1 0 0 0 #点云的获取视点
    POINTS 213 #点云总数
    DATA ascii #数据类型
    0.93773 0.33763 0 4.2108e+06 #点数据
    0.90805 0.35641 0 4.2108e+06
    
  • ROS中的消息格式

    • sensor_msgs/LaserScan

      # 测量的激光扫描角度,逆时针为正
      # 设备坐标帧的0度面向前(沿着X轴方向)Header header
      float32 angle_min        # scan的开始角度 [弧度]
      float32 angle_max        # scan的结束角度 [弧度]
      float32 angle_increment  # 测量的角度间的距离 [弧度]
      float32 time_increment   # 测量间的时间 [秒]
      float32 scan_time        # 扫描间的时间 [秒]
      float32 range_min        # 最小的测量距离 [米]
      float32 range_max        # 最大的测量距离 [米]
      float32[] ranges         # 测量的距离数据 [米] (注意: 值 < range_min 或 > range_max 应当被丢弃)
      float32[] intensities    # 强度数据 [device-specific units]
      
    • sensor_msgs/PointCloud

      #This message holds a collection of 3d points, plus optional additional information about each point.
      #Each Point32 should be interpreted as a 3d point in the frame given in the header
      Header header
      geometry_msgs/Point32[] points  #Array of 3d points
      ChannelFloat32[] channels       #Each channel should have the same number of elements as points array, and the data in each channel should correspond 1:1 with each point
      

      在结合ROS使用的时候,我们常常将数据记录到.bag文件中,若需要其他格式的点云,我们可以进行对应的转换,例如需要.pcd格式的点云文件,则运行以下命令即可:

    rosrun pcl_ros bag_to_pcd data_velodyne.bag /velodyne_points pcds
    

    这样,转换出来的pcd文件就会存到指定的目录下。

pcd格式点云


参考资料

[1]. Velodyne VLP-16

[2]. velodyne_driver

[3]. velodyne VLP-16线激光雷达驱动程序、相位锁、时钟同步测试总结

[4]. Velodyne VLP-16激光雷达数据格式解析

[5]. velodyne:激光雷达pcap文件格式及写入、数据解析

[6]. PointXYZIR

SLAM传感器篇:Velodyne激光雷达相关推荐

  1. SLAM传感器篇:深度相机

    深度相机,指可获取场景中物体与摄像头之间物理距离的相机.主流深度相机通常由多种镜头.光学传感器组成,根据基本原理可以分为:飞行时间法.结构光法.双目立体视觉法. 相机成像模型 在研究深度相机之前,先来 ...

  2. 激光SLAM学习--多种类激光雷达介绍(单线、多线)

    参考:https://zhuanlan.zhihu.com/p/33792450 前言 上一次的分享里,我介绍了一个重要的感知传感器--摄像机.摄像机作为视觉传感器,能为无人车提供丰富的感知信息.但是 ...

  3. 3D Vision、SLAM求职宝典 | SLAM知识篇(D1,重点 )

    今日得空,开始愉快的解答!各位看官请指教. 第一部分,先来完成该专题最重要的内容,即笔试面试中所考察的SLAM专业知识. SLAM知识篇所准备的这些问题不一定全面,但是问题都是基于三位求职者的总结回忆 ...

  4. ROS2_Foxy学习9——多机激光SLAM先导篇

    ROS2_Foxy学习9--多机激光SLAM先导篇 1 环境准备 2 ROS1下测试SLAM 2.1 cartographer 源码测试 2.2 rplidar_ros 源码测试 2.3 rplida ...

  5. ROS2_Foxy学习10——多机激光SLAM准备篇

    ROS2_Foxy学习10--多机激光SLAM准备篇 1 安装Ubuntu20.04 mate 2 安装ROS noetic 3 安装cartographer 4 详细配置cartographer 5 ...

  6. 自动驾驶传感器比较:激光雷达(LiDAR) vs. 雷达(RADAR)

    自动驾驶传感器比较:激光雷达(LiDAR) vs. 雷达(RADAR) 据麦姆斯咨询报道,2032年全球范围内自动驾驶汽车的产量将高达2310万辆,未来该市场的复合年增长率(CAGR)高达58%.届时 ...

  7. Velodyne激光雷达使用教程

    Velodyne激光雷达使用教程 1(1)首先将velodyne 16与电脑相连 (2)velodyne上电(12v) (3)通过以太网网口连接电脑 (4)编辑ipv4,方式设置为手动,ip地址.掩码 ...

  8. gazebo 添加16线velodyne激光雷达 详细教程

    gazebo 添加16线velodyne激光雷达 详细教程 步骤: 找到velodyne的文件 修改相关的xacro文件 调用文件 让机器人带着雷达跑起来,查看效果 1.找到velodyne的文件: ...

  9. 学习笔记12--环境感知传感器技术之激光雷达

    本系列博客包括6个专栏,分别为:<自动驾驶技术概览>.<自动驾驶汽车平台技术基础>.<自动驾驶汽车定位技术>.<自动驾驶汽车环境感知>.<自动驾驶 ...

最新文章

  1. 想非常牛掰的在WORD中调中多级符号吗
  2. JavaScript中call和apply方法
  3. 铜仁计算机专业学校,听说计算机专业的在本部啊 这是真的么
  4. pthread 的坑
  5. PHP--session
  6. iptables 垫脚石之 NAT DNAT SNAT 代理 深度理解
  7. php 函数内临时变量,在PHP中调用函数时使用临时变量
  8. c语言荷兰国旗问题算法,荷兰国旗问题
  9. 个位百位AS3实现经典算法(二) 水仙花数
  10. java rxtx_Java使用开源Rxtx实现串口通讯(串口开发) | 学步园
  11. 区域D绕直线L旋转形成的旋转体体积计算
  12. 【教学类-13-01】20221112《数字色块图5*7*9-A4竖版》(中大班主题《》)
  13. uniapp自定义步骤条
  14. linux界面回收站图标没了,Ubuntu美化教程:在AWN中添加“显示桌面”和“回收站”图标...
  15. java poi导出excel插入图片
  16. 吴宗宪的35个BT经典台词
  17. 轻松破解Word文档“保护密码”
  18. JavaEE 企业级分布式高级架构师(二十)RocketMQ学习笔记(2)
  19. HBase安装(1.2.6版)【一篇就够】
  20. python houdini_通过Python调用houdini的HAPI

热门文章

  1. android http下载限速,安卓手机端两种让网盘不限速下载方法介绍
  2. php怎么规范图片大小,如何在PHP中调整图片大小?
  3. 华为p4支持鸿蒙功能吗_华为鸿蒙系统支持机型介绍
  4. 基于Python、scrapy爬取软考在线题库
  5. fragment中文网_Fragment基本概述
  6. Managed Beans
  7. MAC + IDEA自动生成SerialVersionUID(亲测有效)
  8. 实战演练 | Navicat Premium 轻松连接阿里云云数据库
  9. 干货分享丨HDR 技术产品实践与探索
  10. android通知栏的点击事件,android自定义通知栏以及点击事件