這篇文章主要為大家展示了“用Python解釋SpaceX怎么進(jìn)行火箭回收”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“用Python解釋SpaceX怎么進(jìn)行火箭回收”這篇文章吧。
創(chuàng)新互聯(lián)公司是一家專業(yè)提供開原企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站設(shè)計(jì)制作、做網(wǎng)站、成都h5網(wǎng)站建設(shè)、小程序制作等業(yè)務(wù)。10年已為開原眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)絡(luò)公司優(yōu)惠進(jìn)行中。
為了進(jìn)一步了解非線性控制,我一直在嘗試一種非常有效的方法,稱為軌跡優(yōu)化。設(shè)置完基本代碼后,就可以很容易地將其應(yīng)用于各種系統(tǒng)。
在看完Starship SN15發(fā)射后,我決定進(jìn)行一些動(dòng)力學(xué)估算,以檢驗(yàn)我的2D模擬玩具是否能執(zhí)行翻轉(zhuǎn)并自行著陸。令我興奮的是,經(jīng)過一番細(xì)心的研究,它運(yùn)行得很好。但是真正令我驚訝的是當(dāng)我與實(shí)際的著陸畫面并排播放輸出時(shí):它的軌跡非常完美。而且編寫整個(gè)程序和優(yōu)化時(shí)我并沒有參考視頻或其他明確的計(jì)時(shí)信息。
對(duì)我而言有兩種可能:1、我非常幸運(yùn),2、SpaceX在其實(shí)際系統(tǒng)上運(yùn)行了非常相似的優(yōu)化。這是一個(gè)非常有趣的東西,希望能為進(jìn)入火箭回收后面的魔法打開一扇窗戶。在開始編寫代碼之前,可能最好先解釋一下軌跡優(yōu)化的理論(但如果您愿意,也可以直接跳轉(zhuǎn)至代碼)。
在這種情況下,“最佳”表示通常的含義:“好”,“最佳”,“理想”等。舉一個(gè)簡(jiǎn)單的例子,假設(shè)您想走過整個(gè)房間到達(dá)冰箱:您可以選擇看似無(wú)數(shù)的路線,但是以某種方式只能選擇其中一條路線。
兩條軌跡的例子
應(yīng)該很容易看到有好路線和差路線,但是實(shí)際上定義好軌跡還是差軌跡的是什么呢?這就是“成本”概念進(jìn)入的地方。如果您有機(jī)器學(xué)習(xí)的經(jīng)驗(yàn),那么這基本上是相同的概念。您運(yùn)行優(yōu)化以最小化成本函數(shù)。在我們的冰箱示例中,成本函數(shù)是什么?一個(gè)簡(jiǎn)單的方法就是走我們的路?,F(xiàn)在可以要求計(jì)算機(jī)在您和冰箱之間找到一條長(zhǎng)度最短的路徑。
選擇成本函數(shù)
這可行,但有一些細(xì)微的缺陷。想象一下,您和冰箱之間有一個(gè)死亡陷阱。我們的“查找最小長(zhǎng)度”算法將使您正確地進(jìn)行操作,我認(rèn)為您可能會(huì)認(rèn)為這并不是真正的最佳選擇。
可能更好的成本函數(shù)(以及我在Starship著陸代碼中主要使用的函數(shù))基于“努力”。假設(shè)您在地板上向前邁出一步需要您付出1點(diǎn)努力,而經(jīng)過死亡之坑™則需要您花費(fèi)1000點(diǎn)努力。這更好地匹配了我們認(rèn)為是最佳與非最佳的條件:
很少有優(yōu)化問題可以在沒有很多約束的情況下完成,這是一些“邏輯”問題,可以解決我們的冰箱問題。
這是軌跡優(yōu)化的核心。通過最小化某些成本函數(shù)并保持一組約束來(lái)優(yōu)化點(diǎn)之間的軌跡。這里有一些很好的資源,它們?cè)跀?shù)學(xué)方面會(huì)更深入:
https://www.youtube.com/watch?v=wlkRYMVUZTs
為火箭著陸進(jìn)行編碼!
現(xiàn)在到有趣的東西上。有一些很棒的庫(kù)可以遍歷方程式并進(jìn)行優(yōu)化工作,因此真正的“藝術(shù)”在于向解釋器提出正確的問題。下面是一個(gè)指向collab notebook的鏈接,可讓您在瀏覽器中運(yùn)行全部代碼:
https://colab.research.google.com/drive/18MVtu4reVJLBE1RXByQEmu0O9aLXlMHz?usp=sharing
時(shí)間被切成0.04s的塊,并在每個(gè)步驟中生成了火箭狀態(tài)和控制狀態(tài)的變量。這導(dǎo)致沿路徑產(chǎn)生一堆離散點(diǎn),這些點(diǎn)比較容易處理,然后嘗試為整個(gè)對(duì)象提出封閉形式的解決方案。
由三個(gè)點(diǎn)和沿著該軌跡的狀態(tài)組成的軌跡的示例
火箭狀態(tài)向量:x[n] = [x, x_dot, y, y_dot, theta, theta_dot]
控制狀態(tài)向量:u[n] = [thrust_mag, thrust_angle]
生成步驟和優(yōu)化變量
之所以選擇0.04s是因?yàn)樗梢砸悦棵?5幀的速度進(jìn)行1:1播放。是的,實(shí)際上我確實(shí)更改了仿真時(shí)間步長(zhǎng),因?yàn)?5 fps看起來(lái)不錯(cuò)。
為了找到時(shí)間步長(zhǎng),我手動(dòng)增加了時(shí)間步長(zhǎng),直到找到可行的解決方案為止。有多種方法可以讓求解器自行發(fā)現(xiàn)最短的時(shí)間軌跡(主要是:讓它確定點(diǎn)之間的時(shí)間步長(zhǎng))。
設(shè)置成本函數(shù)
所有成本都是平方和-> cost [0]²+ cost [1]²+ cost [2]²…依此類推。
最小化推力輸出——理想情況下,您希望在著陸時(shí)使用少量燃油。
最小化TVC的萬(wàn)向節(jié)角度——移動(dòng)噴嘴很費(fèi)力,理想情況下,您希望它名義上指向下方。
最小化角速度——似乎有點(diǎn)荒唐,但我有一種直覺,即角速度/加速度會(huì)在發(fā)動(dòng)機(jī)上施加最大的應(yīng)變,因此您希望將其保持在盡可能低的水平。
初始條件是在空氣中以90m / s的速度向下旋轉(zhuǎn)90度然后開始向下飛行1000m。
初始條件和最終條件約束
起始高度和速度來(lái)自飛行俱樂部的SN9數(shù)據(jù):https://flightclub.io/result/2d?code = SN91
每個(gè)狀態(tài)時(shí)間步都必須服從:x [n + 1] -x [n] = f(x [n],u [n])* dt
本質(zhì)上,這是“不要破壞物理”的約束。它等效于火箭的離散時(shí)間模擬,下一個(gè)狀態(tài)等于當(dāng)前狀態(tài)+導(dǎo)數(shù)* dt。(注意:我在代碼中使用x_dot()而不是f(),因?yàn)槲艺J(rèn)為它更易于閱讀)。
為狀態(tài)向量中的所有元素設(shè)置動(dòng)力學(xué)約束
飛行常數(shù)和動(dòng)力學(xué)功能:
g = 9.8
m = 100000公斤(猜測(cè)濕重和干重之間的一個(gè)很好的舍入數(shù)。實(shí)際上,當(dāng)您使用燃料時(shí),這種情況會(huì)發(fā)生變化,但出于準(zhǔn)確性考慮,我只是為了簡(jiǎn)單起見)
長(zhǎng)度= 50米
I =(1/12)* m *長(zhǎng)度²(均勻桿的慣性)
定義f(x,u)= x_dot
(注意:這是一個(gè)相當(dāng)差的離散化,并且存在更好的方法,例如并置。但是,這是寫出來(lái)的最簡(jiǎn)單,最快的方法)
推力不能超過一個(gè)猛禽戰(zhàn)機(jī)的最大值,油門不能低于40%,推力矢量控制在每個(gè)方向上的擺角都不能超過20度 Raptor max取自維基百科,+-20度完全是個(gè)猜測(cè),我很想知道是否有更可靠的數(shù)據(jù)用于此。
設(shè)置u的有界約束
剩下要做的就是運(yùn)行它!
選擇求解器并運(yùn)行!
基本上就是這樣,您調(diào)用opti.solve(),然后將其轉(zhuǎn)換為Ipopt(開放源代碼優(yōu)化求解器)可以理解的問題。希望此消息應(yīng)該到達(dá)大量迭代打印的底部:
這就是我們想要看到的
狀態(tài)和控制陣列圖
下一部分代碼使用matplotlib制作了漂亮的動(dòng)畫,需要花一點(diǎn)時(shí)間來(lái)生成所有幀,但結(jié)果還是很不錯(cuò)的。
雖然接近完美的軌道可能主要是讓我對(duì)事物的估計(jì)感到幸運(yùn),但仍有一些有趣的東西可以借鑒,主要是:
Starship很有可能要么遵循預(yù)先計(jì)劃的優(yōu)化軌跡,要么運(yùn)行實(shí)時(shí)優(yōu)化以動(dòng)態(tài)生成最優(yōu)軌跡。(或兩者混合)
不僅如此,我們可以進(jìn)一步猜測(cè)它們的優(yōu)化成本函數(shù)/“目標(biāo)”與我們的非常相似:最小化推力,最小化TVC角和最小化角速度。這條賽道有時(shí)幾乎是不可思議的,尤其是在雙向滑行的情況下。(我一直以為這是過沖,但這可能只是到達(dá)著陸點(diǎn)的最佳路徑)。這也是一個(gè)有趣的分析工具,我真的很想找出導(dǎo)致SN8和SN9著陸失敗的一些其他約束(需要進(jìn)行一些調(diào)整:最終狀態(tài)不再是嚴(yán)格的約束)。
“哇,我剛剛想出了SpaceX是如何著陸他們的火箭的??!”,但可悲的是,事實(shí)并非如此。
一旦生成了一條物理上可能的軌跡,該軌跡將您帶到了您想去的地方,那么您需要做的很多事情才能真正沿著該軌跡運(yùn)動(dòng):狀態(tài)估計(jì),閉環(huán)反饋控制,基于實(shí)際運(yùn)動(dòng)軌跡的動(dòng)態(tài)更新時(shí)間條件……還有很多真正的航空工程師知道的東西。除此之外,這些求解器還需要花費(fèi)很長(zhǎng)時(shí)間才能運(yùn)行,并且在線(實(shí)時(shí))優(yōu)化很難正確而安全地完成:一個(gè)錯(cuò)誤的輸入,您的求解器可能會(huì)發(fā)出“失敗”的聲音,從而導(dǎo)致故障發(fā)生。
以上是“用Python解釋SpaceX怎么進(jìn)行火箭回收”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
網(wǎng)頁(yè)標(biāo)題:用Python解釋SpaceX怎么進(jìn)行火箭回收
文章路徑:http://aaarwkj.com/article6/igedig.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、面包屑導(dǎo)航、品牌網(wǎng)站制作、網(wǎng)站建設(shè)、域名注冊(cè)、軟件開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)