Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 工程数学软件 > MATLAB论坛
MATLAB论坛 一切MATLAB相关问题在此讨论。
回复
 
主题工具 显示模式
旧 2009-05-05, 17:14   #1
fxgl
初级会员
 
注册日期: 2009-05-05
年龄: 38
帖子: 5
声望力: 0
fxgl 正向着好的方向发展
默认 请求哪位大侠帮忙看一下这个程序哪儿错了?急啊!

下面是M文件,是运动学反解程序
function [q2,d1,q50,q31,q32,q3,q41,q42,q4]=funrobota

(n1,n2,n3,o1,o2,o3,m1,m2,m3,a1,p1,p2,p3,d0,d2,d3,d4)
%function [q2,d1,q50,q31,q32,q3]=funrobota

(n1,n2,n3,o1,o2,o3,m1,m2,m3,a1,p1,p2,p3,d0,d2,d3,d4)
%求解角度q2
[q21]=solve('m1+sin(q21)=0');
q21=eval(q21);
if -pi/2<q21<pi/2 & abs(m3+cos(q21))<0.05 %设定精度
q2=q21;
end

%求解距离d1
if abs(q2-pi/2)<0.05
d11=p3+d4;
elseif abs(q2+pi/2)<0.05
d11=p3-d4;
else
d11=p3-tan(q2)*(a1-p1);
end
if d11<d0
d1=d11;%判断移动距离是否超过有效行程
end
%为求解角度q3先求解角度q5
[q51]=solve('cos(q2)*o1-sin(q2)*o3+sin(q51)=0','q51');
q51=eval(q51);
q52=pi-q51;
%q53=q51+2*pi;
%q54=q52-2*pi;
if -3*pi/2<q51<5*pi/2 & abs(o2+cos(q51))<0.05
q50=q51;
%q501=q53;
elseif -3*pi/2<q52<5*pi/2 & abs(o2+cos(q52))<0.05
q50=q52;
%q501=q54;
else
return
end
%求解角度q3
%[q31]=solve('p2+d2+sin(q50)*d4+sin(q31)*d3=0');
%q31=eval(q31);
q31=-asin((p2+d2+sin(q50)*d4)/d3);
q32=pi-q31;
if -pi/2<q31<3*pi/2 & abs(cos(q2)*cos(q50)*d4+cos(q2)

*cos(q31)*d3+a1-p1)<20 %距离值,误差可以相对较大
q3=q31;
elseif -pi/2<q32<1.5*pi & abs(cos(q2)*cos(q50)*d4+cos

(q2)*cos(q32)*d3+a1-p1)<20
q3=q32;
else
return
end
%q3=q3*180/pi;
%q3=90-q3;
%求解角度q4
q41=acos(cos(q3)*(cos(q2)*n1-sin(q2)*n3)-sin(q3)*n2);
q42=-q41;
%if -pi<q41<pi & abs(cos(q3)*(cos(q2)*p1-sin(q2)*(p3-

d1)-cos(q2)*a1)-sin(q3)*(p2+d2)-cos(q41)*d4-d3)<5
if -pi<q41<pi & abs(sin(q41)+sin(q3)*(cos(q2)*n1-sin

(q2)*n3)+cos(q3)*n2)<0.05
q4=q41;
%elseif -pi<q41<pi & abs(cos(q3)*(cos(q2)*p1-sin(q2)*

(p3-d1)-cos(q2)*a1)-sin(q3)*(p2+d2)-cos(q41)*d4-d3)<5
elseif -pi<q42<pi & abs(sin(q42)+sin(q3)*(cos(q2)*n1-

sin(q2)*n3)+cos(q3)*n2)<0.05
q4=q42;
else
return
end
q2=(q2*180/pi)+90;
q3=90-(q3*180/pi);
q4=-q4*180/pi;
这个是求反解的程序,因为不是六自由度的,所以不能用自带的

“ikine"函数直接求解。但是在把已知的参数替换后”

[q2,d1,q50,q31,q32,q3,q41,q42,q4]=funrobota(0.866,-

0.5,0,0.5,0.866,0,0,0,1,145,10,20,30,450,374.5,260,250)


结果出现错误:“??? Undefined function or variable "q2".

