Physical Address

304 North Cardinal St.
Dorchester Center, MA 02124

VR动物外设 V1.1.1

产品制作及介绍手册

版本:V1.1.1
2024.1.29


目录
一、 硬件部分
1. 硬件选型
1.1 前期准备
1.2 控制板选型
2. 硬件功能定义
3. 硬件部署清单
4. 硬件拓扑图
二、 插件部分
1. 插件下载
2. 插件导入
3. 插件初始化
4. 插件连接
5. 产品功能介绍
5.1 乘骑霸王龙
5.2 行走戟龙
5.3 仿真马
5.4 仿真小马、大象、鲨鱼、海豚、小霸王龙
三、 主动控制
1. Unity插件调用方式
1.1 挂载两个脚本
1.2 VRAnimalDemo脚本中初始化
1.3 方法调用
2. UE4 插件调用方式
四、 被动体验
1. 动作文件编辑
2. 内容播放


一、硬件部分

1. 硬件选型

1.1 前期准备
  1. ARDUINO 开发板常用函数
    • pinMode(pin, mode):定义数字管脚的输入/输出,pin可以取0-13,对应14个数字管脚;mode为INPUT/OUTPUT之一,表明该管脚是用于输入还是输出
    • digitalWrite(pin, val):设置数字管脚输出电平,val取值为HIGH/LOW之一
    • digitalRead(pin)– 读取数字输入管脚的电平,函数返回值为HIGH/LOW之一,通常根据返回值为高或者低从而进行不同的处理
    • analogRead(pin):读取模拟输入管脚的值,pin取值为A0 – A5;返回0-1023之间的值
    • analogWrite(pin, val):设置数字管脚中的PWM管脚的输出值,val取值为0-255
    • Serial.begin(speed):初始化串口并设置串口速率,如Serial.begin(9600); 即将串口速率设置为9600bps
    • Serial.print()/Serial.println():串口输出函数
    • delay(val):延时函数,单位为ms,如delay(1000)为延时1s
  2. 程序初始化接线方式
    • DFRduino Mega2560 需要通过USBAB方口 程序初始化接线方式
    • Bluno Mega2560 需要通过microusb口 程序初始化接线方式
    • DFRobot Leonardo 需要通过microusb口 程序初始化接线方式
    • Arduino Uno R3 需要通过USBAB方口 程序初始化接线方式
1.2 控制板选型
  1. DFRduino Mega2560 控制器+W5100S用来作为骑乘霸王龙、仿真马的控制。
  2. Bluno Mega2560控制器用来作为行走戟龙的控制。
  3. DFRobot Xboard V3控制器用来作为仿真小马、大象、鲨鱼、海豚、小霸王龙的控制。
  4. DFRobot Leonardo + W5100S 用来作为骑乘骆驼的控制。
  5. Arduino Uno R3 + W5100 用来控制骑乘大象、鲨鱼、海豚

2. 硬件功能定义

  1. 骑乘霸王龙引脚定义
动作 备注 控制端口 控制函数
张嘴 高电平有效 A1 pinMode(A1, OUTPUT);digitalWrite(A1, 1);
眨眼 高电平有效 A2 pinMode(A2, OUTPUT);digitalWrite(A2, 1);
头左右 高电平有效 A3 pinMode(A3, OUTPUT);digitalWrite(A3, 1);
颈上下 高电平有效 A4 pinMode(A4, OUTPUT);digitalWrite(A4, 1);
前肢 高电平有效 A5 pinMode(A5, OUTPUT);digitalWrite(A5, 1);
身左右 高电平有效 A6 pinMode(A6, OUTPUT);digitalWrite(A6, 1);
尾摆 高电平有效 A7 pinMode(A7, OUTPUT);digitalWrite(A7, 1);
身体上下 0-5V模拟信号,调速 D9 pinMode(D9, OUTPUT);analogWrite(D9, 0~255);
  1. 行走戟龙引脚定义(向左和向右不能同时为高电平)
动作 备注 控制端口 控制函数
张嘴 高电平有效 A1 pinMode(A1, OUTPUT);digitalWrite(A1, 1);
眨眼 高电平有效 A2 pinMode(A2, OUTPUT);digitalWrite(A2, 1);
头左右 高电平有效 A3 pinMode(A3, OUTPUT);digitalWrite(A3, 1);
颈上下 高电平有效 A4 pinMode(A4, OUTPUT);digitalWrite(A4, 1);
向左 高电平有效 A5 pinMode(A5, OUTPUT);digitalWrite(A5, 1);
向右 高电平有效 A7 pinMode(A7, OUTPUT);digitalWrite(A7, 1);
尾摆 高电平有效 A8 pinMode(A8, OUTPUT);digitalWrite(A8, 1);
前进 0-5V模拟信号,调速 D9 pinMode(D9, OUTPUT);analogWrite(D9, 0~255);
  1. 仿真马引脚定义
