0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

四足机器人足端接触检测完整代码

麦辣鸡腿堡 来源:古月居 作者:我是。 2023-11-16 18:04 次阅读

总体模型

将以上两组单独的测量结果叠加起来,形成卡尔曼滤波器中使用的观测向量。 同样,每个度量的协方差矩阵形成一个整体块 对角线协方差矩阵如下:

图片

目前,我们使用的卡尔曼滤波用实现,这一融合过程其实可以通过贝叶斯定律的静态似然最大化得到。

然而,上述过程是一个嵌入在标准卡尔曼更新中的过程,大概是因为在机器人学中更容易实现。

完整代码

import math
import numpy as np
import matplotlib.pyplot as plt


# 设定周期为2
T = 2


# 根据相位计算当前接触状态
def get_contact_state(phi):
    if phi < 0.5*T:
        state = 1
    else:
        state = 0
    return state




# 预测模型
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()
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 机器人
    +关注

    关注

    210

    文章

    27883

    浏览量

    204806
  • 测量
    +关注

    关注

    10

    文章

    4643

    浏览量

    110670
  • 模型
    +关注

    关注

    1

    文章

    3038

    浏览量

    48396
  • 四足机器人
    +关注

    关注

    1

    文章

    90

    浏览量

    15166
收藏 人收藏

    评论

    相关推荐

    步行机器人的弯道行走

    本帖最后由 eehome 于 2013-1-5 10:08 编辑 步行机器人的弯道行走
    发表于 08-12 09:53

    机器人

    谁会做六机器人,求资料??大神们
    发表于 06-06 00:01

    机器人

    第三章、双机器人的硬件结构与框图一、双机器人的硬件框图图1. 双机器人结构框图
    发表于 11-25 11:30

    stm32红外六机器人

    爬行机器人毕业时的作品,当时还处于入门状态,c程序写的比较菜(程序写的比较乱,仅作参考),一直想把这个六机器人作品优化一下,可惜,一直在忙,现借助电路城这个平台开源给大家,希望大
    发表于 03-27 18:51

    机器人

    求大神上传一个六机器人的骨架图纸
    发表于 07-28 10:32

    【OK210申请】轮式机器人

    申请理由:我正在做这样一个机器人,遇到了很多问题,非常想学习一下这款板子!我相信利用它能帮我解决难题!项目描述:可利用机械结构仿生行进,也可利用车轮进行行进,集
    发表于 06-25 19:38

    【Embedded Pi申请】六机器人的创新研发

    申请理由:关于六机器人,基本上是用18个舵机一起使用来驱动六完成相应的动作组,而一般的89C52以及STC12系列的单片机只能让六机器人
    发表于 11-25 15:35

    什么是龙机器人

    机器人是一种仿生机器人,由Openduino控制板控制,有条腿,每条腿两个自由度,由两
    发表于 03-24 16:17

    仿生机器人

    本帖最后由 红尘。破 于 2016-8-19 14:59 编辑 今天整理资料时发现了一年前做的仿生机器人,当时买了一个仿生
    发表于 08-19 14:59

    机器人

    `这是创客集结号的作品机器人身体和都是通过3D打印技术打印出来的,通过自己安装连接上超声波传感器,制作成功的
    发表于 09-29 09:55

    求六机器人的图纸

    `业余,想想做一做六机器人。但是苦于无大致图纸,卡在建模的问题上。求六机器人的图纸,有清晰的尺寸就行(主要是腿)。`
    发表于 03-26 18:43

    机器人的机构设计

    机器人属于复杂机电系统,需要综合生物、机械、电子、控制等学科内容,具体涉及仿生机构设计、灵巧运动机构设计、高性能驱动器制造,行走稳定性控制、强化学习等在内的多个研究方向。其中,机构设计是保障
    发表于 09-15 06:54

    如何完整的组装机器人

    如何完整的组装机器人
    发表于 09-24 07:00

    机器人遍地开花,机器人的市场有多大

    幽灵公主的坐骑在现实中被造出来了? 日本川崎重工3月9日首次公开了旗下开发的全新机器人,外形类似宫崎骏《幽灵公主》中主角的坐骑——酷似山羊的雅酷儿。这款
    的头像 发表于 04-06 15:51 1834次阅读

    机器人步态规划与接触状态

    0、步态规划 机器人控制当中,步态是至关重要的一项。我们可以简单理解成机器人运动过程中各
    的头像 发表于 11-16 17:17 669次阅读
    <b class='flag-5'>四</b><b class='flag-5'>足</b><b class='flag-5'>机器人</b>步态规划与<b class='flag-5'>接触</b>状态