Chai3D之触觉设备
推荐:将 NSDT场景编辑器 加入你的3D开发工具链
介绍
触觉设备是一种双向仪表/致动的人机界面,由人类操作员用于与计算机模拟虚拟环境进行主动交互。触觉设备可以是鼠标、方向盘、指垫、机器人手柄、抓手、操纵杆、手套、磁悬浮手腕,甚至是移动整个用户身体的运动平台的形式。它可用于模拟具有质量、阻尼、摩擦和刚度属性的环境,也可以模拟虚拟工具与其周围虚拟环境交互的机械行为。
CHAI3D 提供了一个名为 cGenericHapticDevice 的基类,它实现了一组与最常见的 3D 触觉设备进行通信的方法。触觉设备的末端执行器或手柄的位置可以通过使用getPosition(),getRotation(),getGripperAngleDeg()等方法读取。可选的用户开关或按钮可以通过调用getUserSwitch()来读取。
力和扭矩可以通过调用诸如setForce(),setForceAndTorque()和setForceAndTorqueAndGripperForce()等方法发送到触觉设备。
对于每种型号的触觉设备(例如delta.x,omega.x猎鹰,幻影等)CHAI3D 实现了一个特定的类(例如 cDeltaDevice、cPhantomDevice),该类继承自 cGenericHapticDevice,并通过从支持该设备的 API 调用特定命令来实现每个命令。
一般规定
所有数量均以IUS(公制)单位表示。参考设备坐标系指定 x 轴指向操作员,y 轴指向操作员的右侧,z 轴指向上方。最后,原点始终位于设备物理工作区的中心。
如果触觉设备带有手腕或手写笔,则其手柄的方向使用旋转矩阵表示。下图说明了三自由度、六自由度和七自由度设备的约定。

示例 02-multi-devices 是一个简单的应用程序,它显示连接到计算机的每个触觉设备的参考帧。参考框架使用颜色而不是标签来命名不同的轴(分别为 x、y 和 z)。颜色约定为:红色表示 x 轴,绿色表示 y 轴,蓝色表示 z 轴。

