精华内容
下载资源
问答
  • 十二、单机械臂的鲁棒自适应控制 通过引入直接自适应控制的思想,采用基于Lyapunov直接法的鲁棒模型参考自适应控制方法,可以在具有参数不确定性和未知非线性摩擦特性的情况下,使跟踪误差趋于零,其优点在于...

     

    十二、单力臂机械臂的鲁棒自适应控制

            通过引入直接自适应控制的思想,采用基于Lyapunov直接法的鲁棒模型参考自适应控制方法,可以在具有参数不确定性和未知非线性摩擦特性的情况下,使跟踪误差趋于零,其优点在于不需要建立摩擦模型,不需要精确的摩擦参数,而只需要动、静摩擦的上界值。

    12.1 问题描述

            不确定单机械臂为

                                                        I \ddot{\theta}+\left ( d+\delta _{1} \right )\dot{\theta }+\delta _{0}\theta +mglcos\theta =u-f\left ( \dot{\theta } -u\right )

    其中\theta为系统输出转角,I=\frac{4}{3}ml^{2}为转动惯量,mg为重力,u为控制输入,f\left ( \dot{\theta },u \right )为未知的非线性摩擦,质心距连杆的转动中心为l,连杆运动的黏性摩擦系数为d\delta _{1}为黏性摩擦系数的不确定值,\delta _{0}为弹性摩擦系数。

    如果机械臂的运动平面与水平面平行,则机器人运动方程中的重力项可忽略。则上式变为

                                                           \ddot{\theta }+\frac{\left ( d+\delta _{1} \right )}{I}\dot{\theta }+\frac{\delta _{0}}{I}\theta =\frac{1}{I}\left ( u-f\left ( \dot{\theta },u \right ) \right )

    不确定单机械臂可采用二阶微分方程来描述:
                                                                      \ddot{\theta }+\alpha _{1}\dot{\theta }+\alpha _{0}\theta = \beta _{0}u-\beta _{1}f\left ( \dot{\theta },u \right )

    其中\alpha _{1}=\frac{\left ( d+\delta _{1} \right )}{I},\alpha _{0}=\frac{\delta _{0}}{I},\beta _{0} =\frac{1}{I},\beta _{1} =\frac{1}{I}\alpha _{1},\alpha _{0}为非负的有界实数,\beta _{0},\beta _{1}为正实数。

    f\left ( \dot{\theta } ,u\right )的数学描述如下:

                                                                f\left ( \dot{\theta },u \right )=\lambda \left ( \dot{\theta } \right )F_{c}\left ( \dot{\theta } \right )+\left [ 1-\lambda \left ( \dot{\theta } \right ) \right ]F_{s}\left ( u,\dot{\theta } \right )

     其中\lambda \left ( \cdot \right )为开关函数,定义如下:

                                                                           \lambda \left ( \dot{\theta } \right )=\left\{\begin{matrix} 1,\left | \dot{\theta } \right |\geqslant D_{v}\\ 0,\left | \dot{\theta } \right |< D_{v} \end{matrix}\right.

     

    F_{s}\left ( u,\dot{\theta } \right )F_{c}\left ( u,\dot{\theta } \right )分别为静摩擦和库仑摩擦的变化函数,假定F_{s}\left ( u,\dot{\theta } \right )F_{c}\left ( u,\dot{\theta } \right )为未知函数,但是有界的,即存在正实数\bar{F_{s}}\bar{F_{c}},使得

                                                                           \left | F_{s} \left ( u,\dot{\theta } \right )\right |\leqslant \bar{F_{s}},\forall u,\forall\dot{\theta }

                                                                            \left | F_{c} \left ( u,\dot{\theta } \right )\right |\leqslant \bar{F_{c}},\forall\dot{\theta }

            引入稳定的参考模型如下: 

                                                                            \ddot{\theta }_{m}+a_{1}\dot{\theta }_{m}+a_{0}\theta_{m}=br

    其中\theta_{m}为模型输出,r为系统指令输入,a_{1},a_{0},b为正实数。

            定义误差信号为

                                                                                 e=\theta _{m}-\theta

            则控制的问题在于,寻求控制u,使得对于任意初态,跟踪误差e\left ( t \right )满足

                                                                              \lim_{t\rightarrow\infty }e\left ( t \right )=0

    12.2 鲁棒模型参考自适应控制

            由上式得到误差的动态方程如下:

                                                    \ddot{\theta}_{m}+\alpha _{1}\dot{\theta }_{m}+\alpha _{0}\theta_{m}-\ddot{\theta }-\alpha _{1}\dot{\theta}-\alpha _{0}\theta=br-\beta _{0}u+\beta _{1}f\left ( \dot{\theta },u \right )

                                                \ddot{e}+a_{1}\dot{e}+a_{0}e=br-\beta _{0}u+\beta _{1}f\left ( \dot{\theta },u \right )+\left ( \alpha _{1}-a_{1} \right )\dot{\theta }+\left ( \alpha _{0}-a_{0} \right )\theta

            定义向量x=\left [ e,\dot{e} \right ]^{T},则得到上式的状态空间表达形式为

                                                                   \dot{x}=Ax-\begin{bmatrix} 0\\ \beta _{0} \end{bmatrix}u+\begin{bmatrix} 0\\ \Delta \end{bmatrix}=Ax+Z

    其中\Delta =br+\beta _{1}f\left ( \dot{\theta },u\right )+\left ( \alpha _{1}-a_{1} \right )\dot{\theta }+\left ( \alpha _{0}-a_{0} \right )\thetaA=\begin{bmatrix} 0 &1 \\ -a_{0}& -a_{1} \end{bmatrix}Z=-\begin{bmatrix} 0\\ \beta _{0} \end{bmatrix}u+\begin{bmatrix} 0\\ \Delta \end{bmatrix}

            由于矩阵A的特征值具有负实部,系统是渐进稳定的, 则存在正定矩阵PQ,使得下式成立,

                                                                           A^{T}P+PA=-Q

            定义辅助信号\hat{e}

                                                        \hat{e}=\begin{bmatrix} 0& 1 \end{bmatrix}Px=\begin{bmatrix} 0& 1 \end{bmatrix}\begin{bmatrix} p_{1} &p_{2} \\ p_{2}& p_{3} \end{bmatrix}\begin{bmatrix} e\\ \dot{e} \end{bmatrix}= p_{2}e+ p_{3}\dot{e}

            由辅助信号,取控制律u

                                                     u=k_{0}\left ( \hat{e},r \right )r+k_{1}\left ( \hat{e},\theta \right )\theta+k_{2}\left ( \hat{e},\dot{\theta }\right )\dot{\theta }+q\left ( \hat{e},\dot{\theta }\right )

    其中k_{0}\left ( \hat{e},r \right )=\lambda _{0}\hat{e}r, k_{1}\left ( \hat{e},\theta \right )=\lambda _{1}\hat{e}\theta, k_{2}\left ( \hat{e},\dot{\theta }\right )=\lambda _{2}\hat{e}\dot{\theta }为待调节的增益系数,q\left ( \hat{e},\dot{\theta }\right )为摩擦环节的鲁棒补偿项。

    • 定理

            设计增益系数自适应律和鲁棒补偿项设计为

                                                                         k_{0}\left (\hat{e},r \right )=\lambda _{0}\hat{e}r

                                                                         k_{1}\left ( \hat{e},\theta \right )=\lambda _{1}\hat{e}\theta

                                                                         k_{2}\left ( \hat{e},\dot{\theta }\right )=\lambda _{2}\hat{e}\dot{\theta }

                                                         q\left ( \hat{e},\theta \right )=\left\{\begin{matrix} \bar{\beta} _{1}\bar{F} _{s}sgn\left ( \hat{e} \right )/\beta_{0},\left | \dot{\theta } \right |< D_{v}\\ \bar{\beta} _{1}\bar{F} _{c}sgn\left ( \hat{e} \right )/\beta_{0},\left | \dot{\theta } \right |\geqslant D_{v} \end{matrix}\right.

    其中sgn\left ( \cdot \right )为符号函数,\lambda _{0},\lambda _{1},\lambda _{2}为正实数,那么对于任意的\alpha _{0},\alpha _{1},f\left ( \dot{\theta } ,u\right )及任意的初始条件,误差e\left ( t \right )是有界的且渐进收敛于0。

    12.3 仿真实例

            被控对象的动态方程为

                                                              \ddot{\theta }+\alpha _{1}\dot{\theta }+\alpha _{0}\theta=\beta _{0}u-\beta _{1}f\left ( \dot{\theta } ,u\right )

    其中\alpha _{0}=0.10,\alpha _{0}=0.10,\beta_{0}=12+2sin\left ( \pi t \right ),\beta_{1}=sin\left ( \pi t \right )

            非线性摩擦的上界值及D_{v}分别取为

                                                                \bar{F}_{s}=1.0,\bar{F}_{c}=0.5,D_{v}=0.02

    对象的非线性摩擦模型为

                                                       F_{s}=1.0sgn\dot{\theta },F_{c}=0.5exp\left ( -3.6\left | \dot{\theta } \right | \right )sgn\dot{\theta }

            参考模型取\ddot{\theta }_{m}+20\dot{\theta }_{m}+30\theta_{m}=50r,r=sgn\left ( sin\left ( 0.05\pi t \right ) \right ),即模型参数为a_{1}=20,a_{0}=30,b=50

            令Q=\begin{bmatrix} 15 &0\\ 0& 15 \end{bmatrix},求解Lyapunov方程得P=\begin{bmatrix} 16.625 &0.25\\ 0.25& 0.3875 \end{bmatrix},则辅助信号表示为\hat{e}=0.25e+0.3875\dot{e}

    12.4 仿真结果

                                                                                                  图1 simulink仿真图 

                                                                               图1 参考模型轨迹和实际模型轨迹对比

                                                                                                 图2 控制输出力矩

     

    展开全文
  • 机械手爪部位触觉感应系统

    千次阅读 热门讨论 2021-07-18 21:36:10
    根据关节式机械手的手爪部位来设计触觉传感模块,通过触觉传感信号反馈控制手爪关节处的步进电机运动,使手爪能可靠牢固抓取物体又不损伤物体,并可进行接触的阈值设定和超阈值报警提示

    机械手爪部位触觉感应系统

    一、项目设计目标

    ​ 根据关节式机械手的手爪部位来设计触觉传感模块,通过触觉传感信号反馈控制手爪关节处的步进电机运动,使手爪能可靠牢固抓取物体又不损伤物体,并可进行接触力的阈值设定和超阈值报警提示,设计需要根据机械结构情况选择合适的触觉传感器,将传感器贴于机械手爪的合适位置,检测手爪与物体间的接触力,返回电信号,进行传感测量,同时设计触觉信号的传感接口电路,设计信号放大、滤波、A/D转换电路,使得信号有足够的信噪比,能够被单片机所采集,设计步进电机驱动电路、声光报警电路、及单片机核心控制器和液晶显示电路进行报警与用户交互,最终的设计性能需达到:手爪运动控制分辨率0.01mm、测力分辨率50mN、测力量程3N

    ​ 机械爪图片:

    1626583561510

    二、项目整体框图

    ​ 根据项目的设计目标,进行多次探讨修改,最终确定设计方案框图如下:

    测控电路-机械手

    ​ 项目的整体框图主要分解为三个部分,第一部分是设计信号生成转化电路,将压力信号转化到STM32内置ADC可以采集的电压信号范围,第二部分为STM32采集压力信号进行处理,通过IO口和SPI总线向外围电路发送控制信号,第三部分驱动电路接受控制信号控制外围LED、蜂鸣器、步进电机等驱动设备

    三、项目设计方案

    3.1 压敏电阻信号输出方案:

    • 电阻接线

      ​ IMS 传感器作为可变电阻,可以简单的采用电阻分压的方式,通过测试电压来计算出电阻的大小,也可以通过运算放大器的运算电路来计算 IMS 传感器的实时电阻,本次设计采用如下电路:

    image-20210718131710253

    • 曲线拟合

      首先对电阻进行标定,测量不同压力下阻值数据:

      image-20210718164819341

      对数据进行拟合:

      image-20210718164909852

      最终得出的阻值与压力的拟合公式如下:单位为 R m ( K Ω ) , m ( g ) , F ( N ) R_m(K\mathrm{\Omega}) ,m(g),F(N) Rm(KΩ)m(g)F(N)

    R m = 1 / ( 0.0007 ×   m − 0.0042 )   K Ω = 1 / ( 0.0007 × ( F × 1 0 3 ) / g − 0.0042 )   K Ω R_m=1/(0.0007\times\ m-0.0042)\ K\mathrm{\Omega}=1/(0.0007\times(F\times10^3)/g-0.0042)\ K\mathrm{\Omega} Rm=1/(0.0007× m0.0042) KΩ=1/(0.0007×(F×103)/g0.0042) KΩ

    • 反相调整:

      增加反相电路,选取合适倍率,使电压输出关系与阻值关系呈现线性变化,便于计算,电路设计图如下:

      image-20210718170818811

      电路图输出与输入公式为: U O = − R G / ( R 1 2 + R 9   )   U I U_O=-R_G/(R_12+R_9\ )\ U_I UO=RG/(R12+R9 ) UI,根据压力输入范围和反相电路公式公式,我们选取合适的电路值为: U I = 3.3 V , R 9 = 3 K Ω , R G = 1 K Ω , R 1 2 = ( 0 − 1597 ) K Ω U_I=3.3V,R_9=3KΩ,R_G=1KΩ,R_12=(0-1597 )KΩ UI=3.3VR9=3KΩRG=1KΩR12=01597KΩ,使反相过后的电压值输出在(0 ~ -1V左右)

      经过仿真测试输出结果如下:

      压力量程(N)03
      R m   ( K Ω ) R_m\ (K\mathrm{\Omega}) Rm KΩ16004.859
      输出电压(V)image-20210718172148377
      -0.00224
      image-20210718172157348
      -1.09

      此处运算放大器用LM324AD,最小输出电压为-2.24mV,运放的低输入偏置电流为100nA,对输出影响较小,能满足要求。

    3.2 放大电路方案:

    • 参数设计

      根据前面的反相电路结果,由输出电压为3.3V确定放大电路的放大倍率为3(3.3\1.09=3.027),放大电路采用反相比例放大电路,其放大倍数为计算公式为: K f = − R 3 R 1 K_f=-\frac{R_3}{R_1} Kf=R1R3,故取电阻值为:   R 3 = 3   K Ω , R 1 = R 2 = 1   K Ω \ R_3=3\ K\mathrm{\Omega}, R_1=R_2=1\ K\mathrm{\Omega}  R3=3 KΩR1=R2=1 KΩ

      其中   R 3 \ R_3  R3为滑动变阻器,阻值可调,改变其阻值即可改变放大倍数,用于灵活控制电压放大范围

      仿真结果如下

      image-20210718172959764

    3.3 偏置电路方案:

    偏置电路采用同向加法运算电路,通过与滑动变阻器产生的电压进行加法运算,调节输入电压的偏置,其仿真电路如下:

    image-20210718173849846

    其输入与输出关系为:
    U O = ( 1 + R 6 R 4 ) ( R 5 / / R 11 R 8 + R 5 / / R 11 U I 1 + R 5 / / R 8 R 11 + R 5 / / R 8 U I 2 ) U_O=\left(1+\frac{R_6}{R_4}\right)\left(\frac{R_5//R_{11}}{R_{8+}R_5//R_{11}}U_{I1}+\frac{R_5//R_8}{R_{11+}R_5//R_8}U_{I2}\right) UO=(1+R4R6)(R8+R5//R11R5//R11UI1+R11+R5//R8R5//R8UI2)
    其中 U I 1 U_{I1} UI1为上级放大电路输出电压, U I 2 U_{I2} UI2为输入的偏置电压信号,由滑动变阻器分压获得。根据计算公式和输入电压的范围,我们取: R 8 = 2   K Ω , R 4 = 2   K Ω , R 6 = 2   K Ω , R 11 = 2   K Ω , R 5 = 1   K Ω R_8=2\ K\mathrm{\Omega},R_4=2\ K\mathrm{\Omega},R_6=2\ K\mathrm{\Omega},R_{11}=2\ K\mathrm{\Omega},R_5=1\ K\mathrm{\Omega} R8=2 KΩR4=2 KΩR6=2 KΩR11=2 KΩR5=1 KΩ

    其中 R 7 R_7 R7为分压电阻为 ( 0 − 100   K Ω ) (0-100\ K\mathrm{\Omega}) 0100 KΩ,用于产生加法运算电路的调节电压

    所以偏置电路的输入与输出的关系如下:
    U o = 1 2 ( U I 1 + U I 2 ) U_o=\frac{1}{2}\left(U_{I1}+U_{I2}\right) Uo=21(UI1+UI2)

    3.4 低通滤波方案:

    • 参数设计

      低通滤波电路我们采用压控电压源二阶低通滤波电路,具体电路原理图如下:

    123123

    ​ 根据该电路图计算滤波器的各个参数,首先确定截止频率

    f c = 1000 H z f_c=1000Hz fc=1000Hz

    ​ 然后压控电压源二阶低通滤波电路传递函数模型选择参数:
    ∣ H ( S ) ∣ = K P ω 0 2 ( ω 0 2 − ω c 2 )   2 + ( α ω 0 ω c )   2 \left|H(S)\right|=\frac{K_P{\omega_0}^2}{\sqrt{(\omega_0^2-\omega_c^2)\ ^2+(\alpha\omega_0\omega_c)\ ^2}} H(S)=(ω02ωc2) 2+(αω0ωc) 2 KPω02

    ​ 取 20 l g ∣ H ( S ) ∣ = − 3 d B 20lg\left|H(S)\right|=-3dB 20lgH(S)=3dB,当 S = j ω c S=j\omega_c S=jωc时, ∣ H ( S ) ∣ = 0.708 \left|H(S)\right|=0.708 H(S)=0.708,因为采用巴特沃斯逼近,所以设计 α = 2 \alpha=\sqrt2 α=2

    ​ 由公式 ω 0 = ω c ( 2 K p 2 − 1 ) 4 \omega_0=\frac{\omega_c}{\sqrt[4]{\left(2{K_p}^2-1\right)}} ω0=4(2Kp21) ωc ω c = 2 π   f c \omega_c=2\pi\ f_c ωc=2π fc,带入数据,得 ω c = 6283.18 H z \omega_c=6283.18Hz ωc=6283.18Hz

    ​ 考虑到滤波器在 K p ≤ 2 K_p\le2 Kp2时稳定,取 K p = 2 K_p=2 Kp=2,得到 ω 0 \omega_0 ω0的计算值如下:
    ω 0 = ω c ( 2 K p 2 − 1 ) 4 = ω c \omega_0=\frac{\omega_c}{\sqrt[4]{\left(2{K_p}^2-1\right)}}=\omega_c ω0=4(2Kp21) ωc=ωc
    ​ 为了方便计算取: R 1 = R 2   C 1 = C 2 R_1=R_2\ C_1=C_2 R1=R2 C1=C2

    ​ 根据截止频率由表格选取两电容的值,则有 C 1 = C 2 = 0.1 μ   F C_1=C_2=0.1\mu\ F C1=C2=0.1μ F

    ​ 参考表格如下:

    ​ 又因 ω 0 = 1 R C \omega_0=\frac{1}{RC} ω0=RC1,代入数据有:
    R 1 = R 2 = 1.6 k Ω R_1=R_2=1.6k\mathrm{\Omega} R1=R2=1.6kΩ
    ​ 考虑到 R 3 R_3 R3 R 4 R_4 R4起到保护电路作用,故在电阻同一量级选择,取
    R 3 = 2 k Ω , R 4 = 1 k Ω R_3=2k\mathrm{\Omega},R4=1kΩ R3=2kΩR4=1kΩ
    ​ 综上,二阶巴特沃斯滤波器参数为:
    R 1 = R 2 = 1.6 k Ω R_1=R_2=1.6k\mathrm{\Omega} R1=R2=1.6kΩ

    R 3 = 2 k Ω , R 4 = 1 k Ω R3=2kΩ,R4=1kΩ R3=2kΩR4=1kΩ

    C 1 = C 2 = 0.1 μ   F C_1=C_2=0.1\mu\ F C1=C2=0.1μ F

    • 仿真验证

      将以上的电路参数值带入到压控电压源二阶低通滤波电路在Multisim中进行仿真,仿真电路图如下:

    20210710130049-1625893789936

    ​ 幅频特性仿真结果:

    20210710130028

    ​ 仿真效果图:

    20210710130834

    可以看到,滤波器可以很明显的滤除高频噪声

    3.5 ADC采集方案:

    ​ ADC采集使用STM32F103C8T6自带的AD采集器采集电压,A/D转换可以单次、连续、扫描或间断执行,ADC转换的结果可以左对齐或右对齐储存在16位数据寄存器中,基准电压源采用内部电压源,设计简单方便,其精度为12位,采集电压范围为:0 - 3.3V,采集电压分辨率为3300mV/4096=0.8057mV,根据计算的阻值电压与输出电压关系,可以计算出测力分辨率为:3000mN/4096=0.73mN

    3.6 程序设计方案:

    程序处理单元采用STM32F103C8T6单片机,单片机外观如下:

    qxlarge-dsc-D3D3A1560BF1643BA1A31D749B441F4C

    程序设计采用STM32CubeMX进行软件开发:

    20210718203951

    ​ 程序设计主要设计内容为:单片机ADC采集电压,转换成阻值,通过拟合曲线计算出受力,将受力的值与设定的阈值进行比较,如果大于阈值则控制声光的IO口电平转换,声光报警开启,如果小于阈值则关闭,同时在开启抓取模式的时候,如果夹取的目标物体与机械爪间的受力没有达到稳定抓取的力度,单片机会控制步进电机夹紧物体,增加力度,如果受力超过稳定抓取力度,则会反向转动,减小抓取力度,防止力度过大破坏物体,达到稳定抓取目标物体的功能,单片机还会通过OLED显示屏,将检测到的受力实时显示到OLED上,展示系统运行状态等等数据

    3.7 LED和蜂鸣器驱动方案:

    ​ LED部分电路通过串联电阻限流驱动LED灯,单片机I/O口连接报警灯控制电路,蜂鸣器报警电路由三极管及有源蜂鸣器构成,三极管作为开关管控制有源蜂鸣器开关,当单片机判断接触力超过警戒阈值时,IO口输出高电平,使三极管导通,蜂鸣器作用,发出警报,电路设计图如下:

    20210718203433

    3.8 步进电机驱动方案:

    • 分辨率分析

      ​ 步进电机型号为四相六线28步进电机,驱动四相六线步进电机,两根公共端com端不接线也可以驱动,四相六线步进电机的步距角为1.8°±5%,减速比为1/64,按照步距角1.8°计算,步进电机走一圈需要360°/1.8°=200个脉冲,减速比为64则电机转64圈输出轴转1圈,所以输出轴是12800个脉冲为一圈,输出轴转动一圈,丝杆移动2mm,机械爪相对移动的距离为4mm,因此步进电机每转动一个步距角,即转过1/200圈,输出轴转动1/12800圈,折算到手爪运动的距离为4/12800=0.0003125mm,满足分辨率的要求

    • 电机驱动原理

      ​ 采用L298N驱动芯片来驱动步进电机,L298N是一种电机驱动芯片,其中每个输出口最高可以提供2A的电流,其供电电压范围是2.5-48v,我们采用12V电压供电,4个输出端接到步进电机的4个相位上,步进电机的两个相位接到GND

    image-20210718211203285

    ​ 在驱动步进电机时,四个控制端按照顺序由单片机输入控制电平,对应的输出端会输出12V的驱动电压,驱动对应相位,此处我们用四相单四拍的通电方式,运行时步距角为1.8°,送电方式为A-B-C-D-A,时序图如图所示:

    IMG_20210715_232712

    3.9 电源设计方案:

    ​ 项目整体设计过程中需要三种电源,分别为+12V、-12V以及+3.3V和+5V电源,其中+/-12V电源由实验台提供,+5V和+3.3V则使用AMS1117-5.0和XC6204,将12V降压到5V,5V再降压到+3.3V,两个芯片的典型电路如下图:

    20210710132238
    以上就是整个机械爪控制系统的设计方案论证,下一篇将会更新机械爪控制系统设计实际电路设计与程序编写!!!

    展开全文
  • 上一篇:grbl控制3轴机械臂 原理 实现 (一) 之2D机械臂模拟及实现 3轴机械臂几何分析 到目前为止,我们知道了如何在XY平面约束的情况下解决正逆运动学问题。从2D到3D的诀窍是重新使用2D解决方案。我们所介绍的...

    参考文章:https://www.alanzucconi.com/2020/09/14/inverse-kinematics-in-3d/

     

    上一篇:grbl控制3轴机械臂 原理 实现 (一) 之2D机械臂模拟及实现

     

    3轴机械臂几何分析

        到目前为止,我们知道了如何在XY平面约束的情况下解决正逆运动学问题。从2D到3D的诀窍是重新使用2D解决方案。我们所介绍的这种3轴机械臂,一共3个轴,控制L1臂一个轴,控制L2臂一个轴,底座将L1和L2臂整体旋转为一个轴。很明显我们就多了一个整体旋转的维度。并且底座的旋转不会改变L1和L2臂的角度。

    我们可以通过三个步骤解决问题:

    1. 绕Y轴旋转目标点,直到它位于XY平面上
    2. 移动机械臂L1和L2臂,使其到达目标该点,就像在2D模式下一样
    3. 通过沿Y轴的相反方向旋转整个机械臂来“撤消”旋转。

    以上三个步骤逆解举例:

    假设我们最终要得到的目标点是下图红色点(X^{'} ,Y^{'} , Z^{'} ),那么我们就要求得大臂旋转角度,小臂旋转角度,两臂在Y轴旋转角度

    根据步骤一,绕Y轴旋转到X,Y平面上如下图,这样我们就能像处理2D机械臂一样

    步骤二,在此平面上处理得到的L1,L2臂角度

    步骤三,得到L1,L2臂的角度后,恢复Y轴的旋转,并求得Y轴的旋转角度

    根据(X^{'} ,Y^{'} , Z^{'} )的值,求得紫色的线与X轴的夹角,这个夹角就是Y轴的旋转角度

    至此,3个角度都求出来了。

     

    实际上,旋转Y轴是为了方便理解,实际应用中,我们可以认为(X^{'} ,Y^{'} , Z^{'} )目标点所处于平面(W,Y)上

    在这个(W,Y)平面上,直接按2D机械臂方式来算出L1,L2臂的角度即可,Y轴旋转角度计算照旧。

     

    3D运动学逆解(Inverse kinematics)

    我们把2d机械臂的图画到3d里面,可见原来我们的X边,变成了W边

    根据坐标轴得知W边在(X,Z)平面,根据X边,W边,Z边是直角三角形,通过公式 A^2 + B^2 = C^2    求出W的长度

    代入值得

    Z^2 + X^2 = W^2     得     W = \sqrt{Z^2 + X^2}

    再根据W边和Y边求出原点到(X,Y,Z)的距离为A边,W边,Y边,A边是直角三角形,依旧通过公式 A^2 + B^2 = C^2

    代入值得

    W^2 + Y^2 = A^2     得     A = \sqrt{W^2 + Y^2}   代入上面W得  A = \sqrt{Z^2 + X^2 + Y^2}

    接下来就和2d机械臂一样了

    \cos(\theta T) = \frac{W}{A}    代入以上公式得    \cos(\theta T) = \frac{\sqrt{Z^2 + X^2}}{\sqrt{Z^2 + X^2 + Y^2}}

     \theta T = \arccos(\frac{\sqrt{Z^2 + X^2}}{\sqrt{Z^2 + X^2 + Y^2}})

    余弦定理公式:

    A^2 = B^2 + C^2 - 2BC\cos(\alpha ) 

    根据余弦定理,将值代入公式得

    L2^2 = L1^2 + A^2 - 2L1A\cos(\theta 1-\theta T)

    L2^2 = L1^2 + (\sqrt{Z^2 + X^2 + Y^2})^2 - 2L1\sqrt{Z^2 + X^2 + Y^2}\cos(\theta 1-\theta T)

     

    2L1\sqrt{Z^2 + X^2 + Y^2} \cos(\theta 1 - \theta T) = L1^2 + Z^2 + X^2 + Y^2 - L2^2

     

    \cos (\theta1 - \theta T) = \frac{L1^2 + Z^2 + X^2 + Y^2 - L2^2}{2L1 \sqrt{Z^2 + X^2 + Y^2}}

     

    \theta1 = \arccos( \frac{L1^2 + Z^2 + X^2 + Y^2 - L2^2}{2L1 \sqrt{Z^2 + X^2 + Y^2}}) + \theta T


    同上根据余弦定理:

    A^2 = L1^2 +L2^2 - 2L1L2 \ cos(180-\theta 2)

    (\sqrt{Z^2+X^2+Y^2})^2 = L1^2 +L2^2 - 2L1L2 \ cos(180-\theta 2)

     

    2L1L2 \ cos(180-\theta 2) = L1^2 +L2^2 - Z^2-X^2-Y^2

     

    \cos(180 - \theta2) = - \cos(\theta2) = \frac{L1^2 + L2^2 - Z^2 - X^2 - Y^2}{2L1L2}


    有:

    \theta2 = \arccos(\frac{Z^2 + X^2 + Y^2 - L1^2 - L2^2}{2L1L2})

     

    \theta 3是X轴到W边的角度,我们用三角函数来求\theta 3

    Z边,X边,W边组成一个直角三角形,则

     

    \tan(\theta 3) = \frac{Z}{X}     得   \theta 3 = \arctan(\frac{Z}{X})

     

    这就求出3D机械臂的三个旋转角度了。

     

     

    3D运动学正解(Forward kinematics)

    对于3D机械臂的运动学正解,依旧可以和2D机械臂的方法。

    首先我们已知L1,L2臂的臂长,L1,L2臂的角度和机械臂在Y轴旋转的角度,求坐标(X,Y,Z)

    首先和2D机械臂一样,我们先求X,Y的坐标,在这里就是W,Y平面,就是求W和Y的值。

    w1,w2,y1,y2分别是浅蓝色线段部分

    由于w1和w2是平行的,所以L1和w1所成角度,和L1和w2所成角度相同,所以有

    \theta3 = 90 - \theta1

    根据三角函数:

    w1 = \cos(\theta 1) L1

    w2 = \sin(\theta3 + \theta2)L2

    y1 = \sin(\theta1)L1

    y2 = \cos(\theta3 + \theta2)L2

    W =w1 + w2         代入上式得          W = \cos(\theta 1) L1 + \sin(\theta3 + \theta2)L2 

     

    Y = y1 + y2          代入上式得          Y = \sin(\theta1)L1 + \cos(\theta3 + \theta2)L2

    然后根据W的值,求X和Z的值

    \sin(\theta 4) = \frac{Z}{W}       得     Z = \sin(\theta 4 ) W

     \cos(\theta 4) = \frac{X}{W}       得     X = \cos(\theta 4 ) W

    至此求得X,Y,Z的值

     

    软件模拟实现

    这里用的unity进行的模拟,通过unity里面的父子组件关系,L1旋转可以带动其子组件L2一起旋转。所以一个臂是由两部分组成的joint和arm如图

    这样把两个臂组装起来,再把他们绑在一个原点方块this上

     它们的父子关系是

    • this
      • joint0
        • arm0
        • joint1
          • arm1

     

    组合好后的样子

    此脚本放在this方块上,并把joint0,joint1,的transform拖到脚本的公共变量上

    代码实现:

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    
    
    public class ik : MonoBehaviour {
    
    
    
    
        //[Header("Joints")]
        public Transform Joint0;
        public Transform Joint1;
        public Transform Hand;
    
        //[Header("Target")]
        public Transform Target;
    
    
        private float length0, L1;
        private float length1, L2;
    
        private float L1_2, L2_2;
    
        private int X_AXIS = 0;
        private int Y_AXIS = 1;
        private int Z_AXIS = 2;
    
        private float SCARA_OFFSET_X = 0;
        private float SCARA_OFFSET_Y = 0.72f;
        private float SCARA_OFFSET_Z = 0;
    
        public bool angle_mode = false;
    
        private float[] cartesian = new float[3], f_scara = new float[3];
    
    
        void Start()
        {
            length0 = Vector3.Distance(Joint0.position, Joint1.position);
            length1 = Vector3.Distance(Joint1.position, Hand.position);
            L1 = length0;
            L2 = length1;
            L1_2 = sq(L1);
            L2_2 = sq(L2);
    
    
        }
    
    
    
    
        // Update is called once per frame
        void Update() {
    
    
    
    
    
    
            float length2 = Vector3.Distance(Joint0.position, Target.position);
    
            if (length2 > length0 + length1 - 0.3f)
            {
    
            }
            else
            {
                cartesian[0] = Target.position.x;
                cartesian[1] = Target.position.y;
                cartesian[2] = Target.position.z;
    
                inverse_kinematics(cartesian, f_scara);
    
                float[] cart = new float[3];
                float[] scar = new float[3];
    
                scar = (float [])f_scara.Clone();
    
                forward_kinematics_SCARA(scar, cart);
                Debug.Log("x:" + cart[0]);
                Debug.Log("y:" + cart[1]);
                Debug.Log("z:" + cart[2]);
            }
    
            Joint0.transform.localEulerAngles = new Vector3(0, 0, 0);
            Vector3 Euler0 = Joint0.transform.localEulerAngles;
            Euler0.x = 90f - f_scara[0];
            Joint0.transform.localEulerAngles = Euler0;
    
            Joint1.transform.localEulerAngles = new Vector3(0, 0, 0);
            Vector3 Euler1 = Joint1.transform.localEulerAngles;
            Euler1.x = f_scara[1];
            Joint1.transform.localEulerAngles = Euler1;
    
            this.transform.localEulerAngles = new Vector3(0, 0, 0);
            Vector3 Euler2 = this.transform.localEulerAngles;
            Euler2.y = f_scara[2];
            this.transform.localEulerAngles = Euler2;
    
    
        }
    
    
        float sq(float a)
        {
            return a * a;
    
        }
    
    
        // f_scara是大臂和小臂的角度,cartesian是坐标
        void inverse_kinematics(float[] cartesian, float[] f_scara)
        {
            /***********************robot arm****************************/
    
            //         y +  /z
            //           | /
            //           |/
            //           +-----+x
    
            float ROBOTARM_alpha, ROBOTARM_beta, ROBOTARM_cta, ROBOTARM_alphapsi, projectxyLength, X, Y, X_2, Y_2, sqrtx_2ay_2;
    
            //首先求得目标点 到 原点的距离
            //获取机械臂投射到xy平面的长度
            //length = sqrt(x*x + y*y)
            projectxyLength = Mathf.Sqrt(sq(cartesian[X_AXIS]) + sq(cartesian[Z_AXIS]));//对调yz,坐标系不同
                                                                                        //将3d机械臂变量变为2d机械臂的变量
                                                                                        //	projectxyLength长度为2d机械臂的X
            X = projectxyLength;
            X_2 = sq(X);
            Y = cartesian[Y_AXIS];//对调yz,坐标系不同
            Y_2 = sq(Y);
            sqrtx_2ay_2 = Mathf.Sqrt(X_2 + Y_2);
            //求得机械臂所在yz旋转平面的alphapsi角度
            ROBOTARM_alphapsi = Mathf.Acos(X / sqrtx_2ay_2);
            //如果坐标在平面以下,将alphapsi取反
            if (Y < 0)
            {
                ROBOTARM_alphapsi = -ROBOTARM_alphapsi;
            }
    
            //求得机械臂所在yz旋转平面的alpha角度,,即大臂到xy平面的角度(实际是弧度)
            ROBOTARM_alpha = Mathf.Acos((L1_2 + X_2 + Y_2 - L2_2) / (2 * L1 * sqrtx_2ay_2)) + ROBOTARM_alphapsi;
            //求得小臂的角度(实际是弧度)
            ROBOTARM_beta = Mathf.Acos((X_2 + Y_2 - L1_2 - L2_2) / (2 * L1 * L2));
            //求得整体机械臂的旋转角度(实际是弧度)
            ROBOTARM_cta = Mathf.Atan2(cartesian[X_AXIS], cartesian[Z_AXIS]);
    
            //如果不是角度模式
            if (!angle_mode)
            {
                f_scara[X_AXIS] = Mathf.Rad2Deg * ROBOTARM_alpha; //大臂旋转弧度转换为角度
                f_scara[Y_AXIS] = Mathf.Rad2Deg * ROBOTARM_beta;   //小臂旋转弧度转换为角度
                f_scara[Z_AXIS] = Mathf.Rad2Deg * ROBOTARM_cta;
            }
            //否则是角度模式
            else
            {
                f_scara[X_AXIS] = cartesian[X_AXIS];
                f_scara[Y_AXIS] = cartesian[Y_AXIS];
                f_scara[Z_AXIS] = cartesian[Z_AXIS];
    
            }
        }
    
    
    
        //传入值 f_scara是大臂和小臂的角度,cartesian是最终求得的坐标
        void forward_kinematics_SCARA(float [] f_scara, float [] cartesian)
        {
            /***********************robot arm****************************/
            float X, Y, Z;
            float project3D;
            //f_scara里面的0,1,2代表:大臂角度,小臂角度,旋转角度
    
    
            //         y +  /z
            //           | /
            //           |/
            //           +-----+x
    
    
            //unity 角度空间转换转换
            //f_scara[X_AXIS] = 90f - f_scara[X_AXIS];
    
            //2D机械臂朝向的方向,两臂投影到平台平面长度
            //Z = Mathf.Cos(Mathf.Deg2Rad * f_scara[X_AXIS]) * L1 + Mathf.Sin((Mathf.Deg2Rad * f_scara[Y_AXIS]) + (Mathf.Deg2Rad * 90) - (Mathf.Deg2Rad * f_scara[X_AXIS])) * L2;
    
            //3D 两臂投影到平台平面长度,通过三角函数转化为坐标轴方向长度
            project3D =  Mathf.Cos(Mathf.Deg2Rad * f_scara[X_AXIS]) * L1 + Mathf.Sin((Mathf.Deg2Rad * f_scara[Y_AXIS]) + (Mathf.Deg2Rad * 90) - (Mathf.Deg2Rad * f_scara[X_AXIS])) * L2;
            Z = Mathf.Cos((Mathf.Deg2Rad * f_scara[Z_AXIS])) * project3D;
    
            //垂直向上的方向
            Y = Mathf.Sin((Mathf.Deg2Rad * f_scara[X_AXIS])) * L1 + Mathf.Cos((Mathf.Deg2Rad * f_scara[Y_AXIS]) + (Mathf.Deg2Rad * 90) - (Mathf.Deg2Rad * f_scara[X_AXIS])) * L2;
    
            //2D 站机械臂后方看向它,它的右边方向
            //X = Mathf.Sin((Mathf.Deg2Rad * f_scara[Z_AXIS])) * Mathf.Cos((Mathf.Deg2Rad * f_scara[X_AXIS])) * L1 + Mathf.Sin((Mathf.Deg2Rad * f_scara[Y_AXIS]) + (Mathf.Deg2Rad * 90) - (Mathf.Deg2Rad * f_scara[X_AXIS])) * L2;
    
            //3D 站机械臂后方看向它,它的右边方向
            X = Mathf.Sin((Mathf.Deg2Rad * f_scara[Z_AXIS])) * project3D;
    
    
    
    
            cartesian[X_AXIS] = X + SCARA_OFFSET_X;  //求得机械手顶点的坐标
            cartesian[Y_AXIS] = Y + SCARA_OFFSET_Y;  //求得机械手顶点的坐标
            cartesian[Z_AXIS] = Z + SCARA_OFFSET_Z;		
    		
        /***********************robot arm****************************/	
        }
    
    
    }

    实现效果演示

     

    接下来介绍下GRBL,以及如何在GRBL上控制机械臂,以及机械臂控制的硬件细节

     

    下一篇:grbl控制3轴机械臂 原理 实现 (三) 之如何通过步进电机控制机械臂、插补算法

     

     

    展开全文
  • 波士顿仿生机械狗 原理分析

    千次阅读 2021-02-13 18:54:23
    波士顿仿生机械狗 原理分析 ViatorSun 2019-08-16 15:57:29 6035 收藏 33 文章标签: 波士顿动力 四足机器人 版权 导语:Boston Dynamics 在机器人动力方面堪称翘楚,其由双足或多足机器人组成的机器人天团...

    摘自:https://blog.csdn.net/viatorsun/article/details/99675274

    波士顿仿生机械狗 原理分析

    ViatorSun 2019-08-16 15:57:29 6035 收藏 33

    文章标签: 波士顿动力 四足机器人

    版权

    导语:Boston Dynamics 在机器人动力方面堪称翘楚,其由双足或多足机器人组成的机器人天团总是时不时能给我们带来惊喜。上周,Boston Dynamics 又发布了一段视频,并再次推出了一款全新机器人——Handle,这也是Boston Dynamics 首次尝试轮式机器人。从视频中我们可以看到,Handle 机器人能够载重、下蹲和跨越障碍物,比上一款 Atlas 机器人更为先进。Boston Dynamics 公司创始人兼总裁 Marc Raibert 在接受 IEEE Spectrum 采访时表示,双轮仿人形机器人是一个伟大的发明,使用轮腿混合系统是个两全其美的解决方案。

    为什么Boston Dynamics 要选择轮腿混合系统,相对于Altas 的双足系统来说突破点在哪里?加了个双轮后,比之前的双腿直立行走控制难度变小了还是变大了?平衡车和Handle的轮子在稳定结构方面有什么不一样的地方?对于这些大家都比较好奇的问题,雷锋网本期公开课我们邀请到浙江大学控制学院机器人实验室博士李超为我们一一解答。

    李超

    • 浙江大学控制学院机器人实验室博士,“赤兔”四足机器人运动控制负责人,波士顿动力的忠实拥趸,足式机器人实用化方向的创业者。
    • 主要研究领域是足式机器人的运动规划与平衡控制。作为核心骨干,研制了目前国内唯一能够实现奔跑的电驱四足机器人“赤兔”, 并获得广泛关注和认可。所在“赤兔”团队专注于足式机器人实用化和产品化的研发和创业。

    公开课视频:

     

     

     

    文字整理部分:

    从这个视频我总结了Handle几个亮点:新的机器人形态:轮+腿;运动更加快速灵活;超强的弹跳能力。

    Handle展示的功能包括快速加速和制动;运动过程中转弯和原地的高速转弯;单轮过斜坡,姿态保持稳定;Endpoint Control(Spotmini展示);搬运货物(100lbs);快速下台阶;室外雪地滑行;弹跳。其中第二条、第三条以及最后一条展示的是与腿相关的技术。

    Handle主要技术包括腿式机器人;轮式和平衡车;地图构建与定位导航;移动操作(Mobile Manipulation);系统设计与集成。

    波士顿动力(Boston Dynamics)

    • 波士顿动力发展路线
      在这里插入图片描述

    波士顿动力是在1992年创立的,创立时间比在2013年将其收购的谷歌还长(雷锋网注:2016年3月有媒体爆出消息,Google母公司Alphabet计划放弃机器人计划,并出售收购不到3年的波士顿动力。)。创始人Marc Raibert 可以说是我的偶像,他时常穿着一件花衬衣,我总觉得他像一个挺慈祥的老人。

    • 波士顿动力创始人Marc Raibert

    在这里插入图片描述

    我一直认为波士顿动力是创业公司但不是初创公司,它的主要产品是双足和四足机器人,而它的相关技术在成立之后很少公开,很多时候参考Raibert在MIT Leglab的工作(雷锋网(公众号:雷锋网)注:1980年Raibert在卡内基•梅隆大学创立了CMU leg实验室,主要从事研究与机器人相关的控制、机器视觉放方面的技术,当时Raibert在这个大学担任副教授,到1986年,当Raibert升任麻省理工学院电子工程与计算机科学系的教授后,他将实验室搬到了麻省理工学院)。

    • Marc Raibert在1980s做的机器人研究

    在这里插入图片描述

    这个研究路线是从单腿到双腿到四足,其中单腿是基础,我个人感觉它的运动控制核心是动态平衡(Dynamic Balance)。其实我感觉Boston Dynamics 应该翻译成波士顿动态或者波士顿动力学,而不是波士顿动力。

    单腿机器人

    在这里插入图片描述

    单腿弹跳的原理包括运动对称性和落脚点控制。其中,运动对称性的现象是指单腿机器人以一定速度跳跃落地对应一个特殊的落脚点 (NP点,Neutral Point),机器人落地后的运动状态相对于NP点左右对称,最后机器人会以相同的速度离地。

    落脚点控制是核心的。如果机器人需要以当前速度继续运动,就将落脚点控制到NP点着地;如果需要加速,就将落脚点控制到小于NP 点着地;反之,如果需要减速,就需要以大于NP点的落脚点着地。

    单腿弹跳的过程其实就像小朋友玩的弹跳器,正常的时候你只要保持弹跳器竖直着地就可以在原地不断弹跳,如果你想向前运动,就需要改变下弹跳器着地的角度就可以的,如果要跳得高一点,就需要人腿的弹跳器着地的时候加下力。

    双足机器人

    双足跑步
    在这里插入图片描述

    双足跑步可以等效成两条单腿相互交错运动,即两条腿的运动在相位上相差180度,就可以产生向前弹跳的运动。其实双腿从算法和硬件上都比单腿容易,因为飞行相占比少很多。

    双足步行

    在这里插入图片描述
    双足行走跟双足跑跳不一样,一般来说,双足行走时身体高度和姿态均保持恒定。此时,腿的作用可以模拟成一个弹簧阻尼系统,完成对身体高度和姿态的闭环控制。水平方向可以等效一个阻尼器牵引身体的运动,完成对水平速度的闭环控制。

    双足平衡

    在这里插入图片描述
    双足平衡控制,按照应对扰动量的大小依次可分为4种策略:踝策略、髋策略、跨步策略以及安全倒策略。外部扰动后,身体的质心投影位置(CoM)依然在脚掌范围内,则通过扭动脚掌踝关节,将身体控制回原位;当CoM超出脚掌范围,则通过髋关节的作用(身体的扭动)将身体拉回原位;当扰动过大超出髋策略的应对范围,则通过迈步的方式在下一步把身体的运动状态控制回来;最后,当扰动过大超出跨步策略的应对范围,机器人的摔倒不可避免,则及时将机器人调整到一个安全的姿态,以避免机器人倒地时受损或过度受损。

    四足运动

    在这里插入图片描述

    等效双足策略,就是根据四足机器人的不同步态,通过力等效原理将四足机器人等效成不同的双足机器人进行规划控制。

    Why轮+腿?

    足式机器人优势:

    立体复杂路面主要就是台阶和楼梯,相比履带式,足式机器人尺寸小而且更灵活,对地面无损坏。总之,走轮(履)式不能走的路,到轮(履)式到不了的地方!

    足式机器人劣势:

    1. 能量利用效率低
      下图是不同物种之间的能量利用效率对比图。比如说人在摄入一定能量后如果走路能走1公里,而骑车能骑3公里,而这个时候还要考虑到另外一个因素就是续航。2013年波士顿动力将动力由汽油改为电池,电池比较小续航时间也就比较短,所以一定要在能量利用效率上做改进。另外,足式机器人在执行任务的时候,面对的绝大部分路面都比较平坦,完全足式效率太低。
      在这里插入图片描述

    2. 快速运动能力不足
      Handle速度可达24km/h
      New Atlas 速度差不多5km/h(猜测)

    3. 结构复杂,控制难度大,成本高
      左为Altas,右为Handle
      在这里插入图片描述

    Handle腿部关节只有3个,设计、加工和装配难度都下降

    控制难度: 足式步行 >> 轮式运动

    Atals腿是3维,Handle腿是2维平面的,算法难度降低

    少了三个关节,驱动和加工成本降低

    所以,结合这几点波士顿动力选择轮腿结合的方式也是为了扬长避短达到优势互补。在这里我也觉得,轮(履)式结合是足式面向实用化的一个必然趋势!

    在这里插入图片描述

    在2015年Darpa机器人挑战赛总决赛中(Darpa Robotics Challenge Finals 2015)获得第一名和第三名的机器人都使用了轮腿式设计。

    关于Handle几个问题
    Handle基于Atlas的躯干,双轮的轮子,突破点在哪里?

    个人理解难度突破并不大,主要是波士顿动力面向实际应用,对双足行走一些固有不足进行完善(行走效率和能量利用效率等)。

    目前来看,轮腿(履)混合是足式机器人面向实用化开发的一个方向,包括DRC比赛第一名韩国HUBO机器人,第三名CMU的chimp机器人。

    Handle加了个双轮后,很多人觉得比之前的双腿直立行走控制难度变小了,事实是这样的吗?

    对比ATLAS,控制难度确实变小了。不仅是控制难度变小了,整个腿部驱动和结构设计难度也小很多。

    平衡车和Handle的轮子在稳定结构方面有什么不一样的地方?

    在这里插入图片描述

    平衡车和Handle的最大差异是腿的作用。Handle的腿可以模拟主动悬挂系统,可以改变腿长和支撑力。可以通过改变腿长,改变身体重心高度、左右位置和姿态,提高轮式在复杂路况下的通行能力、身体的平稳性和高速运动转弯时的安全性。另外,因为身体和手臂的扭动可以辅助提高前向运动的稳定性。

    Handle倒滑+弹跳背后的技术难不难?

    倒滑:按之前波士顿动力腿型的介绍,前向和后向滑动的运动控制几乎没有差异。倒滑的原因是机器人在裆部竖装了一个激光雷达(见下图),前滑时,腿会遮挡视线。

    在这里插入图片描述
    弹跳:对boston dynamcis来说, Handle弹跳的算法难度并不大。见MIT最早双足机器人空翻视频,理论上算法难度远大于Handle ,更不提Wildcat在高速奔跑Gallop的算法难度。主要难度在于硬件方面,包括动力和机构。

    Handle的两个轮子,一个轮子在爬坡,一个轮子在平地,速度肯定不一样,请问这是两个轮子的速度和稳定性怎么控制的?

    个人对轮式运动不是很了解。但现有的全地形越野车很容易做到这点,甚至可以完成更复杂的任务(并且其悬挂是被动的)。

    Handle的优势在于其腿模拟一个主动悬挂,可以主动控制腿长和支撑力。更有利于重心的调整和姿态控制。

    两个轮子不转的时候能走路吗?

    不行。主要原因:

    1. 机器人侧向无法平衡。腿部的自由度不够,特别是髋缺少Roll (侧摆)关节。简单来说:走路时。

    2. 行走方向很难控制。髋缺少Yaw(偏转)关节,轮与地面的接触面不够,难以提供足够摩擦扭矩维持身体方向。

    足式机器人未来和挑战

    Handle待解决问题:

    1. 上台阶问题。(易解决)
    2. 自主移动与自主操作问题。(机器人是一个完整的系统,光有运动能力并不够,待无人车技术、人工智能技术等技术一起成熟)
    3. 安全性问题。(也是双足应用的最大问题和瓶颈,致命弱点。双足重心较高,稳定性不够。故障时,机器人摔倒,如何对环境的破坏和人员的伤害,基本无解)
    4. 强调动态平衡/稳定(Dynamics Balance/ Stability),欠缺静稳定(Static Stability)。
    5. 动态平衡必须实时依靠控制来完成平衡控制,一旦这种掉电或故障,控制失去,机器人就会失去平衡摔倒。

    未来实用化方案:

    轮腿式四足机器人。我不知道现在说这话是不是有点马后炮,不过我们在一年前就尝试轮腿式机器人,当然,我们期待spotmini的下一代。

    我们在做什么?

    1. 打乒乓球的仿人机器人“悟”和“空”
    2. 地图构建与定位导航
    3. 2015亚马逊机器人分拣货物挑战赛(Amazon Robot Picking Challenge, 5st Place)
    4. 移动操作(Mobile Manipulation)
    5. 自主行走平衡车
    6. 腿式机器人

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    参数

    • PMSM电机

    • http://www.leiphone.com/news/201703/URrR8CG2tmtghNDl.html

    • https://blog.csdn.net/xiangz_csdn/article/details/61614364

    展开全文
  • 机械

    2021-06-16 03:31:20
    因其独特的操作灵活性, 已在工业装配, 安全防爆等领域得到广泛应用。机械臂是一个复杂系统, 存在着参数摄动、外界干扰及未建模动态等不确定性。因而机械臂的建模模型也存在着不确定性,对于不同的任务, 需要规划机械...
  • 测控技术与仪器的主要就业方向和领域发展方向有哪些?测控技术与仪器间隔三年更新下。前段时间看了下国家统计局的数据,感慨了下自己没选错行业。分行业门类看…求西方...简要介绍下机械发展史-爱问知识人热加工 铸...
  • 摘要:工程机械是支撑国民经济的基础性产业。工程机械主要应用于房地产开发、基础设施建设等领域。...我国工程机械企业全球竞争大幅提升,已跻身国际第一梯队 2021年5月11日,英国KHL发布了2021全..
  • 课程解读一、学习目标:1、知道使用任何机械都不省功。2、理解有用功、额外功和总功的概念,理解机械效率的含义。3、会测滑轮组的机械效率,知道影响滑轮组机械效率的因素。二、重点、难点:重点:有用功、额外功、...
  • 该技术已得到改进,因此可以更好地处理最小代价函数和收敛域中存在的非线性[32,33,34]。然而,尽管control law(控制律)是直接从像素强度获得的,但有关对象的信息仍然是必需的,并且图像处理算法的复杂性往往会影响...
  • 欧拉法拉格朗日法连杆质量,连杆质心位置矢量,连杆质心惯性矩阵(通过动力学参数识别获得)二、牛顿-欧拉法运动外推:向外迭代计算连杆的角速度、角加速度和线加速度外推:计算作用在连杆质心上的惯性和力矩力矩...
  • 随着信息化时代的到来,计算机已经在机械行业得到了广泛的应用,对机械行业带来了深刻的影响。计算机技术的应用不仅使机械制造实现了自动化,还推进了企业的可持续发展。目前计算机技术已经应用到了机械行业,从产品...
  • 机械cad实验报告总结

    2021-07-23 01:34:10
    机械cad实验报告总结篇一本实训的目的在于把握Auto CAD用于工程制图的基本操作,了解工程图纸绘制的格式和要求,工程图样绘制和阅读工程图样的原理和方法,培养形象思维能力,要求我们能够用Auto CAD绘制二维的工程...
  • 张建中摘 要:电子技术与计算机在各个领域中的应用,不仅为人们的工作、生活提供诸多便利和便捷,亦可以起到促进经济发展、推动...基于此,本文主要探讨了机械电子技术与计算机的融合发展。关键词:机械电子技术;...
  • 机械英语论文范文

    2021-06-23 10:04:58
    教学现状 在黑龙江八一农垦大学(以下简称“我校”)机械设计制造及其自动化专业课程体系中,专业英语课程的目的是使学生能够熟悉机械类常用的英语单词,能够掌握机械中常...2019-09-25一、教学现状及存在问题 1、学校...
  • 摘 要:随着科技的不断进步,计算机技术的发展进入到各个行业中,逐步的改变着传统的方式,在机械设计中也不例外,计算机技术逐步的使用到机械工程制图中,对机械行业产生较大的影响,逐步在制图的过程中取代了原本...
  • 关于机械电子工程与人工智能相关性分析关于机械电子工程与人工智能相关性分析摘要机械电子工程产业作为我国经济发展的重要产业,它的每一次重大性变革都会给人们的生产与生活带来重大影响。随着信息网络技术的快速...
  • 机械振动

    2021-07-17 00:45:57
    机械振动是指物体或质点在其平衡位置附近所作有规律的往复运动。振动的强弱用振动量来衡量,振动量可以是振动体的位移、速度或加速度。中文名机械振动类型往复运动主体物体或质点位置实例弹簧振子机械振动原理编辑...
  • 计算机辅助技术对机械设计制造的影响和促进论文【摘 要】随着我国计算机技术的进步,计算机辅助设计技术广泛应用到机械设计制造过程当中,一方面能够改进机械设计的效率,另一方面还能够提高设计的质量。本文介绍...
  • 导读:这篇机械效率杠杆论文范文为免费优秀学术论文范文,可用于相关写作参考。简单机械机械效率计算是中考必考点,分值为6—8分.题型涉及选择题、填空题、探究题、综合计算题.所以学会解答简单机械机械效率的计算...
  • 图太过麻烦,就不画出来了,还需动用想象。 那事实上到底是不是这样的呢?于是我就翻阅了许多资料来证实自己的想法,结果也是于想象中的几乎一样(除工艺制造)。 上图中,错落的齿轮,是不是就是用来处理不同位数...
  • 机械臂控制

    2021-10-30 21:39:09
    参考文章:grbl控制3轴机械臂 原理 ...原理就是通过末端坐标(X,Y)得到斜边长度,再根据余弦公式 算出角1和角2 2.既然二维机械臂逆解已经解决,那么转到三维环境,不过就是底座的转动角度而已。可以通...
  • 机械电子工程与人工智能有何关系作者:核心期刊目录查询 发布时间:2018-04-02在现代生活中,人工智能越来越多地出现在人们的周围。无论是用于娱乐的智能机器人还是智能城市提出的智能生活的智能家居,都揭示了人工...
  • 可以很直觉的设定最小二次型目标代价函数为 然后代价函数对theta求导为0,可以得到以下的推导 仔细观察最后的式子,可以发现这非常像末端空间通过转置的雅可比映射到扭矩空间。这里的末端 在此变成了末端位置差...
  • 对于市面上的一些机械臂安装自制的机械手,首先要得到机械手和机械臂的URDF文件。 我是通过SW2019直接导出 robot gripper describe file 在导出URDF文件的时候,1、注意旋转轴自己添加;2、word 坐标系和 end 坐标系...
  • 在学习机器人动力学相关内容时看到MATLAB论坛上一个有意思的仿真项目Impedance Control for a 2-Link Robot Arm - User-interactive,一个用...按空格键可以切换控制模式,此时拖拽鼠标用来给末端施加一个扰动,由...
  • 1机械制圈与计算机绘图教学现状机械制图是职业技术院校机械类专业的-fG重要的专业基础课,也是-H实践性较强的技术课程,因此,机械制图在传统的教学过程中是既难学又难教的学科,在以往的教学过程中机械制图传统的...
  • aubo机械臂控制方式

    2021-04-16 10:51:13
    操作aubo机械臂的方法主要有三种: 一、使用aubo官方提供的示教器来操作。示教操作的本质是,先演示一遍操作过程,过程中机械臂在必要的路径节点时记录机械臂各个joint的关节角的值。用这记录的一系列关节角的值...
  • 作为企业来说也应该分析复杂的市场形式,不断提高生产效率,提高机械产品的综合竞争,让机械设计得到更好地发展,本文就对自动化技术在机械设计制造中的应用进行具体的分析。关键词:自动化技术 机械设计制造 ...
  • 机械电子工程和人工智能关系探究机械电子工程和人工智能关系探究 摘要:人工智能技术伴随着机械电子工程的日益复杂,得到了长足的发展。本文分别就机械电子工程以及人工智能进行了详细的探讨。关键词:机械电子工程...
  • 机械电子工程专业介绍机械电子工程专业是机械工程与自动化的一种,俗称是机电一体化。机械电子工程是将机械学、电子学、信息技术、计算机技术、控制技术等有机融合而形成的一门综合性学科。也就是说把机械制造和电子...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 53,732
精华内容 21,492
关键字:

得到力机械