主要内容

平面操纵使用空间鼠标MATLAB对象

这个例子展示了如何通过MATLAB®接口使用太空鼠标。

开始此示例后,在Simulink®3D动画™查看器中显示一个带有飞机的虚拟场景。金宝app你可以使用太空鼠标在场景中导航飞机。通过按设备按钮1,您可以在当前平面位置放置一个标记。

这个例子需要一个太空鼠标或其他兼容的设备。

创建并初始化空间鼠标对象

本例中设备ID设置为USB1。如果您的设备使用不同的连接,请相应地设置ID。空格鼠标ID的有效值为:

COM1、COM2、COM3、COM4、USB1、USB2、USB3或USB4。

注意:如果空间鼠标未连接,则打印警告信息。

ID =“USB1”;鼠标= [];试一试%尝试创建空间鼠标对象鼠标= vrspacemouse(ID);我流(无法初始化端口%s上的空间鼠标。\n、身份证);结束
无法初始化USB1端口上的空间鼠标。

加载和查看虚拟世界

创建并打开vrworld对象W = vrworld(“vrtkoff_hud.x3d”“新”);开放(w);%创建显示虚拟场景的vrfigure使用适合用户导航的视点图= vrfigure(w,“观点”“乘坐飞机”);%获得被操纵的飞机节点Airpln = vrnode(w,“平面”);%读取平面初始平移和旋转originalTranslation = airplan .translation;originalRotation = airplan .rotation;%设置HUD显示文本偏移量= vrnode(w,“HUDOffset”);偏移量。翻译=偏移。翻译+ [-0.15 1.9 0];Hudtext = vrnode(w,“HUDText1”);Hudstr = {“按“1”键放下记号”...“按“2”键重置平面位置”...“按“1”和“2”键退出”};hudtext。String = hudstr;vrdrawnow;

为轨迹标记添加一个EXTERNPROTO

从包含各种标记形状的VRML文件中加载一个四面体形状PROTO。

%使用标记PROTOs获取wrl文件的路径病理标记=哪些(“vr_markers.x3d”);%使用四面体形状MarkerName =“Marker_Tetrahedron”创建一个带有指定标记的EXTERNPROTO试一试addexdexnproto (w, pathtomarkers, MarkerName);%如果已包含所需的PROTO,则不抛出异常如果~ strcmpi (ME.identifier“sl3d:接口:protoexists”) throwAsCaller(我);结束结束

场景导航

交互式导航可以通过同时按下空间鼠标按钮1和2或关闭Simulink 3D动画查看器图形来完成。金宝app

如果~ isempty(鼠标)%迭代器,确保所创建标记的DEF名称是唯一的Iterforname = 0;设置翻译的鼠标灵敏度%较高的值对应较高的灵敏度鼠标。位置敏感度= 1e-2;%设置鼠标旋转的灵敏度%较高的值对应较高的灵敏度鼠标。旋转灵敏度= 1e-5;%读取空间鼠标值并循环更新场景对象%重复,除非按钮“1”和“2”同时按下或图形关闭any(button(MOUSE,[1 2]) == 0) &&是有效的(图)暂停(0.01);%使用vrspacemouse/viewpoint方法获取当前的平移和旋转V =视点(鼠标);%设置飞机节点的新转换airpln。翻译= originalTranslation + [-1 1 -1].*V(1:3);%设置新的旋转到飞行器节点airpln。旋转= [-1 1 -1 1].*V(4:7);如果按钮(鼠标,1)== 1如果按下鼠标按钮“1”,则创建一个新的标记newMarker = vrnode(w, sprintf(“% s_ % d '“标记”, iterforname), MarkerName);%设置标记翻译纽马克。marktranslation = originalTranslation + [-1 1 -1].*V(1:3);%递增迭代器Iterforname = Iterforname + 1;结束如果按钮(鼠标,2)== 1%如果鼠标按键“2”按下重置平面位置并旋转airpln。翻译= originalTranslation;airpln。rotation = originalRotation;鼠标。InitialPosition = [0 0 0];鼠标。InitialRotation = [0 0 0];结束%重绘虚拟场景vrdrawnow;结束结束

清理

%关闭vrfigure关闭(图);%关闭虚拟世界关闭(w);%清除所有使用的变量清晰的ID鼠标w无花果airplnoriginalTranslationoriginalRotation抵消hudtexthudstr...pathtomarkersMarkerNameiterfornameV纽马克img_captureimg%显示示例消息的结束