此SDK是基于RPLidar激光雷达开发,实现快速划定多点触摸区域范围及大小,将所有触摸点扫描并显示在用户界面上的功能。
所需工具
- RPLidar激光雷达套件
RPlidar_multi_touch SDK : 请点击这里下载。
注意事项
注意
此SDK默认适用于RPLiDAR A2 型号,如果想连接测试波特率为256000的雷达如A3,需要更改multi_touch.json中的波特率的值。
- 请确保USB线不宜过长,需保证RPLidar的供电需求,最好先使用RPLidar套件中0.3m的短USB线。
- 需要在电脑上事先安装对应系统的cp210x驱动,具体详情可以参考RPLidar开发套装用户手册。
使用网口附件板的用户首先需按照下面链接中文档配置好模块IP地址,
https://wiki.slamtec.com/pages/viewpage.action?pageId=10354801并且将电脑的IP地址配置到同样网段,例如模块默认IP地址为192.168.0.7, 此时可按照如下图片中设置电脑的IP地址。
另外,需要将multi_touch.json中的connect_path参数改为TCP。(此部分将在SDK文件组织结构中介绍)
配置流程
首先打开位于workspaces\vc10下的 VS 解决方案文件:sdk_and_demo.sln
注意
注意:本文档所使用的应用环境均基于VS2010, 其他版本的VS会出现编译问题。
- 右键点击Solution Explorer 中的Solution”sdk_and_demo”(5 projects), 点击rebuild solution。
- 打开workspaces\vc10\sdk_project\multiTouch_sdk\output 文件目录,拷贝目录下的multiTouch_sdk.dll文件。如果在该目录下没有发现multiTouch_sdk.dll文件,说明之前的编译未成功,请返回步骤2,重新编译Solution。
- 复制到workspaces\vc10\demo_project 文件目录下对应的3个demo文件中的\bin目录下,这样就可以打开对应的3个demo app来进行后续操作。
左边红框中显示当前目录为rplidar_multi_touch这个app的\bin目录,右边红框中即为步骤2中编译出的multiTouch_sdk.dll文件。 - 将RPLidar固定于墙面, 为了标定时方便,建议用户将雷达如下图所示方向固定,即雷达接线方向垂直向下。如若固定时按照其他角度来安装,请注意雷达的串口接线方向为雷达实际的180度方向。
通过USB适配器或者网口附件板接入PC后,首先打开calibration application标定触摸区域,
点击左上角file菜单下load configuration读取对应的配置注意
请注意这里要读取的multi_touch.json配置文件, 在Debug模式编译下,是存储在..\conf文件目录下,Release模式编译下是存储在workspaces\vc10\demo_project\rplidar_multi_touch\bin文件目录下,放在其他目录下无效。
拖动白色虚线框体来标定触摸区域和大小
标定结束后保存区域至conf目录下multi_touch.json文件,图中标定范围为一个1米边长的正方形,即图中白色虚线区域,图中蓝色点为实时扫描的激光点,如步骤5中安装图所示,蓝色点扫描出的是固定在墙面时的房间轮廓。
打开workspaces\vc10\demo_project\rplidar_multi_touch\bin目录下的rplidar_multi_touch_debug.exe。会显示颜色大小不同的圆,代表了每一个TouchPoints。按照之前标定的1m*1m的区域内,将其按照屏幕比例映射显示(此时屏幕分辨率为1920*1080)
TouchPoints的大小是如何确定的?
Rplidar_multi_touch应用中首先将原始以极坐标系表示的雷达点数据转换成以笛卡尔坐标系表示,如果两个点距离小于0.05m (BlobCombinationThreshold参数),则将两个点融合为一个以两个点为矩形顶点的矩形,矩形长度取两个点中较大x值,宽度取两个点中较大y值,如果融合后的矩形和其他的矩形距离还是小于0.05m,则将两个矩形继续融合,以两个矩形较大长度为新矩形长度,以两个矩形较大宽度为新矩形宽度,融合直到没有矩形或者点两两之间距离小于0.05.
然后根据矩形长度和宽度的大小关系,计算出以长度或者宽度为直径的圆的半径,作为TouchPoints在屏幕上画圆的半径。
SDK 和实例程序的编译
如果您使用Windows进行开发,请打开位于workspaces\vc10下的 VS 解决方案文件:sdk_and_demo.sln。其中包含了 SDK 项目工程以及所有的示例程序项目。
您可以直接在 VS 环境中使用编译命令对 SDK 本身以及所有示例程序进行编译。按照开发需要,可以选择 Debug 或者 Release 编译方式。编译结果可以 在 output\win32\Debug 或者 output\win32\Release 中找到。
Ultra_simple_multi_touch
该示例程序演示 PC 通过串口与 RPLIDAR 进行连接,并不断的将在触摸区域内的 RPLIDAR 扫描数据输出的最简单过程。
使用方式:
1) 使用包装里提供的 USB 线连接 RPLIDAR 至 PC 机 (开发板集成了 USB 转 串口芯片)
2)控制台打开workspace\vs10\demo_project\ultra_simple_multi_touch \bin下ultra_rplidar_multi_touch.exe运行程序
如果不指定 COM 设备号,则程序会尝试打开 COM3。
rplidar_multi_touch
该示例程序演示 PC 通过串口与 RPLIDAR 进行连接,实时采集雷达扫描数据, 并在 GUI 界面上将触摸区域内的点数据融合以后以彩色圆圈的方式显示出来。
使用方式
1) 使用包装里提供的 USB 线连接 RPLIDAR 至 PC 机 (开发板集成了 USB 转 串口芯片)
2) 双击打开 workspace\vs10\demo_project\rplidar_multi_touch\bin下的rplidar_multi_touch_debug.exe运行程序
在配置流程步骤8中已有详细介绍。
Calibration application
该示例程序演示 PC 通过串口与 RPLIDAR 进行连接,实时采集雷达扫描数据, 并在 GUI 界面上将触摸区域内的点数据,以及标定了触摸区域的大小与范围.
使用方式
1) 使用包装里提供的 USB 线连接 RPLIDAR 至 PC 机 (开发板集成了 USB 转 串口芯片)
2) 双击打开 workspace\vs10\demo_project\calibration_app\bin下的rplidar_multi_touch_debug.exe运行程序
3)点击左上方file目录下load configuration,选择..\conf目录下(Debug编译)workspace\vs10\demo_project\calibration_app\bin目录下(Release编译)的对应json文件读取配置,此时雷达会开始转动,界面上会出现雷达扫描点和标定触摸区域的白框,可以手动拖动调整框体的大小和区域。点击file目录下的save configuration可以保存配置好的触摸区域位置信息。
注意
SDK文件架构
SDK的文件结构如下图所示:
文件中包含了此SDK中使用的第三方库,分别是:
- Jsoncpp库 用于解析Json格式的文件
- Open frameworks库 用来基于此框架快速开发高性能的互动程序
conf目录包含一个json格式的配置文件,会在每次开始扫面时读取这个配置文件中的参数,可配置的参数包括
- “connect path”连接路径和方式选择,暂时只支持串口和TCP,
- “touch_area”触摸区域的大小
- “show_lidar_scan”是否显示雷达扫描点
- “show_touch_point_coordination”是否显示touchpoint坐标
- “angle_offset”默认为180度,此参数不能改变。
demo_app目录包含了相关的示例程序代码,暂时提供了如下几个示例程序:
- rplidar_multi_touch
一个基于win32的GUI显示程序,获取到当前触摸的点数据后,经过渲染实时的呈现在界面上。
- Ultra_simple_multi_touch
一个基于命令行的演示程序,不断的输出当前的触摸点数据。
SDK目录包含了multi_touch驱动程序的外部头文件(include目录)以及SDK自身的内部实现代码(src目录)。
Workspace目录包含了SDK和相关示例程序的VS工程项目文件。
对于经过编译的 SDK,上述目录结构还会新增 2 个子目录:obj 和 output。 其中 output 目录存放了编译产生的 SDK 静态库(.lib 或者.a)以及示例程序的可 执行文件(exe 或者 elf 格式)。obj 目录存放了编译过程中的中间文件。
至此所有的配置步骤已经SDK介绍就结束了,用户可以通过配置快速将RPLIDAR与Multi_touch SDK结合,通过rplidar_multi_touch应用显示所有的TouchPoints,实现多点触摸的效果。
用户也可以根据Multi_touch SDK进行二次开发,附录中附有SDK头文件和接口函数的简介,以帮助用户快速开发。
附录:
SDK头文件介绍
app_config.h
定义了多点触摸应用中的配置参数,以及从Json配置文件读取参数的函数与打印调试函数。
message.h
将雷达的扫描点加入时间戳
nodeProcessDevice.h
定义了核心驱动接口 NodeProcessDevice类声明,包含获取雷达的原始点数据并将雷达点数据融合为将显示在屏幕上的圆圈的实现过程。
rplidar.h
一般情况下开发的项目中仅需引入该头文件即可使用RPLidar SDK的所有功能。
rplidar_driver.h
定义了RPLidar SDK核心驱动接口: RPLIdarDriver的类声明。
rplidar_protocol.h
定义了RPLidar 通讯协议文档中描述的底层相关数据接口和常量定义。
rplidar_cmd.h
定义了RPLidar 通讯协议文档中描述的各类请求/应答相关的数据结构和常量定义。
rptypes.h
平台无关的结构和常量定义。
SDK接口函数介绍
SDK初始化
在用户程序与一个RPLidar设备进行通讯操作前,首先需要创建一个对应的NodeProcessDevice实例,在rplidar_multi_touch中通过ofApp类的构造函数创建了一个NodeProcessDevice实例 proDev_ .
连接RPLidar
在创建NodeProcessDevice实例后,通过createAndStartRPLidar()函数连接到RPLidar设备,支持串口(serial)和网口(TCP)两种模式连接,连接成功返回true。
配置扫描参数
通过startUp()函数来读取Json格式的配置文件中的参数,包括了设置触摸点的面积CropArea的大小。
设置雷达转速
通过setLidarPwm()来调节雷达的转速,默认值为660(占空比60%左右),最大值为1023.
获取雷达扫描点
通过getLidarScan()函数来获取雷达扫描数据,其中调用RPLidar_driver中的grabScanData()函数获取雷达原始数据,通过processScan()函数将原始数据加上带有当前时间的时间戳,并解析这些点的距离,角度数据。
设置屏幕尺寸
通过setScreenSize来设置屏幕的大小。默认值为1920*1080.
获取触摸点数据
通过getTouchPoints()来获取触摸点数据.
获取在触摸区域内的雷达扫描点
通过getScanNodeDrawPoints()来获取雷达扫描点,并判断是否在触摸区域内,将其转换成为以笛卡尔坐标系表示的点供后续调用显示在屏幕上。