8_机械臂工作台坐标系标定及验证

857d58e690b3274d9ee2b2e52a6d8886.jpeg

1、机械臂实际数据

AUBO 机械臂xOxy方式标定用户坐标系:

O:

 a7eff84a2ad55751724756efb1d19b93.png

X轴正半轴一点:

77e9c99b65d446462a8f08d0edf4edc0.png

XOY象限任意一点(还是有一些要求的):

ba7d26e047c1fc6336bb607ac9d3e030.png    

一些坐标点的验证:

1596a52e84207a82c5063795e9f95c66.png

aad4909e582da3e5047cb5095eadebc7.png

c5a51c3d45a11d0cd01e67d5f98b9c81.png

2、如何根据上述3点,计算work1坐标系与base坐标系的关系?

最开始在网上没找到相关的资料(论资料搜索对程序员的重要性),唯一一篇有参考价值的还需要充会员,最后不得不冲了会员,太想知道了。之后就有了向量叉积那篇笔记。有了前两篇笔记的铺垫,本次笔记就纯是将思路代码化,是个体力活,要注意的是坐标系之间的相对关系,那块调了好一会儿。

部分代码(通过work1坐标系X轴向量和work1 XOY象限向量的叉积求work1坐标系的Z轴向量,并单位化):    

//po  origin          (-0.163555, 0.396348, 0.071506, -90.148331, 45.409718, -90.103142)
//px  x-axis positive (-0.326204, 0.396016, 0.071179, -90.148407, 45.409279, -90.103485)
//pxy first quadrant  (-0.324761, 0.231210, 0.071491, -90.148285, 45.409794, -90.103714)
    //px-po,  px向量减去po向量,基于base坐标系
    double user_px_x = -0.326204+0.163555;
    double user_px_y = 0.396016-0.396348;
    double user_px_z = 0.071179-0.071506;


    //pxy-po, pxy向量减去po向量,基于base坐标系
    double user_pxy_x = -0.324761+0.163555;
    double user_pxy_y = 0.231210-0.396348;
    double user_pxy_z = 0.071491-0.071506;


    double user_px_modulus = sqrt(user_px_x*user_px_x +
                                  user_px_y*user_px_y +
                                  user_px_z*user_px_z);


    double user_pxy_modulus = sqrt(user_pxy_x*user_pxy_x +
                                  user_pxy_y*user_pxy_y +
                                  user_pxy_z*user_pxy_z);     


    //px normal,  px向量单位化
    double user_px_x_mormal = user_px_x/user_px_modulus;
    double user_px_y_mormal = user_px_y/user_px_modulus;
    double user_px_z_mormal = user_px_z/user_px_modulus;
    //pxy normal,  pxy向量单位化
    double user_pxy_x_mormal = user_pxy_x/user_pxy_modulus;
    double user_pxy_y_mormal = user_pxy_y/user_pxy_modulus;
    double user_pxy_z_mormal = user_pxy_z/user_pxy_modulus;


    Eigen::Vector3d user_px_axis_normal(user_px_x_mormal, user_px_y_mormal, user_px_z_mormal);
    Eigen::Vector3d user_pxy_axis_normal(user_pxy_x_mormal, user_pxy_y_mormal, user_pxy_z_mormal);    
          
    //a = {ax,ay,az), b = (bx,by,bz),  根据px和pxy向量的叉积求pz
    //CrossProduct -->> poz axb =(aybz -azby,azbx -axbz,axby -aybx}
    double user_pz_x = user_px_y_mormal*user_pxy_z_mormal - user_px_z_mormal*user_pxy_y_mormal;
    double user_pz_y = user_px_z_mormal*user_pxy_x_mormal - user_px_x_mormal*user_pxy_z_mormal;
    double user_pz_z = user_px_x_mormal*user_pxy_y_mormal - user_px_y_mormal*user_pxy_x_mormal;


    double user_pz_modulus = sqrt(user_pz_x*user_pz_x+
                                  user_pz_y*user_pz_y +
                                  user_pz_z*user_pz_z);


    //pz 向量单位化
    double user_pz_x_normal = user_pz_x/user_pz_modulus;
    double user_pz_y_normal = user_pz_y/user_pz_modulus;
    double user_pz_z_normal = user_pz_z/user_pz_modulus;


根据px和pz可求py,并将其单位化。
工作台坐标系相对于base坐标系的旋转矩阵:
    R << user_px_x_mormal, user_py_x_normal, user_pz_x_normal,
         user_px_y_mormal, user_py_y_normal, user_pz_y_normal,
         user_px_z_mormal, user_py_z_normal, user_pz_z_normal;

根据《7_机械臂工作台坐标系理论_一般坐标系的映射_2》笔记,构建齐次矩阵,代码如下:    

Eigen::MatrixXd pos(3,1);  
    pos(0,0) = -0.163555;  
    pos(1,0) = 0.396348;  
    pos(2,0) = 0.071506;  


    Eigen::MatrixXd homogeneous(1,4);    
    homogeneous(0,0)=0.0f;  
    homogeneous(0,1)=0.0f;  
    homogeneous(0,2)=0.0f;  
    homogeneous(0,3)=1.0f;  


    Eigen::MatrixXd posX(3,1);  
    posX(0,0) = -0.326204;  
    posX(1,0) = 0.396016;  
    posX(2,0) = 0.071179;  


    Eigen::MatrixXd posTest(3,1);  
    posTest(0,0) = 0.214300;  
    posTest(1,0) = -0.138937;  
    posTest(2,0) = 0.200473;  


    Eigen::Matrix     <double,            </double,3, 4> m3x4;    
    Eigen::Matrix     <double,            </double,4, 4> m4x4;    


    m3x4 << R, pos;  
    m4x4 << m3x4, homogeneous;

3、验证结果  

计算base下的原点pos在工作台坐标系下的坐标:    

根据红框欧拉角的姿态,发现工作台坐标系相对于base坐标系X轴和Y轴相对偏移很小(从标定点坐标也可以看出,第二个点相对第一个点只在base的X轴上进行了移动),Z轴方向相反。  

4151c2dac5816d09df4b3192331e283b.png 

-0.400319, -0.121499, 0.547598;的验证:  

5964166342e2e1f489249d32b035e277.png  

欢迎关注:  

43a16249a413467c67a44a43d1d30a85.png

公众号后台留言“用户坐标系标定” 可获取源码工程。  

其他相关笔记:

7_机械臂工作台坐标系理论_一般坐标系的映射_2

6_工作台坐标系理论_向量叉积_1

5_机械臂工具位姿计算理论及代码实现验证

4_机械臂坐标系简介

3_机械臂位姿变换计算过程代码

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

1_机械臂位姿变换计算过程_1

1_机械臂姿态表示旋转矩阵与XYZ固定角坐标系_ZYX欧拉角的公式转换&3D相机应用例子

             

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值