Device类(Leap:: Device)和 DeviceList类(Leap:: DeviceList)

Device类(Leap:: Device)

这个类代表了一个物理连接设备。这个类包括了与一个特定的连接设备相关的信息,比如设备的ID、与设备相关的视线、以及在相对坐标系中设备的位置和方向。位置和方向描述了相对于用户设备的校准,对用户调整设备提供了在描述用户交互的参数中的一致性。这个类也许是无效的,需要用Device::isValid()函数来测试。
enum Type: 表示Leap Motion控制器可用的几种类型。
TYPE_PERIPHERAL = 1表示独立的USB外部设备。
TYPE_LAPTOP表示Controller嵌入在一个笔记本电脑上。
TYPE_KEYBOARD表示Controller嵌入在一个键盘上。
Device(): 构造一个Device对象。没有初始化的设备被认为是无效的。从Controller::devices()得到的这个DeviceList对象中获得有效的Device对象。
用法:Leap::Device device = controller.devices()[0];
float horizontalViewAngle(): 表示顺着这个设备的x轴的视角。如下图。Leap Motion控制器的扫描区域像一个倒置的金字塔,中心在设备的中心,然后向上延伸。这个函数报告了沿着设备的长边的视角。
用法:float angleOnLongDimension = device.horizontalViewAngle();

这里写图片描述

这里写图片描述

float verticalViewAngle(): 表示顺着这个设备的z轴的视角。如上图。这个函数报告了沿着设备的短边的视角。
用法:float angleOnShortDimension = device.verticalViewAngle();
float range(): 表示从设备的中心开始的最大有效跟踪范围。这个距离不是个硬限制,在这个距离以上或开始略低于这个距离跟踪仍然有效,主要取决于校准和极端环境条件。
用法:float range=device.range();
float baseline(): 表示立体视觉传感器的中心点之间的距离。这个值和最大分辨率影响着最大的范围。
float distanceToBoundary(const Vector& position): 表示到Leap Motion控制器视体最近的边的距离。视体是一个坐标对齐的倒金字塔,中心在设备的中心,向上延伸至范围限制。这个函数估计了指定的输入位置到最近的视体的墙或屋顶的距离。
用法:Leap::Pointable frontFinger = controller.frame().fingers().frontmost();
float distanceToBoxWall = device.distanceToBoundary(frontFinger.tipPosition());
bool isEmbedded(): 判断这个设备是否嵌入在另一个电脑或电脑外部设备中。
bool isStreaming(): 判断这个设备对于你的应用程序来说是否是流数据。当前在某一刻只有一个控制器可以提供数据。
bool isFlipped(): 这个函数弃用了,总是返回false。
Type type(): 表示设备的类型。在你有一个依赖于特定类型设备的应用程序特性的情况下,使用这个设备类型值。当前设备类型见枚举类型。
std::string serialNumber(): 一个字母序列数字,每个设备是特有的。用户设备序列号由2个字母+11位数组成。当用多个设备时,这个序列数为每个设备提供了明确的标识符。
bool isValid(): 判断是否是一个有效的Device对象。
const Device& invalid(): 返回一个无效的Device对象。
bool operator==(const Device&): 比较Device对象的相等性。
bool operator !=(const Device&): 比较Device对象的不相等性。
std::string toString(): 表示包含Device对象描述信息的字符串。

DeviceList类(Leap:: DeviceList)

这个类代表了Device对象的列表。调用Controller::devices()得到DeviceList对象。
DeviceList(): 构造一个空的设备列表。
int count(): 返回列表中设备的数目。
bool isEmpty(): 判断这个列表是否为空。
Device operator[](int index): 表示对列表中一个成员位置的访问。返回的是指定索引下的Device对象。
DeviceList & append(const DeviceList & other): 表示把指定的一个DeviceList的成员添加到这个DeviceList对象中。参数other表示一个DeviceList对象,其中包含Device对象,将要添加到这个DeviceList对象末端。
const_iterator begin(): 表示C++的迭代器,设置在这个DeviceList对象的开始。
const_iterator end(): 表示C++的迭代器,设置在这个DeviceList对象的结束。

译自:https://developer.leapmotion.com/documentation/cpp/api/Leap.Device.html
https://developer.leapmotion.com/documentation/cpp/api/Leap.DeviceList.html

### 在树莓派上设置或使用 WebSocket 要在树莓派上实现 WebSocket 的开发或配置,可以按照以下方法操作。以下是关于如何在树莓派上部署运行 WebSocket 应用程序的具体细节。 #### 使用 Python 实现 WebSocket 服务端 可以通过 `websockets` 或其他库来构建 WebSocket 服务端。下面是一个简单的例子: ```python import asyncio import websockets async def echo(websocket, path): async for message in websocket: await websocket.send(f"Received: {message}") start_server = websockets.serve(echo, "0.0.0.0", 8765) asyncio.get_event_loop().run_until_complete(start_server) asyncio.get_event_loop().run_forever() ``` 上述代码展示了如何启动一个监听所有网络接口并绑定到端口 `8765` 的简单 WebSocket 服务器[^2]。 #### 结合硬件设备的数据采集与发送 如果希望将传感器或其他硬件设备的数据通过 WebSocket 发送到客户端,则可以在循环中读取这些数据并将它们传递给连接的客户端。例如,在 LeapMotion 数据处理场景下,可以从传感器获取实时数据并通过 WebSocket 推送至前端页面显示[^3]。 对于更复杂的项目架构设计,比如多线程调度任务以及管理多个外设状态更新频率等问题,可参考如下改进后的代码片段: ```python from apscheduler.schedulers.background import BackgroundScheduler from Devices import devices import websocket class WmSocket: def __init__(self): self.scheduler = BackgroundScheduler() def startTransDevice(self, device): """ 定义定时器逻辑 """ pass def on_open(self, ws): global aps aps.ws = ws for key, value in devices.deviceList.items(): if value.sendTime != 0: self.startTransDevice(value) self.scheduler.print_jobs() self.scheduler.start() ``` 此部分来源于先前讨论过的优化版本中的核心组件定义。 #### Node.js 替代方案 除了 Python 外,还可以考虑采用 JavaScript 其生态系统下的工具链完成似功能。Node.js 提供了一个轻量级框架用于快速建立 WebSockets 连接,并支持大规模并发访问模式。这里给出一段基础示范代码作为对比学习材料: ```javascript const ws = require('nodejs-websocket'); // 创建WebSocket Server实例 const server = ws.createServer((conn) => { conn.on('text', (data) => { broadcast(data); }); conn.on('error', () => { console.error("An error occurred"); }); conn.on('close', () => { console.info("Client disconnected"); }); }); server.listen(8181, () => { console.log("Server is listening on port 8181..."); }); function broadcast(message){ server.connections.forEach(function(connection){ connection.sendText(message); }); } ``` 这段脚本同样实现了基本的消息广播机制,适用于初学者入门练习或者小型 IoT 场景需求分析阶段测试用途[^4]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值