• KTRROTEXGS65聯軸器7.8 的簡單介紹

    本文目錄一覽:

    夢見打麻將贏錢是什么意思?

    那正是你的心里活動,證明你很想贏錢,這時候往往就不能去了,賭徒心態,就當這個夢是用來放松的,保持一天好心情,不也挺好的嘛

    什么時候組成的系統為彈簧政治?

    彈簧是一種非常有用且基本的工具,可以表達各種動力。 在游戲和物理模擬中,我廣泛地使用著它們。它們非常適合進行lerps 或 transitions (with under/overshoot).。 它們還是移動剛性體的理想工具-阻尼彈簧在數學上等效于PD控制。

    在過去的幾年中,我在Studio Gobo編寫的彈簧動力學代碼有了很大進步。 這篇文章記錄了這種進步,希望對其他人有用。

    彈簧實現

    基礎——簡單的彈簧實現

    這是一個由物理法則直接實現的彈簧系統

    class Spring

    {

    // 彈簧目標

    Vector3 m_targetPos;

    // 動力狀態

    Vector3 m_pos, m_vel;

    // 參數 - spring constant

    float m_kp;

    // 參數 - damping constant

    float m_kd;

    void Update( const float dt )

    {

    // compute spring and damping forces

    Vector3 Fspring = m_kp * (m_targetPos - m_pos);

    Vector3 Fdamp = m_kd * -m_vel;

    // integrate dynamics

    m_pos += m_vel * dt;

    m_vel += (Fspring + Fdamp) * dt;

    }

    };

    彈簧具有目標位置,然后將彈力計算為彈簧常數乘以相對于當前位置和目標位置的偏移量(代碼第16行)。我們不希望彈簧永遠(或根本不)擺動,因此我們通過施加與速度成比例的力來實現阻尼系統(代碼第17行)。 最后,在第20和21行更新動態狀態(pos和vel)

    在繼續學習有趣的東西之前,有一些注意事項需要先解決。 首先,代碼雖然是向量形式的,但和在浮點數上運行一樣容易(類可以在數據類型上進行模板化)。 目標位置是彈簧的輸入,可以根據需要在每幀中進行更新。 其次,建模時無需特別清晰明了。 改變速度時,雖然可以將力除以質量再加到速度上,但我覺得這樣做并不是很有用,而是依靠其他spring參數來獲得所需的效果。

    設置目標速度

    基本的彈簧代碼忽視了一個重要的條件–它假定目標速度為0。如果將彈簧連接到移動的目標,則該位置將始終滯后于目標,因為彈簧將會以0速度到達目標。 另一方面,如果您指定了目標速度和位置,則可以讓該點將緊密跟蹤目標。 我們可以添加更多代碼來實現此功能:

    請注意,我們在兩個力計算中是非常對稱的。 如果物體的位置和速度是已知的,就可以非常平滑地過渡。 如果參考系相對于世界移動,則也需要此參數。 如果彈簧在太空飛船內部,則目標速度應包括太空飛船的速度。

    改進參數–用振動頻率代替彈簧常數

    而彈簧常數m_kp可以根據物理上有意義的參數來表示:無阻尼角頻率(Undamped Angular Frequency,UAF)。 該值具有很重要的含義-它是彈簧振動的頻率(每秒的跳動次數)。 這是任何人都可以理解的值,并且比任何常量更好。 它的用法如下:

    改進參數–標準化阻尼參數

    現在我們將注意力轉向第二個參數-阻尼常數m_kd。 每次彈簧強度/頻率UAF發生變化時,都需要重新平衡阻尼項以維持所需的下沖/過沖(undershoot/overshoot),這對于可用性/工作流程是個壞消息。 幸運的是,可以通過將參數更改為阻尼比(Damping Ratio,DR)輕松解決此問題。 它具有很好的特性——如果值1將會讓underdamped的彈簧overshoot,而值 1則會讓overdamped的將緩慢到達目標,而臨界阻尼值恰好為1,目標將在此處達到極限。 盡可能快地達到目標而不會超過。

    現在,設計人員/藝術家/程序員只需確定他們希望彈簧運動有多少overshoot/undershoot,并且可以設置此值。

    提高穩定性–集成方案

    上面我們已經看到了如何計算彈簧力和阻尼力。 這些力越大,誤差將越大。 這往往會使彈簧軌跡的峰值過沖,從而為系統增加能量。 如果彈簧力或阻尼力足夠大,則可以完全阻止彈簧收斂并導致模擬爆炸。 減少此錯誤的一種方法是減少時間步長,從而以更多的計算為代價提供更高的準確性,我們將在下一部分中對此進行探討。 減少錯誤的另一種方法是更改集成方案,我們在本節中比較一些不同的方案。

    Euler method

    到目前為止,更新代碼已實現了Euler方法。 它僅使用當前狀態將狀態及時向前移動,稱為顯式更新。 它很容易實現,但與分析軌跡(淺灰色)相比,往往會嚴重地超出可見范圍:

    在上述情況下,阻尼比很低,能量隱藏在系統中,并且于仿真有所不同。 稍微提高阻尼比可以解決這個問題,但是如果我們將阻尼比設置得足夠高,則會遇到更嚴重的問題-尖峰振蕩,導致系統爆炸:

    半隱式歐拉

    一個簡單的改進是切換pos和vel的更新順序:

    m_vel += (Fspring + Fdamp) * dt;

    m_pos += m_vel * dt;

    正如維基百科上記錄的那樣,該方案非常好,我們在低阻尼值下的問題消失了(橙色):

    不幸的是,該方案在阻尼時仍然容易產生劇烈的振蕩:

    隱式更新

    如上所述,阻尼彈簧與PD控制密切相關,這與論文上的結果一樣。 Tan et al引入了穩定的PD控制,對于stiff動力學或較大的時間步長是穩定的[1]。 這個想法是根據下一時間步的狀態而不是當前狀態來計算力,當前狀態是使用一階泰勒級數預測的。 解決了加速問題后,可以歸結為中等數量的附加代碼:

    對于低阻尼值,我們可以節約一點,而解決方案(綠色)似乎更符合地面實況(灰色)的頻率:

    而且,在過阻尼的情況下,我們也會表現出良好的行為:

    這些集成方案已實現到隨附的電子表格中。 它們也在此處的交互式ShaderToy中運行[2]。

    提高頑健性–固定或修復時間步

    上面的隱式更新阻止了動態爆炸。 但是,它不能保證彈簧的性能得到保留。 可以看到,在模擬的(綠色)和參考方案(灰色)之間存在明顯的增量:

    這種行為將取決于幀速率,這可能會造成意想不到的后果。 我見過同事在一般的PC或筆記本電腦上運行未經優化的構建,并以中低幀頻調整游戲,卻發現在目標幀率下的感覺完全不同。 幀速率依賴性的典型癥狀是,在低幀速率下動態感覺松散和游動。 為了在低幀率和高幀率下都能保持一致,我們可以使彈簧以恒定的固定dt運行。 實際上,以小于最大允許時間步長的dt運行就足夠了。

    請注意,如果彈簧在物理更新中運行,則可能已經在使用固定的dts。 如果在這種情況下彈簧動力學存在問題,則可以以更高的頻率(例如120Hz)運行彈簧動力學。

    本節將介紹分步代碼,以控制dt /仿真頻率。

    1.強制每個子步驟最大dt,允許混合dts

    這將確保更新dt小于或等于規定的最大值。 它將以最大dt的步長前進,然后在最后一步中處理所有余數。

    maxUpdates是可選的安全防護。 我在下面的注釋部分中對此進行了一些考慮。

    2.在每個子步驟中強制執行最大dt,保持統一的dts

    該變量旨在計算小于最大值的統一更新dt。 使用此計算的更新dt模擬每個步驟。

    3.強制執行固定dt

    這可能是這里概述的三個選項中最強大的,因為dt始終是固定的,并且更新邏輯將是確定性的和一致的(忽略影響浮點確定性的外部因素)。 但是,它也是最復雜的實現

    德國rotex90聯軸器

    Roten 是德國聯軸器巨頭 KTR 旗下的一個品牌,所以登錄KTR 主頁就可以找到具體信息了。

    如果你只是用到這個零件,而不是要仿造這款聯軸器,那對你有用的信息就是聯軸器和外部連接的標準了:孔是用ISO 268 的 H7 ,槽鍵是 DIN 6885。

    KTR聯軸器生產高品質傳動部件和制動器

    服務熱線

    13166059228

    13166059228

    微信客服

    微信客服

  • 妈妈的朋友电影