博客專欄

        EEPW首頁 > 博客 > Chai3D之觸覺設(shè)備

        Chai3D之觸覺設(shè)備

        發(fā)布人:xyni2023 時(shí)間:2023-02-28 來源:工程師 發(fā)布文章
        Chai3D之觸覺設(shè)備


        推薦:將 NSDT場(chǎng)景編輯器 加入你的3D開發(fā)工具鏈

        介紹

        ??觸覺設(shè)備是一種雙向儀表/致動(dòng)的人機(jī)界面,由人類操作員用于與計(jì)算機(jī)模擬虛擬環(huán)境進(jìn)行主動(dòng)交互。觸覺設(shè)備可以是鼠標(biāo)、方向盤、指墊、機(jī)器人手柄、抓手、操縱桿、手套、磁懸浮手腕,甚至是移動(dòng)整個(gè)用戶身體的運(yùn)動(dòng)平臺(tái)的形式。它可用于模擬具有質(zhì)量、阻尼、摩擦和剛度屬性的環(huán)境,也可以模擬虛擬工具與其周圍虛擬環(huán)境交互的機(jī)械行為。

        ??CHAI3D 提供了一個(gè)名為 cGenericHapticDevice 的基類,它實(shí)現(xiàn)了一組與最常見的 3D 觸覺設(shè)備進(jìn)行通信的方法。觸覺設(shè)備的末端執(zhí)行器或手柄的位置可以通過使用getPosition(),getRotation(),getGripperAngleDeg()等方法讀取。可選的用戶開關(guān)或按鈕可以通過調(diào)用getUserSwitch()來讀取。

        ??力和扭矩可以通過調(diào)用諸如setForce(),setForceAndTorque()和setForceAndTorqueAndGripperForce()等方法發(fā)送到觸覺設(shè)備。

        ??對(duì)于每種型號(hào)的觸覺設(shè)備(例如delta.x,omega.x獵鷹,幻影等)CHAI3D 實(shí)現(xiàn)了一個(gè)特定的類(例如 cDeltaDevice、cPhantomDevice),該類繼承自 cGenericHapticDevice,并通過從支持該設(shè)備的 API 調(diào)用特定命令來實(shí)現(xiàn)每個(gè)命令。

        一般規(guī)定

        ??所有數(shù)量均以IUS(公制)單位表示。參考設(shè)備坐標(biāo)系指定 x 軸指向操作員,y 軸指向操作員的右側(cè),z 軸指向上方。最后,原點(diǎn)始終位于設(shè)備物理工作區(qū)的中心。

        ??如果觸覺設(shè)備帶有手腕或手寫筆,則其手柄的方向使用旋轉(zhuǎn)矩陣表示。下圖說明了三自由度、六自由度和七自由度設(shè)備的約定。

        三自由度、六自由度和七自由度觸覺設(shè)備的參考框架。

        ??示例 02-multi-devices 是一個(gè)簡(jiǎn)單的應(yīng)用程序,它顯示連接到計(jì)算機(jī)的每個(gè)觸覺設(shè)備的參考幀。參考框架使用顏色而不是標(biāo)簽來命名不同的軸(分別為 x、y 和 z)。顏色約定為:紅色表示 x 軸,綠色表示 y 軸,藍(lán)色表示 z 軸。

        CHAI3D 示例 02-多設(shè)備:參考幀和光標(biāo)。觸覺設(shè)備處理程序

        ??觸覺設(shè)備處理程序 (cHapticDeviceHandler) 是一個(gè)類,用于搜索并列出連接到計(jì)算機(jī)的所有觸覺設(shè)備。

        ??在下面的列表中,我們說明了一個(gè)簡(jiǎn)單的示例,該示例對(duì)觸覺設(shè)備施加力,使其末端執(zhí)行器朝向其工作空間的中心點(diǎn):

        using namespace chai3d;
        // create haptic device handler
        cHapticDeviceHandler* handler;
        handler = new cHapticDeviceHandler();
        // get handle to first available haptic device on the list
        cGenericHapticDevice* hapticDevice;
        handler->getDevice(hapticDevice, 0);
        // open connection to haptic device
        hapticDevice->open();
        // initialize simulation
        bool simulationRunning = true;
        double Kp = 25;
        cVector3d position(0,0,0);
        // haptics loop
        while (simulationRunning)
        {
        // read position from haptic device
        hapticDevice->getPosition(position);

            // compute force
            cVector3d force = -Kp * position;
            // send force to haptic device
            hapticDevice->setForce(force);

        }
        // close connection to haptic device
        hapticDevice->close();

        如何定制觸覺設(shè)備

        ??cMyCustomDevice 提供了一個(gè)基本模板,可讓您非常輕松地將 CHAI3D 連接到您自己的自定義觸覺設(shè)備。只需按照文件 CMyCustomDevice 中的 12 個(gè)注釋步驟操作.cpp并相應(yīng)地完成代碼。根據(jù)設(shè)備上的自由度數(shù),可能需要實(shí)現(xiàn)并非所有方法。例如,如果您的設(shè)備不提供任何旋轉(zhuǎn)自由度,只需忽略 getRotation() 方法即可。如果未在設(shè)備上實(shí)現(xiàn)默認(rèn)值,則將正確返回默認(rèn)值。例如,在旋轉(zhuǎn)的情況下,返回單位矩陣。

        ??您還可以重命名此類,在這種情況下,您還需要自定義觸覺處理程序以自動(dòng)檢測(cè)您的設(shè)備。請(qǐng)查閱 cHapticDeviceHandler 類的方法 update(),該類位于文件 CHapticDeviceHandler.cpp 中。只需查看觸覺設(shè)備處理程序如何查找 cMyCustomDevice 類型的設(shè)備。

        ??如果您在實(shí)現(xiàn)時(shí)遇到任何問題,請(qǐng)檢查實(shí)例文件 CDeltaDevices.cpp該文件實(shí)現(xiàn)了對(duì)力維度和 Novint 觸覺設(shè)備的支持。為了驗(yàn)證實(shí)現(xiàn),請(qǐng)使用01-mydevice示例開始。示例 11-effects 是一個(gè)很好的演示,用于驗(yàn)證基本觸覺效果在觸覺設(shè)備上的行為方式。如果您確實(shí)遇到振動(dòng)或不穩(wěn)定性,請(qǐng)嘗試降低設(shè)備支持的最大剛度(請(qǐng)參閱文件 CMyCustomDevice.cpp 中的 STEP1)。

        ??確保您的設(shè)備與計(jì)算機(jī)的通信速度也足夠快。理想情況下,通信周期應(yīng)小于1ms,以達(dá)到至少1000Hz的所需更新速率。例如,使用慢速串行端口 (RS232) 時(shí)通常會(huì)出現(xiàn)問題。

        3D建模學(xué)習(xí)工作室翻譯整理,轉(zhuǎn)載請(qǐng)標(biāo)明出處!

        Sign up for more like this.


        *博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。



        關(guān)鍵詞: 編輯器 數(shù)字孿生

        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 天等县| 长岭县| 灵台县| 建瓯市| 襄城县| 车致| 湄潭县| 延庆县| 吉安县| 临洮县| 霍林郭勒市| 台北县| 新营市| 台中市| 庆阳市| 贺州市| 屏南县| 红安县| 开化县| 锡林浩特市| 南乐县| 平潭县| 太谷县| 渭源县| 定陶县| 包头市| 延长县| 阜宁县| 泸水县| 桐城市| 射洪县| 晋城| 新野县| 花莲县| 柳林县| 成武县| 京山县| 长沙市| 淮滨县| 安乡县| 钟山县|