三维姿态显示上位机 C#+WPF+HID+Unity3D技术

三维姿态显示上位机 C#+WPF+HID+Unity3D技术

在毕业设计中做了一个基于AHRS的设计,涉及了姿态融合算法,为了调试算法参数性能,需要用到姿态显示上位机用来显示验证算法的效果。在收集了很多资料后,决定自己做一个三维姿态显示上位机。由于本人学识浅薄,程序中可能有很多目前没有发现的BUG,如有纰漏,敬请指正。

下面介绍一下我开发的大致方法:
1、HID数据传输,在开发的过程中,采用无线传输的方式将单片机的数据传输到电脑的USB端,再采用HID协议将USB端点的数据上传到电脑。
2、在电脑上位机中检测上传到电脑的数据,当检测到数据后,通过TCP协议与Unity3D通讯,Unity3D作为服务器,根据通信内容执行相关操作。
3、上位机UI采用开源的PanuonUI进行开发。

该上位机的优劣:
优点:开发简单,不用使用OpenGL开发,仅使用C#语言就可以完成开发;界面美观,贴图和背景相比OpenGL开发效果好很多;运行中Unity3D使用了GPU渲染,相比软渲染流畅度更好。
缺点:Unity3D的EXE文件较大,比采用C++开发的上位机体量大很多;可以作为学习和实验使用,距离商用还有很大差距。

由于整个上位机的开发过程叙述起来比较麻烦,这里直接放出源码供需要的人下载使用。

源码下载

关键代码:

HID对接收数据进行转换:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Collections.ObjectModel;
using System.Windows.Interop;
using System.Windows.Threading;
using HID;
using System.Runtime.InteropServices;
using Panuon.UI.Silver;

namespace CubeAttitudeShow
{
   
   
    public partial class MainWindow : WindowX
    {
   
   
        #region HID_协议定义与实现
        /*定义HID数传的内容*/
        public Hid myHid = new Hid();
        public IntPtr myHidPtr = new IntPtr();
        string IMUKeyNum;
        int temp;
        public bool BiaoDingFlag = false;
        public bool BiaoDingFlag2 = false;

        double MagX,MagY,MagZ;

        string SmagX, SmagY, SmagZ;

        public string Dis1;

        public string Dis2;

        public string Yaw;

        public string Pitch;

        public string Roll;

        /***************************************************************************/
        /// <summary>
        ///  数据到达事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void myhid_DataReceived(object sender, report e)
        {
   
   
            if (lianjieflag)
            {
   
   
                RecDataBuffer = e.reportBuff;

                for (int a = 0; a < 6; a++)
                    TransformData[a] = RecDataBuffer[a + 5];
                WpfServer.SendMessage(TransformData);
                /*把数据显示到列表框*/
                IMUKeyNum = RecDataBuffer[0].ToString();//按键信息

                temp = 0;
                if (RecDataBuffer[1] >= 0x80) //判定是否是负数
                    temp = 0 - ((RecDataBuffer[1] & 0x7f) * 256 + RecDataBuffer[2]);
                else
                    temp = (RecDataBuffer[1]) * 256 + RecDataBuffer[2];
                Dis1 = temp.ToString();//基站 1 距离 

                temp = 0;
                if (RecDataBuffer[3] >= 0x80) //判定是否是负数
                    temp = 0 - ((RecDataBuffer[3] & 0x7f) * 256 + RecDataBuffer[4
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值