TOF Laser Range Sensor (B)
| |||||||||||||||||||||
| |||||||||||||||||||||
说明
产品简介
TOF Laser Range Sensor (B)是一款基于 TOF (飞行时间) 技术的激光测距传感器。内置控制器和测距算法,测距范围可达 15m,精度高达 ±2%,分辨率可达 1mm。支持 UART 和 I2C 通信,具备超小的 FOV 角,使得距离更远抗光干扰能力更强,室内外环境均适用,可以作为测距工具进行距离检测,也可作为机器人避障/路线规划,还可用于无人机定高/天花板检测等领域。
应用场景
- 无人机定高、天花板检测
- 机器人避障
- 测量与检测
- 智能手势控制
- 1维手势识别
工作原理
TOF是一种绝对距离检测技术,即传感器发出经过调试的近红外光,遇物体后反射,传感器通过计算光线发射和反射时差或相位差,来换算被拍摄景物的距离,以产生深度信息。相比于双目方案与3D结构光方案,TOF具有工作距离远,适用场景广,较远距离精度高等优点。因此常被应用于人员接近检测、机器人避障、照相机自动对焦等场合。室外环境中有来自太阳光的近红外光,会对模块的测量效果产生影响。
产品参数
产品 | TOF Laser Range Sensor | TOF Laser Range Sensor (B) |
---|---|---|
典型测距范围 | 短距:0.012 ~ 2.16m | 0.10 ~ 15.0m |
中矩:0.012 ~ 3.60m | ||
长距:0.01 ~ 5.00m | ||
典型测距精度 | 短距:精度 ±1.0cm,标准差 <0.3cm | 0.10 ~ 2m ±2cm;2 ~ 15m ±2% |
中距:精度 ±1.0cm,标准差 <1.5cm | ||
长距:精度 ±1.5cm,标准差 <0.5cm@0.01~3m, 标准差 <8cm@3~5m | ||
测量分辨率 | 1mm | |
供电电压 | 3.7 ~ 5.2V (防反接保护) | |
工作温度 | -10°C ~ 60°C | |
波长 | 940nm (符合 Class1 标准) | 750 ~ 830nm 激光符合 IEC 60825-1:2014 第 3 版规定的 Class2 标准 |
视场角 (FOV) | 15° ~ 27° (多档位可调) | 1° ~ 2° |
通信接口 | UART (TTL 信号线电平 3.3V) | |
CAN (2 个接口可同时作为 CAN 接口) | I2C (支持并联多个,从机地址为 0x08+模块ID) | |
通信波特率 | UART:115200 ~ 3000000bps (默认 921600bps) | |
UART:115.2Kbps ~ 3000Kbps (默认 921.6Kbps) | I2C:可达 400Kbps | |
级联数量 | UART 接口支持级联多达 8 个,CAN 接口支持级联多达 7 个 | 可通过 I2C 并联多达 8 个 |
抗环境光 | 较弱,仅支持室内用 | 约 100K LUX 照度 (室内和室外均能用) |
产品功耗 | 290mW (UART 主动输出,长距模式供电电压 5.0V,电流 58mA) | 610mW(UART 主动输出,供电电压 5.0V,电流 122mA) |
产品重量 | 2.7g | 7.7g |
长宽高 | 35.58 × 12 × 8.05mm | 22.7 × 28 × 13.6mm |
功能描述
【ID | 身份标识】
- ID是用于区分不同传感器而设定的一个变量,在级联连接时用于识别各个传感器。
【Interface & Baudrate | 接口与波特率】
TOF Laser Range Sensor (B) 支持配置为UART、IIC、I/O 通信方式:
UART|串口
UART串口通信波特率设置范围如下:
UART串口波特率 | 说明 |
---|---|
115200,230400,460800,921600,1000000,1200000,2000000,3000000 | 默认波特率为921600 |
UART接口模式支持“主动输出”和“查询输出”:
上位机下载:
- Active Output | 主动输出:
- UART 主动输出模式可在单模块时使用,该模式下模块以 50Hz 的频率主动输出测量信息,输出格式遵循 NLink_TOFSense_Frame0 协议。
- 通过 USB TO TTL 模块(线序和供电电压参考数据手册)连接 TOF 系列产品到 Waveshare TOFAssistant 软件,识别成功后点击 进入设置页面,UART 主动输出模式配置如下图 ,配置完参 数后需要点击写入参数按钮来保存参数,写入参数成功后可以读取一次参数来确认参数是否写入 成功。(更改模块的波特率参数后,需要重新插拔一下 USB TO TTL 模块来自动识别模块):
- Query Output | 查询输出:
- UART 查询输出模式可在单模块时使用,该模式下通过控制器向期望查询模块发送包含该模 块 ID 的查询指令,模块即可输出一帧测量信息。查询帧格式遵循协议 NLink_TOFSense _Read_Frame0,输出帧格式遵循协议 NLink_TOFSense_Frame0。
- 通过 USB TO TTL 模块(线序和供电电压参考数据手册)连接 TOF 系列产品到 Waveshare TOFAssistant 软件,识别成功后点击 进入设置页面,UART 查询输出模式配置如下图,配置完参 数后需要点击写入参数按钮来保存参数,写入参数成功后可以读取一次参数来确认参数是否写入 成功。(更改模块的波特率参数后,需要重新插拔一下 USB TO TTL 模块来自动识别模块):
I2C | 集成电路总线
- I2C 输出模式下,波特率设置范围如表
I2C波特率 | 说明 |
---|---|
最高400KHz | 最高400KHz,有主机决定 |
- I2C Address | I2C 地址
I2C地址 | 说明 |
---|---|
0x08~0x77 | 默认地址为 0x08(7 位地址),从机地址为 0x08+模块 ID,更改模块 的 ID 参数即可更改从机地址。通信时要注意移位和增加读写位,即 地址为 0x08 时发送带读写位的字节为 0x10(写)、0x11(读) |
I2C 通信模式下通过控制器按照 I2C 通信时序向指定从机地址的期望查询模块发送读取帧, 即可获得模块的距离等相关信息。此外,也可以通过 I2C 通信来更改模块的输出方式等各项参数。 读取帧和写入帧格式遵循协议 NLink_TOFSense_IIC_Frame0。 模块处于 UART 模式时(注意 Waveshare TOFAssistant 无法识别处于 I2C 模式下的模块),通过 USB TO TTL 模块(线序和供电电压参考数据手册)连接 TOF 系列产品到 Wavshare TOFAssistant 软件,识别成功后点击 进入设置页面,I2C 输出模式配置如下图,可以通过设置模块的 ID 来改变该模块 的 I2C 从机地址(7 位从机地址为 0x08+模块 ID,ID 设置范围为 0~111),配置完参数后需要点 击写入参数按钮来保存参数。注:切换到 I2C 模式后,可以参考 FAQ 章节中的方式来更改回 UART 模式。
I/O Output | I/O 输出
- I/O 输出模式下,不能输出测距值,只是在距离从小变大超过高阈值的时候或者从大到小低 于低阈值的时候让 I/O 口电平反转。
模块处于 UART 模式时(注意 Waveshare TOFAssistant 无法识别处于 I/O 模式下的模块),通过 USB TO TTL 模块(线序和供电电压参考数据手册)连接 TOF 系列产品到 Waveshare TOFAssistant 软件,识别 成功后点击 进入设置页面,首先设置滞环起点 Band_Start 与滞环宽度 Bandwidth 确定滞环区 间,I/O 输出模式配置如图 4;距离值通过滞环比较转换为高低电平输出,TX/SCL 与 RX/SDA 输出互补电平,滞环比较示意图如图 5 所示。配置完参数后需要点击写入参数按钮来保存参数。 注:切换到 I/O 模式后,可以参考 FAQ 章节中的方式来更改回 UART 模式。
例如,Band_Start 和 Bandwidth 都设置成 500,对应的是 0.5 米。当测距值为 0.3 米时,RX 为高,TX 为低,测距值变大到 0.8 米,RX 为高,TX 为低,测距值超过 1 米时,电平反转,RX 为低,TX 为高。测距值从 1 米多降到 0.8 米,RX 为低,TX 为高,测距值降到低于 0.5 米时, 电平反转,RX 为高,TX 为低。
其中 TOF (B) 的 Band_Start、Bandwidth 取值范围[0~15000]/[0~25000], 单位:mm。
【Distance Status | 距离状态指示】
模块可以输出当前距离状态,用户可结合距离状态进行数据处理,距离状态含义如下:
数值 | 说明 |
---|---|
0 | 测量距离无效 |
1 | 测量距离有效 |
【Signal Strength | 信号强度】
- 指示当前返回信号的强度,该值越大表明返回信号越强。
【Range Precision | 测距精度】
- 指示当前测距的精度,该值越小表明测距精度越好。
【FOV | 视场角】
- FOV 视场角的大小决定了 TOF 的视野范围,TOF (B)模块的视场角为 1~2°。
【Mode Switch | 模式切换】
- 如果模块处于 UART 模式,可以连接 Waveshare TOFAssistant 软件来切换到 IIC 或 I/O 模式。如果模块处 于 IIC 模式,需要通过 IIC 通信向模块发送指令来切换回 UART 模式。此外,在没有 IIC 测试 环境或者切换到 I/O 模式后可以参考用户手册 FAQ 章节的方式来切换回 UART 模式。
协议解析
- 协议由 Frame Header(帧头)、Function Mark(功能字)、Data(数据)、Sum Check(校验和)组成。
- 其中 Frame Header、Function Mark 为固定不变的数值;
- Data 为传输的数据内容;
- Sum Check 为 Frame Header、Function Mark、Data 相加求和(即前面所有字节相加)后的最低字节。
- 协议组成:
Frame Header + Function Mark + Data + Sum Check
说明:协议包遵循小端模式原则,即低字节在前,高字节在后。
- 协议内容概述
协议 | 类型 | 概述 |
---|---|---|
NLINK_TOFSENSE_FRAME0 | 定长 | UART 输出协议, 内容包括节点时间戳、距离、距离状态、 信号强度 |
NLINK_TOFSENSE_READ _FRAME0 | 定长 | UART 读取协议, 内容包括节点 ID |
NLINK_TOFSENSE_IIC_FRAME0 | 变长 | IIC 通信协议, 内容包括距离、距离状态、信号强度等 |
NLink_TOFSense_Frame0
- 数据来源: 将模块连接上位机,配置 UART 为主动输出模式,NLink_TOFSense_Frame0 协 议,距离数据解析可以参考 FAQ
- 原始数据:
57 00 ff 00 9e 8f 00 00 ad 08 00 00 03 00 06 41
- 解析表:
Data | Type | Length (Bytes) | Hex | Result |
---|---|---|---|---|
Frame Header | uint8 | 1 | 57 | 0x57 |
Function Mark | uint8 | 1 | 00 | 0x00 |
reserved | uint8 | 1 | ff | * |
id | uint8 | 1 | 00 | 0 |
System_time | uint32 | 4 | 9e 8f 00 00 | 36766ms |
dis*1000 | uint24 | 3 | ad 08 00 | 2.221m |
dis_status | uint8 | 1 | 00 | 0 |
signal_strength | uint16 | 2 | 03 00 | 3 |
range_precision | uint8 | 1 | 06 | 6cm |
Sum Check | uint8 | 1 | 41 | 0x41 |
NLink_TOFSense_Read_Frame0
- 数据来源: 将模块连接上位机,配置为 UART 查询输出模式,id 为 0,通过上位机发送下列 数据实现数据查询。如需查询其他 ID 的模块,更改 id 和校验和字节发送即可。
- 原始数据:
57 10 FF FF 00 FF FF 63
- 解析表:
Data | Type | Length (Bytes) | Hex | Result |
---|---|---|---|---|
Frame Header | uint8 | 1 | 57 | 0x57 |
Function Mark | uint8 | 1 | 10 | 0x10 |
reserved | uint8 | 2 | ff | * |
id | uint8 | 1 | 00 | 0 |
reserved | uint8 | 2 | ff | * |
Sum Check | uint8 | 1 | 63 | 0x63 |
NLink_TOFSense_IIC_Frame0
- 从机地址:模块在 IIC 总线中作为从机,默认地址为 0x08(7 位地址),从机地址为 0x08+ 模块 ID,更改模块的 ID 参数即可更改从机地址。通信时要注意地址移位和增加读写位,即地址 为 0x08 时发送带读写位的字节为 0x10(写)、0x11(读)。
- 寄存器地址:若寄存器中无对应参数则默认输出 0xff
AD 08 00 00 03 00 FF FF
- 解析表:
IIC 通信流程:
NLink_TOFSense_Setting_Frame0
- 数据来源: 设置指令。
- 解析表:
软件说明
TOF Assistant是TOF激光测距模块配套的调试软件,主要作用为:配置调试、状态显示、功能应用、固件升级:
- 配置调试:用于配置节点相关参数,如ID、工作模式、波特率等。
- 功能应用:用于应用开发,如数据导入导出、运动轨迹存储、历史轨迹回放等。
- 固件升级:用于给产品进行有线固件升级。
产品尺寸
树莓派使用
树莓派环境配置
开启UART
如果模块是设置为UART模式,并且通过对应接到树莓派的UART接口,那么树莓派的UART也需要对应设置开启。由于树莓派串口默认用于终端调试,如需使用串口,则需要修改树莓派设置。执行如下命令进入树莓派配置:
sudo raspi-config
选择Interfacing Options ->Serial ->no -> yes,关闭串口调试功能。
需要重启
sudo reboot
打开/boot/config.txt文件,找到如下配置语句使能串口,如果没有,可添加在文件最后面:
enable_uart=1
重启生效
开启I2C接口
如果模块是设置为I2C模式,并且通过对应接到树莓派的I2C接口,那么树莓派的I2C也需要对应设置开启,操作如下:
sudo raspi-config
模组参数设置
TOF Laser Range Sensor模块UART波特率需要通过上位机设置成:115200;
树莓派使用TOF Laser Range Sensor模块的效果如下:
硬件连接
接入树莓派UART的参考如下:
接入树莓派I2C的参考如下:
Jetson Nano使用
硬件连接
软件设置
TOF Laser Range Sensor模块UART波特率需要通过上位机设置成:115200;
Jetson nano使用TOF Laser Range Sensor模块的效果如下:
Arduino使用
硬件连接
软件设置
FAQ
Q1. 室外(强光)条件下可以用吗?
模块可以抵抗一定的自然光影响。可以在室外使用。
Q2. 多个模块是否有干扰?
当多个模块同时工作时,即使相互之间的红外光线交叉或打到同一个位置,也不会影响实际测量。如果两个模块处于同一水平高度,且分别朝向对方时测量会对双方都有影响。
Q3. 为什么模块没有数据输出?
各个模块均经过严格的测试后发货,没有数据时请先自行检查模式、接线(供电电压、线序是否正确,以及推荐使用万用表测试通信双方两端的引脚是否导通)、波特率等配置是否正确;对于 IIC 输出模式,需要使用主机通过 IIC 通信向设置的从机地址按照手册的通信时序来读取数据;对于 I/O 输出模式,请参考 I/O 模式相关章节介绍。
Q4. 安装时需要注意什么?
安装时需避免 FOV 角度内有遮挡。另外需要注意与地面高度,应避免 FOV 内出现地面遮挡等类似反射面,如果安装高度离地面较近,可以考虑将模块稍微倾斜向上进行安装。
Q5. 模块的 UART、IIC 和 I/O 是同一个接口吗?
模块的 UART、IIC、I/O 接口共用相同的物理接口,针对不同的通讯模式转换对应线序即可。
Q6. 切换到 IIC 或 I/O 模式后,为什么 Waveshare TOFAssistant 软件识别不了模块?如何在不同通讯模式间进行切换?
目前 Waveshare TOFAssistant 软件只支持识别 UART 模式下的模块。在 UART 模式下时,可以通过上位机识别成功后进入设置页面将模块配置为 IIC 或 I/O 通讯模式;在 IIC 通讯模式下,可以按照IIC通信协议通过 IIC 通信向模块发送指令来切换回 UART 或 I/O 模式;此外,在没有IIC 测试环境或者切换到 I/O 模式后可以通过以下方式来切换回 UART 模式: 1、用户需要准备一个支持 921600 波特率的 USB 转 TTL 模块(推荐CP2102)并且安装对应的驱动程序,将 USB 转 TTL 模块的 TX、RX、GND 三根线连接到 TOF 模块的对应引脚,VCC引脚暂时先不连接,然后把 USB 转 TTL 模块插入电脑。 2、打开 Waveshare TOFAssistant 软件,点击图标进入串口调试助手,把波特率改为921600,选择USB转 TTL 模块对应的 COM 口然后点击 连接按钮连接 COM 口(大部分情况下会自动连接),在单项发送的文本框内输入 54 20 00 ff 00 ff ff ff ff 00 ff ff 00 10 0e ff ff ff ff ff ff ff ff ff ff ff 00 ff ff ff ff 7c,在右下角的定时发送栏将发送间隔改为 20ms,然后勾选定时发送。 3、此时将 USB 转 TTL 模块的 5V 接到 TOF 模块的 VCC 引脚,模块会切换到UART模式并开始输出数据,此时取消勾选定时发送按钮,然后拔掉 USB 转 TTL 模块重新给模块上电后点击主页面的识别按钮即可识别模块。 如果切换失败,将 USB 转 TTL 模块拔掉再重复一下整个步骤,切勿在发送命令的情况下多次插拔 VCC 引脚。如果能够正常识别模块但是串口输出数据异常,可以在设置页面中手动更改到 UART 模式。 PS:如果将 TOF 模块的 VCC 引脚接到 USB 转 TTL 模块的 5V 后出现模块一直发送80 00 8000..类似的协议数据的情况,先点击 连接按钮暂时断开 COM 口,把波特率改为115200 然后点击 连接按钮重新连接 COM 口,如果此时串口调试助手的数据为 b3 b1 开头的数据则需要在单项发送的文本框内输入 de ed 00 00 05 04 3b 01 00 00 10 ,单击发送,然后拔掉USB 转TTL模块重新给模块上电后点击主页面的识别按钮即可识别模块。如果重新插上后数据还是b3 b1 开头,重复一下 PS 的步骤。
Q7. 超量程时模块会输出什么数据?
超过 25 米量程时,距离输出固定值 0 米,此时可以参考数据手册的距离状态指示来判断数据是否有效。
Q8. 模块是否支持输出点云信息?
模块单次只能输出一个距离,暂时不支持点云信息的输出。
Q9. 模块使用的串口通信端子型号是什么?飞控、单片机上没有这个端子的接口怎么办?
模块使用的是 GH1.25 的端子。可以自行购买 GH1.25 转其他端子的转接线,或者剪断产 品 附带的 GH1.25-GH1.25 接线,自行焊接其他的端子。线序、供电电压、信号线电平等请参 考数 据手册。
Q10. 接收到的 ad 08 00 如何解算为距离值?
协议帧中的数据是小端模式存储的,而且编码时乘了一定的倍率,举例来说 ad 08 00 先恢复 成 16 进制数据 0x0008ad 换算成 10 进制为 2221,除以 1000 为 2.221 米。
Q11. 校验和是怎么计算的?
校验和就是前面所有的字节相加然后取最低字节的数据,比如 55 01 00 ef 03 的校验和就是 0x55+0x01+0x00+0xef+0x03=0x0148,那校验和就是 48,所以这一帧的完整数据是 55 01 00 ef 03 48。
Q12. 为什么 IIC 模式下无法通信?
IIC 模式下,设备的 SDA 和 SCL 引脚推荐使用开漏模式输出,此时总线上需要有上拉电阻。 通信时需要按照标准的 IIC 通信时序来编写起始、终止、读、写、应答等函数,与 TOF 模块通 信时,参考用户手册的 NLink_TOFSense_IIC_Frame0 协议来对寄存器进行读取和写入。特别要 注意 7 位从机地址的移位与增加读写位发送。
Q13. 打开软件报错“由于找不到 MSVC***.dll 文件……”,可能是电脑缺少微软相应运行时组件,选择系统对应位数下载安装通常即可解决?
Visual C++ Redistributable for Visual Studio 2017,若上述安装失败或者 显示成功但打开TOFAssistant程序仍提示缺少dll文件,则尝试安装 KB2999226 补丁程序,注意,请选择电脑系统对应版本补丁程序,详细请参考博客关于 api-ms-win-crt-runtimel1-1-0.dll 缺失的解决方案
Q14. 打开软件报错“由于找不到Qt***.dll……”?
请检查安装文件是否被360等安全软件无声拦截,请退出安全软件后,重新安装。另外以管理员权限运行
Q15. 物体表面反射率会影响传感器吗?
在实际使用中,传感器的量程和精度可能会受到被测物体的反射率影响。相同环境下,对于不同反射率的被测物体,测量结果可能会有差异。因此,在使用传感器时,建议用户在实际场景中进行充分的测试,若需获取更准确的测量结果则针对具体场景进行校准。建议对比纸板与实际被测物体两种测试数据,根据信号强度进行分析并补偿和优化。