YDLIDAR GS2 DEVELOPMENT 线阵固体激光雷达传感器
工作机制
模式
YDLIDAR GS2(以下简称GS2)系统有3种工作模式:空闲模式、扫描模式、停止模式。
- 空闲模式: GS2 开机时,默认模式为空闲模式。 在空闲模式下,GS2 的测距单元不工作,激光也不亮。
- 扫描方式: 当 GS2 处于扫描模式时,测距单元打开激光。 当 GS2 开始工作时,它会持续发出amp对外界环境进行采样,经过后台处理后实时输出。
- 停止模式: 当GS2运行出现错误时,如扫描仪开启、激光关闭、电机不转等,GS2会自动关闭测距单元并反馈错误代码。
测量原理
GS2 是一种短程固态激光雷达,范围为 25-300 毫米。 它主要由一个线激光器和一个摄像头组成。 单线激光器发出激光后,被摄像头捕捉到。 根据激光器和摄像头的固定结构,结合三角测距原理,我们可以计算出物体到GS2的距离。 根据相机的标定参数,可知被测物体在激光雷达坐标系中的角度值。 由此,我们获得了被测对象的完整测量数据。
O点为坐标原点,紫色区域为角度 view 右侧相机的角度,橙色区域是 view 左边的相机。
以mod标点为坐标原点,前方为坐标系0度方向,角度顺时针递增。 输出点云时,数据(S1~S160)的顺序为L1~L80,R1~R80。 SDK计算出来的角度和距离都是在坐标系中顺时针表示的。
系统通讯
通讯机制
GS2 通过串行端口与外部设备通信命令和数据。 当外部设备向GS2发送系统命令时,GS2解析系统命令并返回相应的回复信息。 GS2根据指令内容切换相应的工作状态。 外部系统可以根据消息的内容解析消息并获取响应数据。
系统命令
外部系统可以通过发送相关的系统命令来设置GS2相应的工作状态,发送相应的数据。 GS2下发的系统命令如下:
图 1 YDLIDAR GS2 系统命令
系统命令 | 描述 | 模式切换 | 应答模式 |
0×60 | 获取设备地址 | 停止模式 | 单一回应 |
0×61 | 获取设备参数 | 停止模式 | 单一回应 |
0×62 | 获取版本信息 | 停止模式 | 单一回应 |
0×63 | 开始扫描并输出点云数据 | 扫描模式 | 持续响应 |
0x64 | 停止设备,停止扫描 | 停止模式 | 单一回应 |
0x67 | 软重启 | / | 单一回应 |
0×68 | 设置串口波特率 | 停止模式 | 单一回应 |
0×69 | 设置边缘模式(抗噪模式) | 停止模式 | 单一回应 |
系统消息
系统消息是系统根据接收到的系统命令反馈的响应消息。 根据不同的系统命令,系统消息的回复方式和回复内容也不同。 响应模式有无响应、单次响应、连续响应三种。
无响应表示系统没有返回任何消息。 单次回复表示系统消息长度有限,一次回复结束。 当系统与多台GS2设备级联时,部分命令会连续收到多台GS2设备的响应。 连续响应是指系统的报文长度是无限的,需要连续发送数据,比如进入扫描模式时。
单响应、多响应和连续响应消息使用相同的数据协议。 协议内容为:包头、设备地址、包类型、数据长度、数据段和校验码,通过串口十六进制输出。
图 2 YDLIDAR GS2 系统消息数据协议示意图
包头 | 设备地址 | 数据包类型 | 响应长度 | 数据段 | 检查代码 |
4 字节 | 1 字节 | 1 字节 | 2 字节 | N 字节 | 1 字节 |
字节偏移量
- 包头: GS2 的消息包标头标记为 0xA5A5A5A5。
- 设备地址: GS2设备地址,根据级联数分为:0x01、0x02、0x04;
- 数据包类型: 系统命令类型见表1。
- 响应长度: 表示响应的长度
- 数据段: 不同的系统命令响应不同的数据内容,其数据协议也不同。
- 检查代码: 检查代码。
笔记: GS2数据通信采用小端模式,低位在前。
数据协议
获取设备地址命令
当外部设备向GS2发送该命令时,GS2返回一个设备地址包,报文为:
级联时,如果串接N个设备(最多支持3个),则返回0x01、0x02、0x04处的N个应答,分别对应1-3个模块。
定义: 模块1的地址为0x01,模块2的地址为0x02,模块3的地址为0x04。
获取版本信息命令
当外部设备向 GS2 发送扫描命令时,GS2 返回其版本信息。 回复信息是:
在级联的情况下,如果串联了 N(最多 3)台设备,则该命令将返回 N 条响应,其中地址为最后一台设备的地址。
版本号是3字节长,SN号是16字节长。
获取设备参数命令
当外部设备向GS2发送该命令时,GS2会返回其设备参数,报文为:
级联时,如果串接N个设备(最多支持3个),命令返回N个应答,对应每个设备的参数。
协议接收到的K和B是uint16类型,需要转成float类型再除以10000代入计算函数。
- d_compensateK0 = (浮动)K0/10000.0f;
- d_compensateB0 = (浮动)B0/10000.0f;
- d_compensateK1 = (浮动)K1/10000.0f;
- d_compensateB1 = (浮动)B1/10000.0f;
bias是int8类型,代入计算函数前需要转成float类型除以10。
- bias = (float)偏差/10;
命令
扫描指令
当外部设备向GS2发送扫描命令时,GS2进入扫描模式并不断反馈点云数据。 消息是:命令发送:(发送地址0x00,级联与否,将启动所有设备)
命令收到: (在级联情况下,该命令只返回一个响应,地址为最大地址,例如ample:3号设备级联,地址为0x04。)
数据段为系统扫描得到的点云数据,按照如下数据结构,以十六进制形式通过串口发送给外接设备。 整个数据包的数据长度为322 Bytes,包括2 Bytes环境数据和160个测距点(S1-S160),每个2 Bytes,高7位为强度数据,低9位为距离数据. 单位是毫米。
停止命令
当系统处于扫描状态时,GS2一直在向外界发送点云数据。 此时要禁用扫描,发送此命令停止扫描。 发送停止命令后,模块会回复响应命令,系统立即进入待机休眠状态。 此时设备的测距单元处于低功耗模式,激光器关闭。
- 命令发送: (发送地址0x00,无论是否级联,所有设备都会关闭)。
在级联的情况下,如果串联了N(最多3个)设备,该命令只会返回一个响应,其中地址为最后一个设备的地址,例如ample:如果3台设备级联,地址为0x04。
设置波特率命令
当外部设备向GS2发送该命令时,可以设置GS2的输出波特率。
- 命令发送: (发送地址0x00,只支持设置所有级联设备波特率相同),报文为:
其中数据段为波特率参数,包括四种波特率(bps),分别为:230400、512000、921600、1500000对应code 0-3(注意:三模块串口必须≥921600,默认为 921600)。
在级联的情况下,如果串联N台(最多支持3台)设备,则该命令将返回N个响应,对应每个设备的参数,地址分别为:0x01、0x02、0x04。
- 设置好波特率后,需要软重启设备。
设置边缘模式(强抗干扰模式)
当外部设备向GS2发送该命令时,可以设置GS2的抗干扰模式。
- 命令发送:(发送地址,级联地址),报文为:
命令接收
Address为级联链路中需要配置的模块地址。 Mode=0对应标准模式,Mode=1对应边缘模式(插座朝上),Mode=2对应边缘模式(插座朝下)。 边缘模式下,激光雷达固定输出10HZ,增强对环境光的过滤效果。 Mode=0XFF表示读取,激光雷达会回到当前模式。 激光雷达默认工作在标准模式。
- 设置模块 1: 地址=0x01
- 设置模块 2: 地址=0x02
- 设置模块 3: 地址=0x04
系统重置命令
当外部设备向GS2发送此命令时,GS2将进入软重启,系统将复位并重启。
命令发送:(发送地址,只能是准确的拼接地址:0x01/0x02/0x04)
Address为级联链路中需要配置的模块地址。
- 重置模块 1: 地址=0x01
- 重置模块 2: 地址=0x02
- 重置模块 3: 地址=0x04
数据分析
图 3 数据结构说明
内容 | 姓名 | 描述 |
K0(2B) | 设备参数 | (uint16) 左摄像头角度参数k0系数(见3.3节) |
B0(2B) | 设备参数 | (uint16) 左摄像头角度参数k0系数(见3.3节) |
K1(2B) | 设备参数 | (uint16) 右摄像头角度参数k1系数(见3.3节) |
B1(2B) | 设备参数 | (uint16) 右摄像头角度参数b1系数(见3.3节) |
比亚斯 | 设备参数 | (int8) 当前相机角度参数偏置系数(见3.3节) |
环境(2B) | 环境数据 | 环境光强度 |
硅(2B) | 测距数据 | 低9位为距离,高7位为强度值 |
- 距离分析
距离计算公式: 距离 = (_ ≪ 8|_) &0x01ff,单位为毫米。
强度计算: 质量 = _ ≫ 1 - 角度分析
以激光发射方向为传感器正面,以激光圆心在PCB平面上的投影为坐标原点,以PCB平面法线为坐标系建立极坐标系0 度方向。 按照顺时针方向,角度逐渐增加。
要将激光雷达传输的原始数据转换到上图中的坐标系中,需要进行一系列的计算。 转换函数如下(详见SDK):
检查代码分析
校验码采用单字节累加方式对当前数据包进行校验。 四字节包头和校验码本身不参与校验操作。 校验码解算公式为:
- 校验和 = ADD1()
- = 1,2, … ,
ADD1是累加公式,表示累加元素中从下标1到末尾的数。
在线升级
升级工作流程
发送协议
图 4 OTA 数据协议格式(小端)
范围 | 长度(字节) | 描述 |
包头 | 4 | 数据包头,固定为A5A5A5A5 |
设备地址 | 1 | 指定设备地址 |
包ID | 1 | 数据包ID(数据类型) |
数据长度 | 2 | 数据段的数据长度,0-82 |
数据 | n | 数据,n = Data_Len |
校验和 | 1 | Checksum,去掉header后剩余字节的校验和 |
图 5 OTA 升级说明
指令类型 | 包ID | 描述 |
开始_IAP | 0x0A | 上电后发送此命令启动IAP |
正在运行_IAP | 0x0B | 运行 IAP,传输数据包 |
完成_IAP | 0x0C | 内购结束 |
ACK_IAP | 0x20 | 内购回复 |
重置系统 | 0x67 | 在指定地址复位并重启模块 |
Start_IAP指令
命令发送
- 数据段数据格式:
- 数据[0~1]: 默认为0x00;
- 数据[2~17]: 是固定字符验证码:
- 0x73 0x74 0x61 0x72 0x74 0x20 0x64 0x6F 0x77 0x6E 0x6C 0x6F 0x61 0x64 0x00 0x00
- 参考发送消息
- A5 A5 A5 A5 01 0A 12 00 00 00 73 74 61 72 74 20 64 6F 77 6E 6C 6F 61 64 00 00 C3
命令接收: 由于FLASH扇区操作,返回延时较长,波动在80ms到700ms之间)
接收数据格式
- 地址: 模块地址;
- 确认: 默认为0x20,表示该数据包为确认包; Data[0~1]:默认为0x00;
- 资料[2]: 0x0A表示响应命令为0x0A;
- 资料[3]: 0x01表示正常接收,0表示接收异常;
- 领取参考:
A5 A5 A5 A5 01 20 04 00 00 00 0A 01 30
Running_IAP指令
命令发送
固件在升级过程中会被拆分,数据段(Data)的前两个字节表示该段数据相对于固件第一个字节的偏移量。
- 数据[0~1]:Package_Shift = 数据[0]+ 数据[1]*256;
- 数据[2]~数据[17]: 是固定字符串验证码:
- 0x64 0x6F 0x77 0x6E 0x6C 0x6F 0x61 0x64 0x69 0x6E 0x67 0x00 0x00 0x00 0x00 0x00 Data[18]~Data[81]: 固件数据;
- 参考发送消息
- A5 A5 A5 A5 01 0B 52 00 00 00 64 6F 77 6E 6C 6F 61 64 69 6E 67 00 00 00 00 00 +
(数据[18]~数据[81]) + Check_Sum
命令接收
- 地址:我s 模块地址;
- 确认: 默认为0x20,表示该数据包为确认包;
数据[0~1] : Package_Shift = Data[0]+ Data[1]*256 表示响应的固件数据偏移量。 建议在升级过程中检测响应时判断offset作为一种保护机制。
- Data[2]=0x0B表示响应命令为0x0B;
- Data[3]=0x01表示正常接收,0表示接收异常;
参考接收
A5 A5 A5 A5 01 20 04 00 00 00 0B 01 31
Complete_IAP 指令
命令发送
- 数据[0~1]: 默认为0x00;
- 数据[2]~数据[17]: 是固定字符串验证码:
0x63 0x6F 0x6D 0x70 0x6C 0x65 0x74 0x65 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
数据[18]~数据[21]: 加密标志,uint32_t类型,加密固件为1,非加密固件为0;
参考发送消息:
A5 A5 A5 A5 01 0C 16 00 00 00 63 6F 6D 70 6C 65 74 65 00 00 00 00 00 00 00 00 + (uint32_t 加密标志) + Check_Sum
命令接收
- 接收数据格式:
- 地址: 是模块地址;
- 确认: 默认为0x20,表示该数据包为确认包;
- 数据[0~1]: 默认为0x00;
- 资料[2]: 0x0C表示响应命令为0x0C;
- 资料[3]: 0x01表示正常接收,0表示接收异常;
- 参考收到的消息:
A5 A5 A5 A5 01 20 04 00 00 00 0C 01 32
RESET_SYSTEM 指令
详见章节 3.8 系统复位命令。
问答
- Q:发送复位命令后如何判断复位成功? 是否需要延迟?
- A: 可以根据reset命令的响应包来判断是否执行成功; 建议在收到响应后增加500ms的延时,再进行后续操作。
- Q:模块4复位后收到一些不符合协议的串口数据,如何处理?
- A: 模块上电日志是一串带4个0x3E头的ASCII数据,不影响正常解析带4个0xA5头的数据,可以忽略。 由于物理链路原因,无法接收到1号和2号模块的日志。
- Q:升级过程断电重启中断怎么处理?
- A: 重新发送 Start_IAP 命令重新升级。
- Q:级联状态下升级功能异常的可能原因是什么?
- A: 确认物理链接是否正确,比如三个模块的点云数据是否可以接收;
- 确认三个模块的地址不冲突,可以尝试重新分配地址;
- 重置待升级模块,然后重启试试;
- Q: 为什么级联升级后读取的版本号为0?
- A: 表示模块升级不成功,用户需要重新设置模块后再升级。
注意力
- 与GS2进行命令交互时,除了stop scan命令外,scan模式下不能交互其他命令,容易导致报文解析错误。
- GS2 不会在开机时自动开始测距。 需要发送开始扫描命令进入扫描模式。 当需要停止测距时,发送停止扫描命令停止扫描并进入休眠模式。
- 正常启动GS2,我们推荐的流程是:
第一步:
发送Get Device Address命令获取当前设备的地址和级联数,并配置地址;
第二步:
发送get version 命令获取版本号;
第三步:
发送获取设备参数命令获取设备的角度参数进行数据分析;
第四步:
发送开始扫描命令获取点云数据。 - GS2透视窗透光材料设计建议:
如果前盖透视窗是为GS2设计的,建议使用透红外线的PC作为其透光材料,透光区域要求是平整的(平面度≤0.05mm),所有区域都在平面在 780nm 到 1000nm 波段应该是透明的。 出光率大于90%。 - GS2导航板反复开关机推荐操作流程:
为了降低导航板的功耗,如果GS2需要反复开关机,建议在关机前先发送停止扫描命令(见3.5节),然后配置好导航板的TX和RX导航板为高阻抗。 然后将 VCC 拉低以将其关闭。 下次上电时,先拉高VCC,然后配置TX和RX为正常输出和输入状态,再延时300ms后,与线激光器进行命令交互。 - 关于每条GS2命令发送后的最大等待时间:
- 获取地址:延时800ms,获取版本:延时100ms;
- 获取参数:延时100ms,开始扫描:延时400ms;
- 停止扫描:延时100ms,设置波特率:延时800ms;
- 设置边沿模式:延时800ms,启动OTA:延时800ms;
修改
日期 | 版本 | 内容 |
2019-04-24 | 1.0 | 撰写初稿 |
2021-11-08 |
1.1 |
修改(修改协议框架合并左右摄像头数据;建议添加透视窗材质;添加波特率
设置命令) |
2022-01-05 | 1.2 | 修改获取设备地址命令的接收说明,以及左右摄像头的说明 |
2022-01-12 | 1.3 | 添加边缘模式,补充K、B、BIAS计算说明 |
2022-04-29 | 1.4 | 修改章节3.2:获取版本信息命令的描述 |
2022-05-01 | 1.5 | 修改软重启命令的地址配置方式 |
2022-05-31 |
1.6 |
1)更新第3.7节
2) Section 3.8 RESET命令增加了一个回复 3) 新增第5章OTA升级 |
2022-06-02 | 1.6.1 | 1)修改OTA升级流程
2)修改OTA问答 |
文件/资源
![]() |
YDLIDAR GS2 DEVELOPMENT 线阵固体激光雷达传感器 [pdf] 用户手册 GS2 DEVELOPMENT 线阵固体激光雷达传感器, GS2 DEVELOPMENT, 线阵固体激光雷达传感器, 阵列固体激光雷达传感器, 固体激光雷达传感器, 激光雷达传感器, 传感器 |