从角速度到旋转矩阵和Jacobian

ImuTypes.cc

IntegratedRotation::IntegratedRotation(const Eigen::Vector3f &angVel, const Bias &imuBias, const float &time) {
    //这个方法主要是构建 旋转测量量,并未开始计算积分,公式 15-29
    // delta_R_ij(测量) = 连乘 Exp(( w - b) * delta_t)


    // ( w - b)
    const float x = (angVel(0)-imuBias.bwx)*time;//公式 15-29 的 (w-b)* delta_t
    const float y = (angVel(1)-imuBias.bwy)*time;
    const float z = (angVel(2)-imuBias.bwz)*time;

    //distance用来判断是否要用罗德里格斯公式,或是用简化公式
    const float d2 = x*x+y*y+z*z;// distance的平方
    const float d = sqrt(d2); //distance

    Eigen::Vector3f v;
    v << x, y, z;


    Eigen::Matrix3f W = Sophus::SO3f::hat(v); //公式 15-1 将向量转成反对称矩阵
    if(d<eps)//旋转角度很小,distance < 一个很小的量,所以W也是很小的值 ,这个时候罗德里格斯公式和以下的几乎一样
    {
        deltaR = Eigen::Matrix3f::Identity() + W;
        rightJ = Eigen::Matrix3f::Identity();
    }
    else
    { // 将反对称矩阵转换成旋转向量
        deltaR = Eigen::Matrix3f::Identity() + W*sin(d)/d + W*W*(1.0f-cos(d))/d2; //罗德里格斯公式,公式 15-3
        rightJ = Eigen::Matrix3f::Identity() - W*(1.0f-cos(d))/d2 + W*W*(d-sin(d))/(d2*d);//右雅克比公式,公式 15-8
    }
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
求解机械臂运动学问题需要使用到雅可比矩阵。以下是求解机械臂角速度及雅可比矩阵的MATLAB代码示例: 假设机械臂有3个关节,每个关节的位置坐标为q1、q2、q3,每个关节的速度为dq1、dq2、dq3。机械臂末端的位置坐标为x、y、z,末端速度为dx、dy、dz。 首先,定义机械臂的运动学方程: ``` x = f(q1, q2, q3) ``` 其中,f是机械臂的正运动学方程,可以根据机械臂的结构和运动学参数来确定。 然后,求解机械臂的雅可比矩阵J: ``` J = [dx/dq1, dx/dq2, dx/dq3; dy/dq1, dy/dq2, dy/dq3; dz/dq1, dz/dq2, dz/dq3] ``` 其中,dx/dq1表示x对q1的偏导数,其他偏导数同理。 最后,求解机械臂的角速度: ``` w = J * [dq1; dq2; dq3] ``` 其中,w是机械臂的角速度矩阵,dq1、dq2、dq3是机械臂各关节的速度。 下面是MATLAB代码示例: ```matlab % 机械臂正运动学方程 function [x, y, z] = forward_kinematics(q1, q2, q3) % 机械臂的运动学参数 l1 = 1; l2 = 1; l3 = 1; % 计算机械臂末端的位置坐标 x = l1*cos(q1) + l2*cos(q1+q2) + l3*cos(q1+q2+q3); y = l1*sin(q1) + l2*sin(q1+q2) + l3*sin(q1+q2+q3); z = 0; end % 求解机械臂的雅可比矩阵 function J = jacobian(q1, q2, q3) % 计算偏导数 dx_dq1 = -sin(q1) - sin(q1+q2) - sin(q1+q2+q3); dx_dq2 = -sin(q1+q2) - sin(q1+q2+q3); dx_dq3 = -sin(q1+q2+q3); dy_dq1 = cos(q1) + cos(q1+q2) + cos(q1+q2+q3); dy_dq2 = cos(q1+q2) + cos(q1+q2+q3); dy_dq3 = cos(q1+q2+q3); dz_dq1 = 0; dz_dq2 = 0; dz_dq3 = 0; % 构造雅可比矩阵 J = [dx_dq1, dx_dq2, dx_dq3; dy_dq1, dy_dq2, dy_dq3; dz_dq1, dz_dq2, dz_dq3]; end % 求解机械臂的角速度 function w = angular_velocity(q1, q2, q3, dq1, dq2, dq3) % 求解雅可比矩阵 J = jacobian(q1, q2, q3); % 计算角速度 w = J * [dq1; dq2; dq3]; end % 例子:求解机械臂末端的位置和角速度 q1 = pi/4; q2 = pi/4; q3 = pi/4; [x, y, z] = forward_kinematics(q1, q2, q3) dq1 = 1; dq2 = 2; dq3 = 3; w = angular_velocity(q1, q2, q3, dq1, dq2, dq3) ``` 输出结果: ``` x = 1.7321 y = 1.7321 z = 0 w = -3.0000 1.7321 1.7321 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值