主程序如下:

%利用不共线三点求解并联机构动系在定系中的位姿
global XA YA ZA XB YB ZB XC YC ZC %定义全局变量
A=100*(rand(15,9)*2-1);% 设定15组能够确定坐标原点的三个点,每一行代表一个组,每组各元素含义如下:
% XA YA ZA XB YB ZB XC YC ZC
T_P_E=[1 0 0 10;0 1 0 10;0 0 1 -50;0 0 0 1];%被测基准块坐标系在动系中的位姿
T_M_B=[1 0 0 20;0 1 0 20;0 0 1 -200;0 0 0 1];%被测基准块坐标系在动系中的位姿
P=zeros(15,3);R=cell(15,1);T_M_E=cell(15,1);T_B_P=cell(15,1);alfa=zeros(15,1);beta=zeros(15,1);gama=zeros(15,1);
Q=zeros(15,6);% 预设内存给各变量
for i=1:length(A)
XA=A(i,1); YA=A(i,2);ZA=A(i,3);XB=A(i,4);YB=A(i,5);ZB=A(i,6);XC=A(i,7);YC=A(i,8);ZC=A(i,9);%方程组参数赋值
fun=@myfun_2;
x0=[0;0;192];% 设定初值
opt=optimset('Display','off');%不显示输出
x=fsolve(fun,x0,opt); %调用函数
P(i,1)=x(1);%原点X向坐标赋值
P(i,2)=x(2);%原点Y向坐标赋值
P(i,3)=x(3);%原点Z向坐标赋值
R{i,1}=xuanzhuanjuzhen(A(i,:));%调用子程序,计算被测基准块在测量系中的旋转矩阵R
T_M_E{i,1}=[R{i,1} P(i,:)';0 0 0 1];%被测基准块在测量系中的齐次坐标变换矩阵
T_B_P{i,1}=(T_M_B)^-1*T_M_E{i,1}*(T_P_E)^-1;%动系在定系中的齐次坐标变换矩阵
alfa(i)=T_B_P{i,1}(2,3)/T_B_P{i,1}(3,3);;%等价旋转角alfa
beta(i)=atan(-T_B_P{i,1}(1,3)/sqrt(T_B_P{i,1}(1,1)^2+T_B_P{i,1}(1,2)^2));%等价旋转角beta
gama(i)=atan(T_B_P{i,1}(1,2)/T_B_P{i,1}(1,1));%等价旋转角gama
Q(i,:)=[T_B_P{i,1}(1,4) T_B_P{i,1}(2,4) T_B_P{i,1}(3,4) alfa(i) beta(i) gama(i)]%输出位姿
end

子程序myfun_2.m如下:

function f=myfun_2(x)
global XA YA ZA XB YB ZB XC YC ZC %定义全局变量
f1=(norm([XA-x(1);YA-x(2);ZA-x(3)]))^2+(norm([XB-x(1);YB-x(2);ZB-x(3)]))^2-(norm([XA-XB;YA-YB;ZA-ZB]))^2;
%勾股定理,原点与其中两点构成直角三角形
f2=(norm([XB-x(1);YB-x(2);ZB-x(3)]))^2+(norm([XC-x(1);YC-x(2);ZC-x(3)]))^2-(norm([XB-XC;YB-YC;ZB-ZC]))^2;
%勾股定理,原点与其中两点构成直角三角形
f3=norm([XA-x(1);YA-x(2);ZA-x(3)])+norm([XC-x(1);YC-x(2);ZC-x(3)])-norm([XA-XC;YA-YC;ZA-ZC]);
%三点一线时,中间一点与两端点距离和等于两端点之间距离
f=[f1;f2;f3];
end

子程序xuanzhuanjuzhen.m如下:

function R=xuanzhuanjuzhen(P)
%利用不共线三点确定被测基准块在测量系中的旋转矩阵,输入A为1*9向量,即[x1 y1 z1 x2 y2 z2 x3 y3 z3],输出R为3*3矩阵
%% 利用cross函数求三正交向量
x=[P(4)-P(1) P(5)-P(2)  P(6)-P(3)];%X轴向量,由第一点指向第二点
b=[P(7)-P(1) P(8)-P(2)  P(9)-P(3)];%其中一个边的向量,由第一点指向第三点
z=cross(b,x);%Z轴向量,同时垂直于x和b
y=cross(x,z);%Y轴向量,同时垂直于x和z
%% 修正向量主元正负,主元为正就取正,主元为负就取反,这样可确保被测系与测量系坐标轴方向大致相同
if x(1)>0x=x;
elsex=-x;
end
if y(2)>0y=y;
elsey=-y;
end
if z(3)>0z=z;
elsez=-z;
end
%% 向量归一化
norm_x = sqrt(x(1)^2+x(2)^2+x(3)^2);%X轴向量的模
ux=x(1)/norm_x;
uy=x(2)/norm_x;
uz=x(3)/norm_x;
norm_y = sqrt(y(1)^2+y(2)^2+y(3)^2);%Y轴向量的模
vx=y(1)/norm_y;
vy=y(2)/norm_y;
vz=y(3)/norm_y;
norm_z = sqrt(z(1)^2+z(2)^2+z(3)^2);%Z轴向量的模
wx=z(1)/norm_z;
wy=z(2)/norm_z;
wz=z(3)/norm_z;
%% 程序输出
R=[ux vx wx;uy vy wy;uz vz wz];

计算结果如下:

Q =

-34.5679   -4.4202  261.9103    0.5992   -0.2799   -0.5671
   79.5129  -11.7875  284.1264    0.8230   -0.2030   -0.9711
   -2.6967  -53.5858  218.0119    0.5333   -0.9370    0.2876
  -79.0990  -65.9837  335.3170    0.2237    0.0627    0.9961
   -8.3867   20.9725  176.6826    0.2235   -0.2997   -0.7220
 -157.2659  -68.1308  174.7557   -0.0933    0.7128    0.4830
   74.6091  -41.4194  325.6684    0.7410   -0.5180   -1.1615
   85.9828  -13.1062  133.2380    0.8691   -1.0387   -1.1595
   10.3721  -59.2937  194.8132   -2.6244   -0.3709   -0.4577
   29.6488  -44.8424  264.7108   -0.2685   -0.1591    1.5648
  -23.0435  -32.4045  211.8318   -0.4754    0.1041   -0.7578
   -1.5274   59.0978  200.3245    0.7501   -1.2967    0.1456
   69.3299  -46.1658  333.3478    0.7161   -1.1002    0.6028
  -13.9346  -62.7190  229.5088    0.2071   -0.5163    1.4465
  -69.3607  -85.2744  230.5428   -4.2681   -0.5090    1.4784

结果有待验证!!!

利用不共线三点求解并联机构动系在定系中的位姿相关推荐

  1. 不共线三点确定特征平面并求解平面系数

    1.基本原理 已知三点p1,p2,p3,求其平面方程,p1=[x1,y1,z1];p2=[x2,y2,z2];p3=[x3,y3,z3];那么求解下面矩阵q行列式就是了:q=[ones(4,1),[x ...

  2. 七参数坐标转换 matlab,利用三点法求解空间坐标系转换所需的七参数

    同一个物体的点云在不同坐标系中的坐标表示不同,有时候需要将其进行转换到同一坐标系中进行处理,经典的方法为七参数法(7-parameters),用matlab实现如下: %PS.好久不用matlab了, ...

  3. 在Simulink中利用simmechanics对三自由度的串联机械臂进行仿真

    在写本科的毕业论文的时候,需要对三自由度的机械臂进行一个仿真实验.在网上查阅相关资料,得知可以利用simmechanics 来进行仿真实验.关于simmechanics 这个的介绍就百度一下就可以,这 ...

  4. 利用线性筛算法框架求解因数个数以及因数和问题

    利用线性筛算法框架求解因数个数以及因数和问题 一 前言 关于线性筛算法,在前一篇文章 利用线性筛以及素数筛求某一范围内的所有素数中已经介绍过,若读者对线性筛算法不太了解或有所遗忘,可以点击链接查看.此 ...

  5. ZZULIOJ 1076: 三位数求解

    三位数求解 题目描述 已知xyz+yzz=n,其中n是一个正整数,x.y.z都是数字(0-9),编写一个程序求出x.y.z分别代表什么数字.如果无解,则输出"No Answer" ...

  6. html让圆点闪烁,利用jQ CSS3实现圆点闪烁背景动效

    特效描述:利用jQ CSS3实现 圆点闪烁 背景动效.利用jQ CSS3实现圆点闪烁背景动效 代码结构 1. 引入CSS 2. 引入JS 3. HTML代码 $(document).ready(fun ...

  7. 制作gif动图python_利用Python如何制作好玩的GIF动图详解

    前言 之前我们分享过用Python进行可视化的9种常见方式.其实我们还能让可视化图形逼格更高一些,今天就分享一下如何让可视化秀起来:用Python和matplotlib制作GIF图表. 假如电脑上没有 ...

  8. 短视频如何吸引用户?利用好“黄金三秒”很关键,教你三招

    短视频如何吸引用户?利用好"黄金三秒"很关键,教你三招 对于做短视频的小伙伴们来说,想要吸粉引流是肯定的,但是做短视频的人这么多,真正成功的人却占比不多.那么,如果我们想要成功,想 ...

  9. 利用CVX和gurobi这个求解器复现一篇混合整数线性规划问题时遇到的问题

    利用CVX和gurobi这个求解器复现一篇混合整数线性规划问题时遇到的问题 1.当出现从cvx 转换为double 时出现错误: ![](https://img-blog.csdnimg.cn/202 ...

  10. 利用反函数求导定理求解四个反函数的导数_20160409

    利用反函数求导定理求解四个反函数的导数

最新文章

  1. python哪一版好用-最好的 Python IDE,你们推荐使用哪一个?
  2. Spring中的InitializingBean的使用详解
  3. 复选框 全选 全不选 反选 实现
  4. 自动配置原理---SpringBoot
  5. 网络安全世界の迷惑认知图鉴
  6. GOF23种设计模式在Java中的应用(part 2)
  7. iOS开发之tableView时报错Assertion failure in -[UITableView _configureCellForDisplay:forIndexPath:]
  8. java——base64 加密和解密
  9. ORB-SLAM 解读(一)ORB关键点提取
  10. CuteFtpnbsp;Pro之站点导入导出
  11. hugo部署到Githut Pages
  12. 计算机开机黑屏风扇转,显卡开机黑屏风扇在转怎么办_电脑开机黑屏风扇一直转的原因是什么...
  13. 地级市面板数据(2000-2019)四:失业+进出口+工资+规上企业+房地产等(stata版)
  14. node.js解析word文档
  15. ESP8266的Web配网以及强制门户的实现(连接wifi自动打开网页)
  16. 吉米_王:浅谈深拷贝和浅拷贝异同点
  17. post请求302以及post请求变更为get请求的问题排查小记
  18. 用简单的lnmp实现的论坛搭建
  19. 获国际评级机构认可,波司登或为国产羽绒服树立参考“样本”
  20. 虹膜识别—DeepIrisNet2

热门文章

  1. idea社区版已经足够强大了
  2. 网上银行显示本服务器只显示,使用企业网上银行时常见报错提示有哪些,怎么解决?...
  3. 2022年信息安全工程师考试知识点:信息系统安全测评
  4. 微商模式的出路在哪里?
  5. 计算机论文答辩2分钟演讲稿,论文答辩演讲稿
  6. 字节测试开发面试题总结
  7. idea打包jar的多种方式
  8. 电脑和开发板如何串口连接
  9. Java线程状态与方法关系
  10. python日志:去掉noteexpress导出参考文献题录的空格