动作 备注 控制端口 控制函数
张嘴 高电平有效 A1 pinMode(A1, OUTPUT);digitalWrite(A1, 1);
眨眼 高电平有效 A2 pinMode(A2, OUTPUT);digitalWrite(A2, 1);
颈上下 高电平有效 A4 pinMode(A4, OUTPUT);digitalWrite(A4, 1);
高电平有效 A5 pinMode(A5, OUTPUT);digitalWrite(A5, 1);
尾摆 高电平有效 A7 pinMode(A7, OUTPUT);digitalWrite(A7, 1);
底座摇摆 0-5V模拟信号,调速 D9 pinMode(D9, OUTPUT);analogWrite(D9, 0~255);
  1. 仿真小马、大象、鲨鱼、海豚、小霸王龙引脚定义
动作 备注 控制端口 控制函数
底座摇摆 0-5V模拟信号,调速 D5/D9 pinMode(D5, OUTPUT);analogWrite(D5, 0~255);
  1. 骑乘骆驼引脚定义
动作 备注 控制端口 控制函数
张嘴 高电平有效 A0 pinMode(A0,OUTPUT);digitalWrite(A0,1);
眨眼 高电平有效 A1 pinMode(A1,OUTPUT);digitalWrite(A1,1);
头左右 高电平有效 A2 pinMode(A2,OUTPUT);digitalWrite(A2,1);
尾摆 高电平有效 A3 pinMode(A3,OUTPUT);digitalWrite(A3,1);
底座摇摆 0-5V模拟信号,调速 D9 pinMode(9, OUTPUT);analogWrite(9, 0~255);
  1. 骑乘大象引脚定义
动作 备注 控制端口 控制函数
张嘴 高电平有效 A0 pinMode(A0,OUTPUT);digitalWrite(A0,1);
眨眼 高电平有效 A1 pinMode(A1,OUTPUT);digitalWrite(A1,1);
头左右 高电平有效 A2 pinMode(A2,OUTPUT);digitalWrite(A2,1);
颈上下 高电平有效 A3 pinMode(A3,OUTPUT);digitalWrite(A3,1);
身左右 高电平有效 A5 pinMode(A4,OUTPUT);digitalWrite(A4,1);
鼻子 高电平有效 D2 pinMode(D2,OUTPUT);digitalWrite(D2,1);
身上下 0-5V模拟信号,调速 D9 pinMode(D9, OUTPUT);analogWrite(D9, 0~255);

3. 硬件部署清单

控制器,对应外设,路由器,移动终端

4. 硬件拓扑图

电源调速器接线方式:

电源调速器0-5V ———— 主控板输出引脚
电源调速器右端0V ———— 主控板GND
电源调速器“电枢”位置 ———— 电机
电源调速器“电源”位置 ———— 外接电源

二、插件部分

1. 插件下载

下载并导入 WFramework

2. 插件导入

2.1 在 WFramework 中下载插件,插件名称为:VRAnimalControl
(当前版本为V1.1.1)

  • 解决Demo中调速和停止的Bug
  • 将设置IP场景修改为同时设置IP和MAC
  • 添加蓝牙使用的测试场景

2.2 插件导入后

1、设置External Tools

2、将VRAnimalControl文件夹中的Plugins,移动到Assert文件夹中

3、配置unity设置

  • 1.修改gradleTemplate.properties文件, 允许Unity引擎打包时添加AndroidX依赖。
    文件地址:unity安装路径下
    \Editor\Data\PlaybackEngines\AndroidPlayer\Tools\GradleTemplates\gradleTemplate.properties
    添加代码

    android.useAndroidX=true
    android.enableJetifier=true
  • 2.在Unity项目的mainTemplate.gradle配置文件中添加AndroidX依赖
    implementation 'androidx.appcompat:appcompat:1.3.0'
    implementation 'com.google.android.material:material:1.5.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
  • 3.PlayerSettings->Player->PublishingSettings->Build->CustomMainGradleTemplate 勾选

3. 插件初始化

void Init(string IP);

4. 插件连接

void Connect();

5. 产品功能介绍

5.1 乘骑霸王龙

用户可乘坐于霸王龙模型上,体验霸王龙摇头、摇尾巴、晃动身体以及模拟加速减速行走等功能。










5.2 行走戟龙

用户可乘坐于戟龙模型上前进,根据用户的不同指令,还能控制戟龙前进速度和戟龙点头、摇头等动作。

  • 声音









5.3 仿真马
  • 声音

  • 张嘴

  • 眨眼

  • 颈上下


  • 尾摆

  • 底座摇摆

5.4 仿真小马、大象、鲨鱼、海豚、小霸王龙
  • 底座摇摆

三、主动控制

1. Unity 插件调用方式

