4_机械臂位姿求逆理论及代码计算

1、aubo arcs sdk poseInverse 使用例子

auto cur_pose = rpc_cli->getRobotInterface(robot_name)
                ->getRobotState()
                ->getTcpPose();


    // 2.288083 0.035207 1.550335
    auto pose_inv = rpc_cli->getMath()
                       ->poseInverse(cur_pose);


      //结果:0.118611 -0.576932 -0.273097 -3.082975 -0.852550 1.539719

de8312430f1fe69d5f776358ff5d0804.png

2、位姿逆变换

1>UR机械臂脚本手册

pose_inv(p_from)

获取姿态的反向。

参数

p_from:工具姿态(空间矢量)

返回值

使工具姿态变换反向(空间矢量)

2>《机器人学导论》变换算法-逆变换

  已知坐标系{B}相对于坐标系{A}——即908a52f758dab81b30ff673acd3036dc.png的值已知。有时为了得到{A}相对于{B}的描述,即7af60ca8f548a5ca956606a6ac4579fc.png,需要求该矩阵的逆。一个直接求逆的方式是将4×4齐次变换求逆。但是,这样做就不能充分利用变换的性质。容易看出比较简单的方法是利用变换的性质求逆。

   为了求424b3afef723c7f807da62ad2296c1f9.png,必须由9d6685c62b10c8ac94563c28872bc78d.png1e1e0ba7c9cfb643cb02789ff26fe68a.png求出dfd9f910e663bfb1c67a4dcedeb61696.png960b5e86772bcd110871ae4f9aca21da.png。首先,回顾一下关于旋转矩阵的结论:

4e525838b1206647cdba1f356965b07b.png

95f6183fd84a6a43d9cb75051615ca8e.png

之后利用2-13将2047f0d6b6ea63e4380adaf323e79332.png转变成在{B}中的描述:

0ce8c1eea06d162d631c86eaa5b3c136.png

式2-43的左边应为0,由此可得:

d65ec2bd22907b7e053158c2667e8faf.png

由2-42和2-44可写出:

287faaf132c32a9f7ce652dc1657d803.png

注意,使用符号:

59fcd6c7502d1577199e290f4bc89103.png

式2-45是求齐次逆变换一般且非常有用的方法。

3、eigen库求位姿的逆

直接代码:

Eigen::Vector3d euler_angle(2.288083, 0.035207, 1.550335);
    // 使用Eigen库将欧拉角转换为旋转矩阵
    Eigen::Matrix3d RBA;
    RBA = Eigen::AngleAxisd(euler_angle[2], Eigen::Vector3d::UnitZ()) *
          Eigen::AngleAxisd(euler_angle[1], Eigen::Vector3d::UnitY()) *
          Eigen::AngleAxisd(euler_angle[0], Eigen::Vector3d::UnitX());


    cout << "RBA is :\n" << RBA << std::endl;
    cout << "RBA 转置 is :\n" << RBA.transpose() << std::endl;


    Eigen::Matrix3d R = RBA.transpose();
    Eigen::Vector3d rpy = rotationMatrixToEulerAngles(R); // roll,pitch,yaw
    cout << "roll_2 pitch_2 yaw_2 = " << rpy[0] << " " << rpy[1]
         << " " << rpy[2] << endl;


    Eigen::MatrixXd current_pos(3,1);
    current_pos(0,0)= 0.582681;
    current_pos(1,0)= -0.121500;
    current_pos(2,0)= 0.259270;


    Eigen::MatrixXd inv_pos(3,1);
    Eigen::Matrix<double, 3, 1> m3x1;


    m3x1 = -R*current_pos;
        cout << "m3x1 is :\n" << m3x1 << std::endl;

旋转的逆是其转置矩阵。

Sdk 结果:0.118611 -0.576932 -0.273097 -3.082975 -0.852550 1.539719

结果如图:

7415c43ae72e75e31105c486f2462938.png

好了,本次笔记到此结束。

记徐先生到常州溧阳一游,超人结婚。假期前两天心情异常平静。

欢迎关注:

9fccf11c4a42fca07cad764152935a26.png

坚持探索!

  • 10
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值