總體模型
將以上兩組單獨的測量結(jié)果疊加起來,形成卡爾曼濾波器中使用的觀測向量。 同樣,每個度量的協(xié)方差矩陣形成一個整體塊 對角線協(xié)方差矩陣如下:
目前,我們使用的卡爾曼濾波用實現(xiàn),這一融合過程其實可以通過貝葉斯定律的靜態(tài)似然最大化得到。
然而,上述過程是一個嵌入在標(biāo)準(zhǔn)卡爾曼更新中的過程,大概是因為在機器人學(xué)中更容易實現(xiàn)。
完整代碼
import math
import numpy as np
import matplotlib.pyplot as plt
# 設(shè)定周期為2
T = 2
# 根據(jù)相位計算當(dāng)前接觸狀態(tài)
def get_contact_state(phi):
if phi < 0.5*T:
state = 1
else:
state = 0
return state
# 預(yù)測模型
def prediction_model(phi, state, params):
"""
Given the gait schedule and the current phase, φ, of a leg,
the gait scheduler provides an expected contact state s φ of
each leg
:param phi: phase
:param state: contact state
:param params: [mu, mu_bar, sigma, sigma_bar]
mu = [mu1, mu2] and so on
:return: the probability of contact
"""
mu0, mu1 = params[0]
mu0_bar, mu1_bar = params[1]
sigma0, sigma1 = params[2]
sigma0_bar, sigma1_bar = params[3]
a = math.erf((phi-mu0)/(sigma0*np.sqrt(2)))
+ math.erf((mu1-phi)/(sigma1*np.sqrt(2)))
b = 2+math.erf((mu0_bar-phi)/(sigma0_bar*np.sqrt(2)))
+ math.erf((phi-mu1_bar)/(sigma1_bar*np.sqrt(2)))
if state == 1:
prob = 0.5 * (state * a)
else:
prob = 0.5 * (state * b)
return prob
# 測量模型-離地高度
def ground_height(pz, params):
"""
The probability of contact given foot heigh
:param pz: ground height
:param params: [mu_z, sigma_z]
:return: The probability of contact
"""
mu_z, sigma_z = params
prob_ground_height = 0.5 * (1 + math.erf((mu_z-pz) / (sigma_z*np.sqrt(2))))
return prob_ground_height
# 測量模型-反作用力
def contact_force(f, params):
"""
the probability of contact given the estimated foot force
:param f: contact force
:param params: [mu_z, sigma_z]
:return: The probability of contact
"""
mu_f, sigma_f = params
prob_force = 0.5 * (1 + math.erf((f-mu_f) / (sigma_f*np.sqrt(2))))
return prob_force
# 概率分布繪圖
def test_predict():
Mu = [0, 1]
Mu_bar = [0, 1]
Sigma = [0.025, 0.025]
Sigma_bar = [0.025, 0.025]
t = np.linspace(0, 0.999, 1000)
prediction_prob = []
prediction_prob2 = []
prediction_prob3 = []
for time in t:
phi = time % T
state = get_contact_state(phi)
p = prediction_model(phi, state, [Mu, Mu_bar, Sigma, Sigma_bar])
p2 = prediction_model(phi, state, [Mu, Mu_bar, [0.05, 0.05], [0.05, 0.05]])
p3 = prediction_model(phi, state, [Mu, Mu_bar, [0.01, 0.01], [0.01, 0.01]])
prediction_prob.append(p)
prediction_prob2.append(p2)
prediction_prob3.append(p3)
fig = plt.figure()
plt.subplot(211)
plt.title('contact phase')
plt.grid()
plt.plot(t, prediction_prob, label='$mu=[0, 1],sigma=[0.025, 0.025]$')
plt.plot(t, prediction_prob2, label='$mu=[0, 1],sigma=[0.05, 0.05]$')
plt.plot(t, prediction_prob3, label='$mu=[0, 1],sigma=[0.01, 0.01]$')
plt.legend()
plt.subplot(212)
plt.title('swing phase')
plt.grid()
plt.plot(t, 1-np.array(prediction_prob), label='$mu=[0, 1],sigma=[0.025, 0.025]$')
plt.plot(t, 1-np.array(prediction_prob2), label='$mu=[0, 1],sigma=[0.05, 0.05]$')
plt.plot(t, 1-np.array(prediction_prob3), label='$mu=[0, 1],sigma=[0.01, 0.01]$')
plt.legend()
fig.tight_layout()
plt.show()
def test_ground_height():
height = np.linspace(-0.3, 0.3, 1000)
ground_height_prob = []
ground_height_prob2 = []
ground_height_prob3 = []
params = [0, 0.025]
params2 = [0, 0.05]
params3 = [0, 0.1]
for h in height:
ground_height_prob.append(ground_height(h, params))
ground_height_prob2.append(ground_height(h, params2))
ground_height_prob3.append(ground_height(h, params3))
fig2 = plt.figure()
plt.plot(height, ground_height_prob, label='$mu=0,sigma=0.025$')
plt.plot(height, ground_height_prob2, label='$mu=0,sigma=0.05$')
plt.plot(height, ground_height_prob3, label='$mu=0,sigma=0.1$')
fig2.tight_layout()
plt.legend()
plt.grid()
plt.show()
def test_contact_force():
force = np.linspace(-50, 200, 1000)
contact_force_prob = []
contact_force_prob2 = []
contact_force_prob3 = []
params = [35, 10]
params2 = [35, 25]
params3 = [35, 50]
for f in force:
contact_force_prob.append(contact_force(f, params))
contact_force_prob2.append(contact_force(f, params2))
contact_force_prob3.append(contact_force(f, params3))
fig3 = plt.figure()
plt.plot(force, contact_force_prob, label='$mu=25,sigma=10$')
plt.plot(force, contact_force_prob2, label='$mu=25,sigma=25$')
plt.plot(force, contact_force_prob3, label='$mu=25,sigma=50$')
fig3.tight_layout()
plt.grid()
plt.legend()
plt.show()
# test_predict()
# test_ground_height()
test_contact_force()
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
機器人
+關(guān)注
關(guān)注
210文章
28127瀏覽量
205889 -
測量
+關(guān)注
關(guān)注
10文章
4740瀏覽量
111070 -
模型
+關(guān)注
關(guān)注
1文章
3121瀏覽量
48663 -
四足機器人
+關(guān)注
關(guān)注
1文章
90瀏覽量
15182
發(fā)布評論請先 登錄
相關(guān)推薦
stm32紅外六足機器人
六足爬行機器人畢業(yè)時的作品,當(dāng)時還處于入門狀態(tài),c程序?qū)懙谋容^菜(程序?qū)懙谋容^亂,僅作參考),一直想把這個六足機器人作品優(yōu)化一下,可惜,一直在忙,現(xiàn)借助電路城這個平臺開源給大家,希望大
發(fā)表于 03-27 18:51
【OK210申請】四足輪式機器人
申請理由:我正在做這樣一個機器人,遇到了很多問題,非常想學(xué)習(xí)一下這款板子!我相信利用它能幫我解決難題!項目描述:可利用四足機械結(jié)構(gòu)仿生行進,也可利用車輪進行行進,集四
發(fā)表于 06-25 19:38
【Embedded Pi申請】六足機器人的創(chuàng)新研發(fā)
申請理由:關(guān)于六足機器人,基本上是用18個舵機一起使用來驅(qū)動六足完成相應(yīng)的動作組,而一般的89C52以及STC12系列的單片機只能讓六足機器人
發(fā)表于 11-25 15:35
四足仿生機器人
本帖最后由 紅塵。破 于 2016-8-19 14:59 編輯
今天整理資料時發(fā)現(xiàn)了一年前做的四足仿生機器人,當(dāng)時買了一個四足仿生
發(fā)表于 08-19 14:59
四足機器人
`這是創(chuàng)客集結(jié)號的作品四足機器人身體和四足都是通過3D打印技術(shù)打印出來的,通過自己安裝連接上超聲波傳感器,制作成功的
發(fā)表于 09-29 09:55
四足機器人的機構(gòu)設(shè)計
四足機器人屬于復(fù)雜機電系統(tǒng),需要綜合生物、機械、電子、控制等學(xué)科內(nèi)容,具體涉及仿生機構(gòu)設(shè)計、靈巧運動機構(gòu)設(shè)計、高性能驅(qū)動器制造,行走穩(wěn)定性控制、強化學(xué)習(xí)等在內(nèi)的多個研究方向。其中,機構(gòu)設(shè)計是保障
發(fā)表于 09-15 06:54
四足機器人遍地開花,四足機器人的市場有多大
幽靈公主的坐騎在現(xiàn)實中被造出來了? 日本川崎重工3月9日首次公開了旗下開發(fā)的全新四足機器人,外形類似宮崎駿《幽靈公主》中主角的坐騎——酷似山羊的雅酷兒。這款四
四足機器人步態(tài)規(guī)劃與接觸狀態(tài)
0、步態(tài)規(guī)劃 四足機器人控制當(dāng)中,步態(tài)是至關(guān)重要的一項。我們可以簡單理解成四足機器人運動過程中各
評論