Error in ==> funrobota at 11
if abs(q2-pi/2)<0.05”
急求哪位大侠帮我看一下,该怎么改呢
fxgl 当前离线   回复时引用此帖
旧 2009-05-05, 18:49   #2
yhcode
高级会员
 
注册日期: 2008-05-13
年龄: 44
帖子: 232
声望力: 21
yhcode 正向着好的方向发展
默认 回复: 请求哪位大侠帮忙看一下这个程序哪儿错了?急啊!

程序前面几行,如下
if -pi/2<q21<pi/2 & abs(m3+cos(q21))<0.05 %设定精度
q2=q21;
end

%求解距离d1
if abs(q2-pi/2)<0.05
在引用q2之前,通过一个条件判别来对q2赋值,你想想,有没有不满足条件的情况,如果这个条件不满足,就出现了引用之前没有赋值的错误了.你把程序单步运行下,看看那里出错了,我认为是:你这个程序如果所需参数肯定要满足这个条件,那就是你的输入参数有问题;否则的话最好else一下,对q2进行赋值.
__________________
工科'985'博士,(图像处理、分析及理解;模式识别;运动估计;数据分析等)定做程序、算法实现--qq:752105755
yhcode 当前离线   回复时引用此帖
旧 2009-05-07, 17:19   #3
fxgl
初级会员
 
注册日期: 2009-05-05
年龄: 38
帖子: 5
声望力: 0
fxgl 正向着好的方向发展
默认 回复: 请求哪位大侠帮忙看一下这个程序哪儿错了?急啊!

引用:
作者: yhcode 查看帖子
程序前面几行,如下
if -pi/2<q21<pi/2 & abs(m3+cos(q21))<0.05 %设定精度
q2=q21;
end

%求解距离d1
if abs(q2-pi/2)<0.05
在引用q2之前,通过一个条件判别来对q2赋值,你想想,有没有不满足条件的情况,如果这个条件不满足,就出现了引用之前没有赋值的错误了.你把程序单步运行下,看看那里出错了,我认为是:你这个程序如果所需参数肯定要满足这个条件,那就是你的输入参数有问题;否则的话最好else一下,对q2进行赋值.
谢谢老师的指导,可是还是不知怎么改
这是模型的参数:
L1=link([0 0 0 450 1]);%关节1参数
L2=link([-pi/2 145 -pi/2 -374.5 0]);%关节2参数
L3=link([-pi/2 0 0 0 0]);%关节3参数
L4=link([0 260 0 0 0]);%关节4参数
L5=link([0 250 0 0 0]);%关节5参数
r=robot({L1 L2 L3 L4 L5});%建立机器人模型
fxgl 当前离线   回复时引用此帖
旧 2009-05-09, 16:20   #4
fxgl
初级会员
 
注册日期: 2009-05-05
年龄: 38
帖子: 5
声望力: 0
fxgl 正向着好的方向发展
默认 回复: 请求哪位大侠帮忙看一下这个程序哪儿错了?急啊!

谁能帮我调试好这个程序啊?
fxgl 当前离线   回复时引用此帖
旧 2009-05-10, 13:57   #5
silas_xue
高级会员
 
注册日期: 2008-11-01
年龄: 39
帖子: 406
声望力: 26
silas_xue 是一个将要出名的人
默认 回复: 请求哪位大侠帮忙看一下这个程序哪儿错了?急啊!

lz 我发给你了一条"悄悄话"
请注意查收 谢谢
silas_xue 当前离线   回复时引用此帖
旧 2009-05-20, 22:23   #6
fxgl
初级会员
 
注册日期: 2009-05-05
年龄: 38
帖子: 5
声望力: 0
fxgl 正向着好的方向发展
默认 回复: 请求哪位大侠帮忙看一下这个程序哪儿错了?急啊!

引用:
作者: silas_xue 查看帖子
lz 我发给你了一条"悄悄话"
请注意查收 谢谢
对不起!这几天一直忙着去驾校没及时关注!我把文件发到您邮箱,请帮忙调试一下,谢谢!
fxgl 当前离线   回复时引用此帖
回复

主题工具
显示模式

发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码



所有时间均为北京时间。现在的时间是 19:38


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.