MotionViewer是一个针对NDI Spectra双目定位系统、Kinect深度相机及HoloLens混合现实眼镜的数据可视化程序,用于基于混合现实的医疗手术辅助系统。
- Qt 用于GUI设计
- OpenGL 用于场景3D显示
- Assimp 用于加载3D模型
- OpenCV 用于Kinect视觉图像 (暂未使用)
- Eigen 矩阵运算库(暂未使用)
- Boost C++准标准库(暂未使用)
- NDI Spectra
- HoloLens 1
- Kinect v2
-
采集NDI的Marker点数据并做相应处理;
-
将坐标数据发送给HoloLens;
-
配准设置与结果可视化;
-
可视化HoloLens视频流与扫描设备(Kinect)视频流*;
注:*为扩展功能,暂时不实现,预留接口
功能需求:
- 串口或网口(预留)通信,同步收发指令(一问一答);
- 解码,根据NDI通信规则解码出各个marker的坐标(x,y,z)(Marker点大概在20个以内);
- 显示所有Marker点坐标
- 通过下拉菜单选择需要计算方法,并点击按钮计算,将结果显示。显示标定件位姿(3-4个标定件)
- 显示各标定件位置关系图(预留)
设计思路:
- 自定义NdiComm类,负责实现NDI的通信功能,隐藏通信实现细节
- 利用QTcpSocket与QTcpServer类实现TCP通信
- 利用QSerialPort类实现串口通信
- 自定义NdiViewer类,用来存储NDI数据并进行相应处理
- 利用QVector3D类存储每个Marker点坐标
- 利用**QList<QVector3D>**管理所有Marker点坐标
- 定义获取当前标定件位置,获取投影后位置,更新矫正矩阵三个函数
功能需求:
- 利用TCP或UDP将NDI得到的坐标信息发送给HoloLens;
- 可以作为服务器或者客户端;
- 对于服务器,可以设置服务器IP,服务器端口号等相关信息;
- 对于客户端,可以设置目标IP,目标端口号等相关信息;
- 可以发送追踪机械的位姿信息;
设计思路:
- 自定义HoloComm类,负责实现NDI的通信功能,隐藏通信实现细节
- 利用QTcpSocket与QTcpServer类实现TCP通信
- 利用QUdpSocket类实现UDP通信
功能需求:
- 可视化HoloLens视频流
- 可视化扫描设备(Kinect)视频流
功能需求:
- 显示术前模型与术中采集模型
- 显示术前模型与术中采集模型的配准结果,并显示获得的旋转矩阵
- MainWindow类 (mainwindow.h, mainwindow.cpp, mainwindow.ui)主界面框架
- NdiComm类
- NdiViewer类
- HoloComm类
- HoloViewer类
- RegiViewer类
- GLViewer类
- AboutDlg类(aboutdlg.h, aboutdlg.cpp, aboutdlg.ui)About对话框显示
- Backdrop类
- NdiTool类
- Model类
- Mesh类