TOF Laser Range Sensor 系列是基于 TOF (飞行时间) 技术的激光测距传感器。内置控制器和测距算法,测距范围可达25m,精度高达 ±3cm。支持 UART、I2C和 I/O互补电平输出通信,具备超小的 FOV 角,使得距离更远抗光干扰能力更强,室内外环境均适用,抗环境光能力最高约 100K LUX 照度,可以作为测距工具进行距离检测,也可作为机器人避障/路线规划,还可用于无人机定高/天花板检测和料位测量等领域。
TOF是一种绝对距离检测技术,即传感器发出经过调试的近红外光,遇物体后反射,传感器通过计算光线发射和反射时差或相位差,来换算被拍摄景物的距离,以产生深度信息。相比于双目方案与3D结构光方案,TOF具有工作距离远,适用场景广,较远距离精度高等优点。因此常被应用于人员接近检测、机器人避障、照相机自动对焦等场合。
TOF Laser Range Sensor (C) 支持配置为UART、IIC、I/O 通信方式:
UART串口通信波特率设置范围如下:
UART串口波特率 | 说明 |
---|---|
115200,230400,460800,921600,1000000,1200000,2000000,3000000 | 默认波特率为921600 |
UART接口模式支持“主动输出”和“查询输出”,两种输出方式可以通过在 Waveshare TOFAssistant 软件上修改数据输出方式进行切换,通过 USB 转 TTL 模块(线序和供电电压参考数据手册)连接 TOF Laser Range Sensor 系列产品到Waveshare TOFAssistant 软件,识别成功后点击 进入设置页面,配置完参数后需要点击写入参数按钮来保存参数,写入参数成功后可以读取一次参数来确认参数是否写入成功。
上位机下载:
I2C波特率 | 说明 |
---|---|
最高400KHz | 最高400KHz,有主机决定 |
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 模式。
模块处于 UART 模式时(注意 Waveshare TOFAssistant 无法识别处于 I/O 模式下的模块),通过 USB TO TTL 模块(线序和供电电压参考数据手册)连接 TOF 系列产品到 Waveshare TOFAssistant 软件,识别 成功后点击 进入设置页面,首先设置滞环起点 Band_Start 与滞环宽度 Bandwidth 确定滞环区 间,I/O 输出模式配置如图 4;距离值通过滞环比较转换为高低电平输出,I/O_L 与 I/O_H 输出互补电平,滞环比较示意图如图 5 所示。配置完参数后需要点击写入参数按钮来保存参数。 注:切换到 I/O 模式后,可以参考 FAQ 章节中的方式来更改回 UART 模式。
例如,Band_Start 和 Bandwidth 都设置成 500,对应的是 0.5 米。当测距值为 0.3 米时,I/O_H 为高,I/O_L 为低,测距值变大到 0.8 米,I/O_H 为高,I/O_L 为低,测距值超过 1 米时,电平反转,I/O_H 为低,I/O_L 为高。测距值从 1 米多降到 0.8 米,I/O_H 为低,I/O_L 为高,测距值降到低于 0.5 米时, 电平反转,I/O_H 为高,I/O_L 为低。
其中 TOF (C) 的 Band_Start、Bandwidth 取值范围[0~25000], 单位:mm。
模块可以输出当前距离状态,用户可结合距离状态进行数据处理,距离状态含义如下:
数值 | 说明 |
---|---|
0 | 测量距离无效 |
1 | 测量距离有效 |
Frame Header + Function Mark + Data + Sum Check
说明:协议包遵循小端模式原则,即低字节在前,高字节在后。
协议 | 类型 | 概述 |
---|---|---|
NLINK_TOFSENSE_FRAME0 | 定长 | UART 输出协议, 内容包括节点时间戳、距离、距离状态、 信号强度 |
NLINK_TOFSENSE_READ _FRAME0 | 定长 | UART 读取协议, 内容包括节点 ID |
NLINK_TOFSENSE_IIC_FRAME0 | 变长 | IIC 通信协议, 内容包括距离、距离状态、信号强度等 |
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 |
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 FF | * |
id | uint8 | 1 | 00 | 0 |
reserved | uint8 | 2 | FF FF | * |
Sum Check | uint8 | 1 | 63 | 0x63 |
AD 08 00 00 03 00 FF FF
TOF Assistant是TOF激光测距模块配套的调试软件,主要作用为:配置调试、状态显示、功能应用、固件升级:
wget https://www.waveshare.net/w/upload/0/01/TOF_Laser_Range_Sensor_demo.zip unzip TOF_Laser_Range_Sensor_demo.zip cd TOF_Laser_Range_Sensor_demo/
cd ~/TOF_Laser_Range_Sensor_demo/Raspberry/c/UART/ make ./main
cd ~/TOF_Laser_Range_Sensor_demo/Raspberry/python/UART/example python main.py
接入树莓派I2C的参考如下:
cd ~/TOF_Laser_Range_Sensor_demo/Raspberry/c/I2C/ make ./main
cd ~/TOF_Laser_Range_Sensor_demo/Raspberry/python/I2C/example python main.py
接入树莓派IO的参考如下:
sudo apt-get update sudo apt install gpiod libgpiod-dev
cd ~/TOF_Laser_Range_Sensor_demo/Raspberry/c/IO/ make ./main
cd ~/TOF_Laser_Range_Sensor_demo/Raspberry/python/IO/ python TOF_IO_Demo.py
Arduino UNO R3
Arduino UNO R4
Arduino UNO R3
Arduino UNO R4
Arduino UNO R3
Arduino UNO R4
Arduino UNO R3
Arduino UNO R4
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 软件识别不了模块?如何在不同通讯模式间 进行切换?
目前 NAssistant 软件只支持识别 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、打开 NAssistant 软件,点击 图标进入串口调试助手,把波特率改为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. 物体表面反射率会影响传感器吗?
在实际使用中,传感器的量程和精度可能会受到被测物体的反射率影响。相同环境下,对于不同反射率的被测物体,测量结果可能会有差异。因此,在使用传感器时,建议用户在实际场景中进行充分的测试,若需获取更准确的测量结果则针对具体场景进行校准。建议对比纸板与实际被测物体两种测试数据,根据信号强度进行分析并补偿和优化。周一-周五(9:30-6:30)周六(9:30-5:30)
手机:13434470212
邮箱:services04@spotpear.cn
QQ:202004841