机器人开发--Pepperl+Fuchs倍加福激光雷达系列
- 1 介绍
- 2 R2000系列
- 2.1 按键操作
- 2.2 测量方法
- 2.3 协议
- 2.3.1 文档
- 2.3.2 特点
- 2.3.3 控制 HTTP
- 收发报文格式
- get_protocol_info
- 设置传感器参数
- list_parameters – list parameters
- get_parameter – read a parameter
- set_parameter – change a parameter
- reset_parameter – reset a parameter to its default value
- reboot_device – restart the sensor firmware
- factory_reset – reset the sensor to factory settings
- 基础参数
- Device family (device_family)
- User defined strings (user_tag, user_notes)
- 功能参数
- Device features (feature_flags)
- Emitter type (emitter_type)
- 网络配置
- 测量配置
- Mode of operation (operating_mode)
- Scan frequency (scan_frequency, scan_frequency_measured) 扫描频率
- Scan direction (scan_direction) 顺时针或逆时针
- Scan resolution (samples_per_scan) 每一帧采样数量
- 界面显示配置 HMI / Display configuration
- 系统状态
- System status flags (status_flags) 状态码
- 2.3.4 数据 TCP / UDP
- 坐标系
- 激光扫描仪默认逆时针旋转
- 回波振幅读数 Echo amplitude readings
- 时间戳
- 扫描数据
- 一般连接步骤
- 数据连接看门狗
- 定制数据输出(获取完整数据 或 部分数据)
- 数据校验(CRC32C可选)
- 并发连接(实际资源有限,需要消费者考虑)
- 输出管理命令
- request_handle_udp – request for an UDP-based scan data channel
- request_handle_tcp – request for a TCP-based scan data channel
- release_handle – release a data channel handle
- start_scanoutput – initiate output of scan data
- stop_scanoutput – terminate output of scan data
- set_scanoutput_config – reconfigure scan data output
- get_scanoutput_config – read scan data output configuration
- feed_watchdog – feed connection watchdog
- 扫描数据传输
- 基本数据结构
- 扫描数据头的典型结构
- 2.3.5 扫描数据滤波
- 平均滤波器
- 中值滤波器
- 最大值过滤器
- Remission filter
- 滤波器配置
- 2.3.6 镜头污染检测仪
- 2.3.7 HMI LED 显示
- 2.3.8 I/O
- 2.4 OMD30M-R2000-B23-V1V1D-HD-1L 的参数
- 参考
1 介绍
Walter Pepperl与Ludwig Fuchs这两位倍加福的奠基人于1945年在曼海姆共同创办了一家无线电修理厂。他们凭借着多年经验,迸发出智慧的创新灵感,并始终致力于技术创新,为客户开发新产品。数年后,由他们发明出世界上第一个的接近开关,这些创新造就了倍加福辉煌历史的起点。如今,倍加福公司现已成为电气防爆和传感器技术领域中,享誉世界的开拓者和创新者。
2 R2000系列
2.1 按键操作
2.2 测量方法
2.3 协议
2.3.1 文档
From https://files.pepperl-fuchs.com/webcat/navi/productInfo/doct/doct3469f.pdf?v=20201005101009
2.3.2 特点
- 所有二进制数据的字节顺序都是小端序(最低位优先)。
- 支持TCP/UDP 和 HTTP,前者是数据通道,后者是控制通道。
HTTP用于单次数据收发和参数配置(输出数据结构配置)。
输出数据(扫描数据)通过TCP/UDP传输。 - 输出数据规则:
(1)输出数据结构,由 HTTP 通道中的命令配置的。
(2)单帧数据只包含单次扫描的最新数据。
(3)数据量由客户端(消费者)确定,需要注意数据过载问题。
(4)客户端(消费者)连接数量,雷达侧不做限制,需要注意并发过载问题。
2.3.3 控制 HTTP
收发报文格式
- 请求格式
A typical HTTP request to the sensor looks like:
http://<sensor IP address>/cmd/<cmd_name>?<argument1=value>&<argument2=value>
- 返回格式
HTTP status code + Command error code + Command reply data
其中HTTP status code是基于 HTTP 通用标准的,Command error code 和 Command reply data 是倍加福自定义的,用的Json。 - HTTP status code
- Command error code
- Command reply data
返回数据,以 get_protocol_info 举例:
get_protocol_info
Query: http://<sensor IP address>/cmd/get_protocol_info
Reply:
{
"protocol_name": "pfsdp",
"version_major": 1,
"version_minor": 1,
"commands": [
"get_protocol_info",
"list_parameters",
"get_parameter",
"set_parameter",
"reboot_device",
"reset_parameter",
"request_handle_udp",
"request_handle_tcp",
"feed_watchdog",
"get_scanoutput_config",
"set_scanoutput_config",
"start_scanoutput",
"stop_scanoutput",
"release_handle"
],
"error_code": 0,
"error_text": "success"
}
设置传感器参数
- NTP(ntp64) 时间戳
NTP时间戳用一个64bit无符号定点数表示,它表示自从1900年1月1日00:00:00到现在过了多少秒。64bit分为两部分,高32bit(MSW)表示整数部分,单位是秒;低32bit(LSW)表示小数部分,单位是232皮秒((1 / 2^32)s)。 - 二进制数据
list_parameters – list parameters
列出所有的参数设置选项:
Query: http://<sensor IP address>/cmd/list_parameters
Reply:
{
"parameters": [
"vendor",
"product",
"part",
"serial",
"revision_fw",
"revision_hw",
"max_connections",
"feature_flags",
"radial_range_min",
"radial_range_max",
"radial_resolution",
"angular_fov",
"angular_resolution",
"ip_mode",
"ip_address",
"subnet_mask",
"gateway",
"scan_frequency",
"scan_direction",
"samples_per_scan",
"scan_frequency_measured",
"status_flags",
"load_indication",
"device_family",
"mac_address",
"hmi_display_mode",
"hmi_language",
"hmi_button_lock",
"hmi_parameter_lock",
"ip_mode_current",
"ip_address_current",
"subnet_mask_current",
"gateway_current",
"system_time_raw",
"user_tag",
"user_notes",
"locator_indication"],
"error_code":0,
"error_text":"success"
}
get_parameter – read a parameter
Query: http://<sensor IP address>/cmd/get_parameter?list=scan_frequency;scan_frequency_measured
Reply:
{
"scan_frequency": 50,
"scan_frequency_measured": 49.9,
"error_code": 0,
"error_text": "success"
}
set_parameter – change a parameter
Query: http://<sensor IP address>/cmd/set_parameter?scan_frequency=50
Reply:
{
"error_code": 0,
"error_text": "success"
}
reset_parameter – reset a parameter to its default value
Query: http://<sensor IP address>/cmd/reset_parameter?list=scan_frequency;scan_direction
Reply:
{
"error_code": 0,
"error_text": "success"
}
reboot_device – restart the sensor firmware
Query: http://<sensor IP address>/cmd/reboot_device
Reply:
{
"error_code": 0,
"error_text": "success"
}
factory_reset – reset the sensor to factory settings
Query: http://<sensor IP address>/cmd/factory_reset
Reply:
{
"error_code": 0,
"error_text": "success"
}
基础参数
sRO:static Read-Only access (value never changes)
RO:Read-Only access (value might change during operation)
RW:Read-Write access (non-volatile storage)
vRW:volatile Read-Write access (lost on reset)
Device family (device_family)
User defined strings (user_tag, user_notes)
功能参数
Device features (feature_flags)
Emitter type (emitter_type)
网络配置
测量配置
Mode of operation (operating_mode)
Scan frequency (scan_frequency, scan_frequency_measured) 扫描频率
the R2000 valid values range from 10 Hz to 50 Hz with steps of 1 Hz (default is 35 Hz)
Query: http://<sensor IP address>/cmd/get_parameter?list=scan_frequency;scan_frequency_measured
Reply:
{
"scan_frequency": 35,
"scan_frequency_measured": 34.9,
"error_code": 0,
"error_text": "success"
}
Scan direction (scan_direction) 顺时针或逆时针
Scan resolution (samples_per_scan) 每一帧采样数量
界面显示配置 HMI / Display configuration
系统状态
System status flags (status_flags) 状态码
2.3.4 数据 TCP / UDP
坐标系
激光扫描仪默认逆时针旋转
在标称操作期间,扫描点使用统一的角度增量和旋转方向连续记录。角增量和旋转方向都可以通过全局设备参数配置。
默认情况下,激光扫描仪在数学正方向旋转。这个方向称为逆时针(缩写为ccw)——两个后续扫描点之间的角增量为正值。相反的方向是
因此称为顺时针(缩写为cw) -两个后续扫描点之间的角增量为负值。
回波振幅读数 Echo amplitude readings
时间戳
- raw timestamps
原始时间戳由内部系统时钟生成,该时钟在上电时从零开始计数。它的分辨率是优于1 ms,漂移低于100ppm。原始时间总是在增加,没有任何不连续或溢出。 - synchronised timestamp
同步时间戳使用的时钟源已同步到外部时间服务器。请注意,这些由于时间服务器同步,时间戳可能会受到不连续性的影响。
扫描数据
TCP 数据更可靠,可能有不可预测延迟
UDP 传输延迟小,可能出现丢包
连接数量不唯一,连接句柄标识随机确定,最多16个字符。
一般连接步骤
- 如果需要,设置扫描器的全局配置
- 建立到传感器的数据通道
- 如果需要,配置扫描数据输出
- 开始扫描数据传输
- 从设备接收扫描数据
- 停止扫描数据传输
- 终止到传感器的数据通道
数据连接看门狗
要定时喂狗,超时后,传感器主动释放句柄资源。
为了防止看门狗超时,客户端需要定期给看门狗喂食。这可以通过命令feed_watchdog或使用“内嵌”看门狗feed进行TCP扫描数据连接。
每次呼叫复位看门狗定时器。软件看门狗超时时间可以由客户端应用程序为每个扫描数据连接单独配置命令watchdog和watchdogtimeout的参数request_handle_udp和set_scanoutput_config。参数watchdogtimeout指定超时时间取值范围为1s ~ 500s。watchdog参数表示看门狗开启(value on)或关闭(value off)。缺省情况下,看门狗的超时时间为60秒。
注意:虽然看门狗超时时间(watchdogtimeout)可以指定为1毫秒的分辨率,但有效的内部当前固件版本使用的分辨率约为10s。
定制数据输出(获取完整数据 或 部分数据)
- 初始化TCP或者UDP时可以配置(request_handle_tcp and request_handle_udp),也可以通过 set_scanoutput_config 来配置。
- 选择起始角度 Selecting a start angle
客户端可以使用参数start_angle配置扫描(索引0)中第一个扫描点的(极坐标)角度。缺省值为−180.0◦(即start_angle =−1800000)。后续扫描点(索引(n + 1))所述扫描数据流内根据当前传感器头部旋转方向进行排序。start_angle的值指扫描数据坐标系的测量角度。 - 限制扫描点数 Limiting number of scan points
- 限制输出扫描频率 Limiting number of scans(与扫描频率有区别)
The parameter skip_scans allows to reduce the output frequency of scans over a scan data connection
数据校验(CRC32C可选)
并发连接(实际资源有限,需要消费者考虑)
输出管理命令
request_handle_udp – request for an UDP-based scan data channel
Query: http://<sensor IP address>/cmd/request_handle_udp?address=192.168.10.20&port=54321&packet_type=C
Reply:
{
"handle": "s10",
"error_code": 0,
"error_text": "success"
}
request_handle_tcp – request for a TCP-based scan data channel
Query: http://<sensor IP address>/cmd/request_handle_tcp?packet_type=A&watchdogtimeout=1000&start_angle=0
Reply:
{
"port": 39731,
"handle": "s22",
"error_code": 0,
"error_text": "success"
}
release_handle – release a data channel handle
Query: http://<sensor IP address>/cmd/release_handle?handle=s22
Reply:
{
"error_code": 0,
"error_text": "success"
}
start_scanoutput – initiate output of scan data
Query: http://<sensor IP address>/cmd/start_scanoutput?handle=s22
Reply:
{
"error_code": 0,
"error_text": "success"
}
stop_scanoutput – terminate output of scan data
Query: http://<sensor IP address>/cmd/stop_scanoutput?handle=s22
Reply:
{
"error_code": 0,
"error_text": "success"
}
set_scanoutput_config – reconfigure scan data output
get_scanoutput_config – read scan data output configuration
Query: http://<sensor IP address>/cmd/get_scanoutput_config?handle=s22
Reply:
{
"address": "0.0.0.0",
"port": 39050,
"watchdog": "on",
"watchdogtimeout": 60000,
"packet_type": "A",
"start_angle": -1800000,
"error_code": 0,
"error_text": "success"
}
feed_watchdog – feed connection watchdog
Query: http://<sensor IP address>/cmd/feed_watchdog?handle=s36924971
Reply:
{
"error_code": 0,
"error_text": "success"
}
扫描数据传输
基本数据结构
扫描数据头的典型结构
- status_flags
- Scan data packets of type A have the following structure:
- Scan data packet type B – distance and amplitude
- Scan data packet type C – distance and amplitude (compact)
2.3.5 扫描数据滤波
扫描数据过滤在设备中添加了一个预处理选项,减少了扫描数据输出量,同时仍然利用扫描分辨率高。
扫描数据过滤的基本思想是将可配置数量的N个相邻扫描点组合为单个扫描使用各种预定义算法之一的点(按块处理)。过滤器算法计算距离值
和输入数据的振幅值。生成的扫描点位于处理窗口的中心包括角度值和时间戳值。
#### 默认不滤波
平均滤波器
平均过滤器计算配置范围内所有扫描数据点的简单算术平均值(距离和振幅)窗口大小(filter_width)。结果是一个扫描点取代了一组扫描点:
中值滤波器
所有的扫描点(虚拟地)根据它们的距离值进行排序。然后选择中间的两个点(偶数)(filter_width),单个扫描点由这些点的距离和振幅的算术平均值计算。结果扫描点替换输入扫描点组:filter_width, filter_error_handling
最大值过滤器
Remission filter
滤波器配置
2.3.6 镜头污染检测仪
镜头盖被分割成12个部门-每个覆盖30◦视野。LCM扇区以逆时针方向编号,从扇区0开始,在−180◦在后面传感器。下图说明了LCM扇区的映射。镜片污染监控器(LCM)评估每个镜片的污染情况,扇区分开,并将其与警告阈值和错误进行比较阈值。如果测试结果为阳性,则警告标志或错误为各自的扇区设置Flag。可以为每个扇区单独启用或禁用评估。此外,灵敏度和反应LCM的时间可以全局配置。以下部分提供了LCM配置的详细信息。
2.3.7 HMI LED 显示
2.3.8 I/O
2.4 OMD30M-R2000-B23-V1V1D-HD-1L 的参数
适合精密测量任务和定位,物体测量范围达 30 m,以太网通信。
扫描角度 | 360° |
---|---|
分辨率 | 1 mm |
工作电压 | 10 … 30 V DC |
功耗 | < 10 W |
接口类型 | 快速以太网,2 个开关输出 |
协议 | HTTP , TCP/IP 和 UDP/IP |
角分辨率 | 0.042 ° |
绝对精度 | 类型 ± 25 mm |
重复精度 | < 12 mm |
数据输出 | Distance/angle/echo/time stamp |
参考
1、OMD30M-R2000-B23-V1V1D-HD-1L
2、R2000技术资料
3、pepperl_fuchs_r2000 - ROS Wiki
4、倍加福 R2000 激光传感器 | 仙工智能帮助中心
5、R2000协议文档