1.1 挂载两个脚本
  1. Main Camera物体下挂载VRAnimalSceneDemo.cs脚本,当硬件设备使用蓝牙连接时,IP应置为空;当硬件设备使用网络连接时,IP应置为控制器IP

  2. DeviceManager物体下挂载使用的硬件设备对应的脚本,即Devices文件夹中的脚本

1.2 VRAnimalDemo脚本中初始化

void Init(string IP);

  1. 非蓝牙设备,使用IP进行初始化:

  2. 蓝牙设备IP为空,进行初始化:

1.3 方法调用

设置相应的高低电平 (ELevel.HIGH、ELevel.LOW) 或设置速度值 (0 - 1)
(在设置速度时应缓慢增长,不要首次直接设置过高)

        /// <summary>
        /// 声音
        /// </summary>
        /// <param name="level">0为低电平,1为高电平</param>
        void Voice(ELevel value);

        /// <summary>
        /// 张嘴
        /// </summary>
        /// <param name="level">0为低电平,1为高电平</param>
        void Mouse(ELevel value);

        /// <summary>
        /// 眨眼
        /// </summary>
        /// <param name="level">0为低电平,1为高电平</param>
        void Blink(ELevel value);

        /// <summary>
        /// 头左右
        /// </summary>
        /// <param name="level">0为低电平,1为高电平</param>
        void Head(ELevel value);

        /// <summary>
        /// 颈上下
        /// </summary>
        /// <param name="level">0为低电平,1为高电平</param>
        void Neck(ELevel value);

        /// <summary>
        /// 前肢
        /// </summary>
        /// <param name="level">0为低电平,1为高电平</param>
        void Arm(ELevel value);

        /// <summary>
        /// 腿
        /// </summary>
        /// <param name="level">0为低电平,1为高电平</param>
        void Leg(ELevel value);

        /// <summary>
        /// 身左右
        /// </summary>
        /// <param name="level">0为低电平,1为高电平</param>
        void Body(ELevel value);

        /// <summary>
        /// 尾摆
        /// </summary>
        /// <param name="level">0为低电平,1为高电平</param>
        void Tail(ELevel value);

        /// <summary>
        /// 弃用:正反切(霸王龙)
        /// </summary>
        /// <param name="level">0正转,1反转</param>
        void Inverse(ELevel value);

        /// <summary>
        /// 左转
        /// </summary>
        /// <param name="level">0为低电平,1为高电平</param>
        void TurnLeft(ELevel value);

        /// <summary>
        /// 右转
        /// </summary>
        /// <param name="level">0为低电平,1为高电平</param>
        void TurnRight(ELevel value);

        /// <summary>
        /// 自控/模拟信号调速的变化值
        /// </summary>
        /// <param name="value">0 - 1</param>
        void SetGovernor(float value);

        /// <summary>
        /// 全部停止
        /// </summary>
        void StopAll();

        /// <summary>
        /// 允许发送,设为false暂停向控制器发送OSC,控制器几秒未接收到数据会停止驱动动物
        /// </summary>
        void AllowSend(bool allow);
  1. 非蓝牙设备直接调用相应的动作方法

  2. 蓝牙设备需要先连接蓝牙,当蓝牙连接成功后(connectionState的值为ConnectionState.isConnected),再调用相应的动作方法
    /// <summary>
    /// 返回当前连接状态
    /// </summary>
    EConnectionState ConnectionState { get; }
    /// <summary>
    /// 连接蓝牙
    /// </summary>
    void Connect();
    /// <summary>
    /// 连接状态改变时调用
    /// </summary>
    event Action<EConnectionState> _StateChange;

  3. 可调用的动作
    public enum EAction : int
    {
        /// <summary>
        /// 声音:保留位,当前无对应动作
        /// </summary>
        Voice = 0,
        /// <summary>
        /// 张嘴
        /// </summary>
        Mouse,
        /// <summary>
        /// 眨眼
        /// </summary>
        Blink,
        /// <summary>
        /// 头左右
        /// </summary>
        Head,
        /// <summary>
        /// 颈上下
        /// </summary>
        Neck,
        /// <summary>
        /// 前肢
        /// </summary>
        Arm = 5,
        /// <summary>
        /// 左转
        /// </summary>
        TurnLeft = 5,
        /// <summary>
        /// 腿
        /// </summary>
        Leg = 5,
        /// <summary>
        /// 身左右
        /// </summary>
        Body = 6,
        /// <summary>
        /// 右转
        /// </summary>
        TurnRight = 6,
        /// <summary>
        /// 尾摆
        /// </summary>
        Tail,
        /// <summary>
        /// 底座摇摆,自控
        /// </summary>
        BaseSwing = 8,
        /// <summary>
        /// 调速:保留位,当前无对应动作
        /// </summary>
        Governor,
    }

2. UE4 插件调用方式。

四、被动体验

1. 动作文件编辑。

动作编辑器使用文档

2. 内容播放。

  • 海洋航海:深海奇遇鲨鱼

留下评论

您的电子邮箱地址不会被公开。 必填项已用*标注