触觉设备处理程序
触觉设备处理程序 (cHapticDeviceHandler) 是一个类,用于搜索并列出连接到计算机的所有触觉设备。
在下面的列表中,我们说明了一个简单的示例,该示例对触觉设备施加力,使其末端执行器朝向其工作空间的中心点:
using namespace chai3d;
// create haptic device handler
cHapticDeviceHandler* handler;
handler = new cHapticDeviceHandler();
// get handle to first available haptic device on the list
cGenericHapticDevice* hapticDevice;
handler->getDevice(hapticDevice, 0);
// open connection to haptic device
hapticDevice->open();
// initialize simulation
bool simulationRunning = true;
double Kp = 25;
cVector3d position(0,0,0);
// haptics loop
while (simulationRunning)
{
// read position from haptic device
hapticDevice->getPosition(position);
// compute force
cVector3d force = -Kp * position;
// send force to haptic device
hapticDevice->setForce(force);
}
// close connection to haptic device
hapticDevice->close();
如何定制触觉设备
cMyCustomDevice 提供了一个基本模板,可让您非常轻松地将 CHAI3D 连接到您自己的自定义触觉设备。只需按照文件 CMyCustomDevice 中的 12 个注释步骤操作.cpp并相应地完成代码。根据设备上的自由度数,可能需要实现并非所有方法。例如,如果您的设备不提供任何旋转自由度,只需忽略 getRotation() 方法即可。如果未在设备上实现默认值,则将正确返回默认值。例如,在旋转的情况下,返回单位矩阵。
您还可以重命名此类,在这种情况下,您还需要自定义触觉处理程序以自动检测您的设备。请查阅 cHapticDeviceHandler 类的方法 update(),该类位于文件 CHapticDeviceHandler.cpp 中。只需查看触觉设备处理程序如何查找 cMyCustomDevice 类型的设备。
如果您在实现时遇到任何问题,请检查实例文件 CDeltaDevices.cpp该文件实现了对力维度和 Novint 触觉设备的支持。为了验证实现,请使用01-mydevice示例开始。示例 11-effects 是一个很好的演示,用于验证基本触觉效果在触觉设备上的行为方式。如果您确实遇到振动或不稳定性,请尝试降低设备支持的最大刚度(请参阅文件 CMyCustomDevice.cpp 中的 STEP1)。
确保您的设备与计算机的通信速度也足够快。理想情况下,通信周期应小于1ms,以达到至少1000Hz的所需更新速率。例如,使用慢速串行端口 (RS232) 时通常会出现问题。
3D建模学习工作室翻译整理,转载请标明出处!
Chai3D之触觉设备的更多相关文章
- VREP中的力触觉设备接口(CHAI3D)
力反馈技术是一种新型的人机交互技术,它允许用户借助力反馈设备触碰.操纵计算机生成的虚拟环境中的物体,并感知物体的运动和相应的力反馈信息,实现人机力觉交互.虽然传统的鼠标.键盘.触摸屏等交互手段可以满足 ...
- 前端页面开发,最低兼容IE 8的多设备跨平台问题解决!
项目要求: 网站能够使用PC.ipad.mobile phone正常访问 页面PSD版式宽度分别为1024px和750px 参考资料 使用CSS3 Media Queries,其作用就是允许添加表达式 ...
- 一些有意思的VR设备介绍
1.计算机(Computers) 不久以前,一个VR系统需要百万美元的超级计算机:而如今顶级的VR系统正在使用桌面便携式计算机簇,极大的降低了价格和维护成本. 2.跟踪器(Tracking) 为了能与 ...
- 使用Phantom omni力反馈设备控制机器人
传统的工业机器人普遍采用电机 .齿轮减速器 .关节轴三者直接连接的传动机构,这种机构要求电机与减速器安装在机械臂关节附近,其缺点是对于多关节机械臂,下一级关节的电机与减速器等驱动装置成为上一级关节的额 ...
- web页面之响应式布局
一.什么是响应式布局? 响应式布局是Ethan Marcotte在2010年5月份提出的一个概念,简而言之,就是一个网站能够兼容多个终端——而不是为每个终端做一个特定的版本.这个概念是为解决移动互联网 ...
- 9_bootstrap less 移动端
chrome,firefox提供了"Device Emulation"功能,可模拟常见的各种浏览设备 android ADT或ios Xcode附带的设备模拟器,或第三方在线测试工 ...
- 浅谈html5 响应式布局
一.什么是响应式布局? 响应式布局是Ethan Marcotte在2010年5月份提出的一个概念,简而言之,就是一个网站能够兼容多个终端——而不是为每个终端做一个特定的版本. 这个概念是为解决移动互联 ...
- [转]CSS3 Media Query实现响应布局
讲到响应式布局, 相信大家都有一定的了解,响应式布局是今年很流行的一个设计理念,随着移动互联网的盛行,为解决如今各式各样的浏览器分辨率以及不同移动设备的显示效果, 设计师提出了响应式布局的设计方案.今 ...
- css3基础、(弹性、响应式)布局注意点
E1>E2选择父元素为E元素的所有E2元素(子类选择器) E1+E2选择元素为E1之后的所有E2元素(兄弟选择器) E[attr]只使用属性名,但没有确定任何属性值 E[attr="v ...
- 响应式web设计之CSS3 Media Queries
开始研究响应式web设计,CSS3 Media Queries是入门. Media Queries,其作用就是允许添加表达式用以确定媒体的环境情况,以此来应用不同的样式表.换句话说,其允许我们在不改变 ...
随机推荐
- OpenVINO计算机视觉模型加速
OpenVINO计算机视觉模型加速 OpenVINO介绍 计算机视觉部署框架,支持多种边缘硬件平台 Intel开发并开源使用的计算机视觉库 支持多个场景视觉任务场景的快速演示 四个主要模块: 1.开发 ...
- Nmap扫描参数
执行Nmap/nmap --help查看帮助文档,将显示Namp的用法及其功能Nmap的相关参数的含义与用法:扫描目标时用到的参数:-iL:从文件中导入目标主机或目标网段-iR:随意选择目标主机--e ...
- 分布式注册服务中心etcd在云原生引擎中的实践
作者:王雷 etcd是什么 etcd是云原生架构中重要的基础组件,由CNCF孵化托管.ETCD是用于共享配置和服务发现的分布式,一致性的KV存储系统,是CoreOS公司发起的一个开源项目,授权协议为A ...
- java Jdbc 简单方法
1.注册驱动(第一种方法) Class.forName(com.mysql.jdbc.Driver"); 2.获得连接DriverManager.getConnection(url,user ...
- MongoDB从入门到实战之.NET Core使用MongoDB开发ToDoList系统(2)-Swagger框架集成
Swagger是什么? Swagger是一个规范且完整API文档管理框架,可以用于生成.描述和调用可视化的RESTful风格的 Web 服务.Swagger 的目标是对 REST API 定义一个标准 ...
- Spark详解(05-1) - SparkCore实战案例
Spark详解(05-1) - SparkCore实战案例 数据准备 1)数据格式 本项目的数据是采集电商网站的用户行为数据,主要包含用户的4种行为:搜索.点击.下单和支付. (1)数据采用_分割字段 ...
- Ansible 学习笔记 - 定位主机和组的模式
中英文对照表 英文 中文 备注 host 主机 group (主机)组 pattern 模式 ad hoc 特别命令 playbook 剧本 Ansible 专有名词,一段复杂的编排 inventor ...
- MySQL优化四,高性能优化
一,查询优化器 这个部分的整个过程是由MySQL的存储引擎来做的,优化器就会根据存储引擎来使用原来的开销, 优化后的开销,哪个更好一点? 1.如果是查询语句(select语句),首先会查询缓存是否已有 ...
- 🈲Eclipse通过jdbc连接数据库制作简单登陆界面【新手必看】
一.前言: 做网站开发,要求有多种搭配方式,前台技术可以使用PHP.ASP.JSP.ASP.NET.CGI等任何一种: 需要用到的基础语言用的最多的就是HTML/CSS.JS.JAVA.XML这些了, ...
- C++Day12 虚拟继承内存布局测试
测试一.虚继承与继承的区别 1.1 单个继承,不带虚函数 1>class B size(8): 1> +--- 1> 0 | +--- (base class A) 1> 0 ...