Chai3D之觸覺(jué)設備

推薦:將 NSDT場(chǎng)景編輯器 加入你的3D開(kāi)發(fā)工具鏈
介紹??觸覺(jué)設備是一種雙向儀表/致動(dòng)的人機界面,由人類(lèi)操作員用于與計算機模擬虛擬環(huán)境進(jìn)行主動(dòng)交互。觸覺(jué)設備可以是鼠標、方向盤(pán)、指墊、機器人手柄、抓手、操縱桿、手套、磁懸浮手腕,甚至是移動(dòng)整個(gè)用戶(hù)身體的運動(dòng)平臺的形式。它可用于模擬具有質(zhì)量、阻尼、摩擦和剛度屬性的環(huán)境,也可以模擬虛擬工具與其周?chē)摂M環(huán)境交互的機械行為。
??CHAI3D 提供了一個(gè)名為 cGenericHapticDevice 的基類(lèi),它實(shí)現了一組與最常見(jiàn)的 3D 觸覺(jué)設備進(jìn)行通信的方法。觸覺(jué)設備的末端執行器或手柄的位置可以通過(guò)使用getPosition(),getRotation(),getGripperAngleDeg()等方法讀取??蛇x的用戶(hù)開(kāi)關(guān)或按鈕可以通過(guò)調用getUserSwitch()來(lái)讀取。
??力和扭矩可以通過(guò)調用諸如setForce(),setForceAndTorque()和setForceAndTorqueAndGripperForce()等方法發(fā)送到觸覺(jué)設備。
??對于每種型號的觸覺(jué)設備(例如delta.x,omega.x獵鷹,幻影等)CHAI3D 實(shí)現了一個(gè)特定的類(lèi)(例如 cDeltaDevice、cPhantomDevice),該類(lèi)繼承自 cGenericHapticDevice,并通過(guò)從支持該設備的 API 調用特定命令來(lái)實(shí)現每個(gè)命令。
一般規定??所有數量均以IUS(公制)單位表示。參考設備坐標系指定 x 軸指向操作員,y 軸指向操作員的右側,z 軸指向上方。最后,原點(diǎn)始終位于設備物理工作區的中心。
??如果觸覺(jué)設備帶有手腕或手寫(xiě)筆,則其手柄的方向使用旋轉矩陣表示。下圖說(shuō)明了三自由度、六自由度和七自由度設備的約定。

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

??觸覺(jué)設備處理程序 (cHapticDeviceHandler) 是一個(gè)類(lèi),用于搜索并列出連接到計算機的所有觸覺(jué)設備。
??在下面的列表中,我們說(shuō)明了一個(gè)簡(jiǎn)單的示例,該示例對觸覺(jué)設備施加力,使其末端執行器朝向其工作空間的中心點(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();
??cMyCustomDevice 提供了一個(gè)基本模板,可讓您非常輕松地將 CHAI3D 連接到您自己的自定義觸覺(jué)設備。只需按照文件 CMyCustomDevice 中的 12 個(gè)注釋步驟操作.cpp并相應地完成代碼。根據設備上的自由度數,可能需要實(shí)現并非所有方法。例如,如果您的設備不提供任何旋轉自由度,只需忽略 getRotation() 方法即可。如果未在設備上實(shí)現默認值,則將正確返回默認值。例如,在旋轉的情況下,返回單位矩陣。
??您還可以重命名此類(lèi),在這種情況下,您還需要自定義觸覺(jué)處理程序以自動(dòng)檢測您的設備。請查閱 cHapticDeviceHandler 類(lèi)的方法 update(),該類(lèi)位于文件 CHapticDeviceHandler.cpp 中。只需查看觸覺(jué)設備處理程序如何查找 cMyCustomDevice 類(lèi)型的設備。
??如果您在實(shí)現時(shí)遇到任何問(wèn)題,請檢查實(shí)例文件 CDeltaDevices.cpp該文件實(shí)現了對力維度和 Novint 觸覺(jué)設備的支持。為了驗證實(shí)現,請使用01-mydevice示例開(kāi)始。示例 11-effects 是一個(gè)很好的演示,用于驗證基本觸覺(jué)效果在觸覺(jué)設備上的行為方式。如果您確實(shí)遇到振動(dòng)或不穩定性,請嘗試降低設備支持的最大剛度(請參閱文件 CMyCustomDevice.cpp 中的 STEP1)。
??確保您的設備與計算機的通信速度也足夠快。理想情況下,通信周期應小于1ms,以達到至少1000Hz的所需更新速率。例如,使用慢速串行端口 (RS232) 時(shí)通常會(huì )出現問(wèn)題。
3D建模學(xué)習工作室翻譯整理,轉載請標明出處!
*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。