VR第一视角远程牵引控制机械臂项目概述:
项目方案:VR+动捕+机械臂。
项目完成情况:
把CC3220开发板的TCP Server弄出来了,可以远程控制机械臂了,最终还是没有时间搭建HTTP Server,摄像头共享就只能作罢了。
不采用传统的输入设备(如:键盘、鼠标、手柄等)来做控制,也不是简单的让机械臂和操作者的手臂同步。具体实现步骤如下。
1. 制作一个机械臂
某宝上直接买了一个几十块现成的,虽然很糙,但是足够用了。
2. 安装机械臂的第一视角
配合两个舵机实现上下左右的转动。
这里本来应该是用JPEG摄像头连到CC3220开发板来做远程的, 开发板上搭建HTTP Server最终还是没搞定。
测试的时候用了一台手机代替开发板(手机上倒是做了完整的测试界面,包括控制、摄像头画面、信息窗口)。
3. 机械臂的远程控制及第一视角的远程共享
这里先说说之前的测试方案:
机械臂和控制第一视角的舵机都用Arduino驱动,把Arduino和手机用OTG线连接。手机上搭建一个HTTP服务器,负责接收远程指令和手机摄像头画面(作为机械臂的第一视角)的远程共享。机械臂的控制指令通过手机USB发送给Arduino。
结合CC3220的方案:
摄像头画面共享没实现,没有搞定开发板上的HTTP Server。在官方Demo里的“network_terminal”的基础上修改的TCP Server,从Socket里面获得控制指令,转换成PWM信号控制机械臂的舵机。这次只控制机械臂的舵机,没有远程摄像头舵机的控制。
4. 在3D开发环境下的开发
首先重构一个虚拟的机械臂,只要保证重要的机械结构一致就可以了,其它的细节不需要(参考下图)。
然后为用户构建一个虚拟的半透明屏幕,绑定在视角前方,用来显示机械臂第一视角的画面。(U
nity下面获取远程画面不是很方变,这里没有做视频流,而是通过刷新的方式一帧一帧获取摄像头画面,用base64Binary格式压缩到HTTP服务器的响应中)
导入一个单手臂的模型,并握有配套的手柄模型。
因为要用到VR,这里选择了Unity3D。远程通信要实现:
让操作者用头部转动去控制机械臂第一视角的转动
分析虚拟机械臂的运动从而计算出相应的控制指令来实现现实的机械臂和虚拟机械臂的同步。
结合CC3220的方案:
上面展示的是测试时候的方案,手机VR的SDK用的是Cardboard。结合CC3220开发板的时候,更换了Google Daydream的SDK,手柄也直接替换成了Daydream的手柄。没有搞定远程视频共享,所以删掉了虚拟的半透明屏幕,重新制作了虚拟工作环境:包括多视角观察窗口(左测和上方两个视角)、传感器监控(数据、模型)、舵机转角计算结果的监控、虚拟键盘(用于设置TCP Server的IP地址和端口)。Daydream下面不能像Cardboard一样设计屏幕输入界面,所以才设计了一个虚拟键盘。
5. 引入动捕设备
用三颗MPU6050实现手臂动捕,这样在虚拟环境下就有了完全同步的虚拟手臂了。测试的时候用了一个自制的手柄不带任何运动传感器。
结合CC3220开发板做测试的时候,采用Daydream,可以用Daydream的遥控器代替自己做的手柄。虽然Daydream的遥控器是九轴的,但校准方面还是纯主观性的,说白了跟六轴的效果是一样。在Daydream下面蓝牙插件做的有点问题,不够顺畅。如果不压缩数据,会出现明显的延时和卡顿,目前还是依靠牺牲传感器计算结果的精度来解决。感兴趣可以看看后面的一个演示视频,遥控器可以不用死死捏在手上,可以变换握姿。操作上也更加丰富了。另外,Daydream的遥控器有触摸板,配合触摸板下的按键,可以实现多种操作的组合。
6. 控制流程
测试方案:
(动捕设备) (运动分析得到控制指令)
操作者的手臂 ------> 同步的虚拟手臂 ------> 牵引虚拟的机械臂 ------> 远程让机械臂同步
(头部转动分析得到控制指令)
操作者的头部 ---------------------------------> 远程让机械臂同步
(远程图传)
虚拟环境下的虚拟屏幕<-------------机械臂第一视角
CC3220方案:
(敲击输入)
虚拟键盘 -----------------> 设置TCP Server的IP和端口
(动捕设备) (运动分析得到控制指令)
操作者的手臂 ------> 同步的虚拟手臂 ------> 牵引虚拟的机械臂 ------> 远程让机械臂同步
项目开发环境:
硬件清单:
测试方案:
机械臂 x 1(四个舵机)
舵机 x 2(用于转动手机)
Arduino x 1
安卓手机 x 2
动捕设备 x
2021-09-23 21:52:17
753.15MB
机械臂
电路方案
1