二维平面目标点跟踪

一.移动机器人运动学

        这部分内容非常简单,而且参考书籍在西交大出版社有中文版,翻译更加没有意义。详细内容参见《Introduction to Autonomous Mobile Robots》第3章。下面针对具体的问题做一些分析。

二.matlab验证

       假定当前环境不存在障碍,给定起始点和终止点,计算应给给移动机器人多大的速度和角速度使其顺利从起始点运动到终止点,其中起始点和终止点中包含位姿信息。

       matlab源码如下:

clc; clear;

StartPoint=[180,60,pi/2]'; %[xl,yl,theta]
GoalPoint=[0,0,0]';
StartPoint(3)=atan2(GoalPoint(2)-StartPoint(2),GoalPoint(1)-StartPoint(1));
K=[0.3,0.13,0.13];  %gain of rho,alpha and beta

T=100;
State=zeros(T,3);
PosOrient=zeros(T,3);
PosOrient(1,:)=StartPoint;

for t=1:T-1
    deltaX=GoalPoint(1)-PosOrient(t,1);
    deltaY=GoalPoint(2)-PosOrient(t,2);

    rho=sqrt(deltaX^2+deltaY^2);
    alpha=-PosOrient(t,3)+atan2(deltaY,deltaX);
    beta=-PosOrient(t,3)-alpha;
    
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    if alpha>pi
        alpha=alpha-2*pi;
    else if alpha<-pi
            alpha=alpha+2*pi;
       end
    end
    if beta>pi
        beta=beta-2*pi;
    else if beta<-pi
            beta=beta+2*pi;
        end
    end
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    if alpha>-pi/2 && alpha<=pi/2
        v=K(1)*rho;
    else
        v=-K(1)*rho;
    end
    w=K(2)*alpha+K(3)*beta;
    
    deltaRho=-v*cos(alpha);
    deltaAlpha=v*sin(alpha)/rho-w;
    deltaBeta=-v*sin(alpha)/rho;
    
    rho=rho+deltaRho;
    alpha=alpha+deltaAlpha;
    beta=beta+deltaBeta;
    
    State(t,1)=rho;
    State(t,2)=alpha*180/pi;
    State(t,3)=beta*180/pi;
    
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
    %forward kinematics
    PosOrient(t+1,1)=PosOrient(t,1)+v*cos(PosOrient(t,3));
    PosOrient(t+1,2)=PosOrient(t,2)+v*sin(PosOrient(t,3));
    PosOrient(t+1,3)=PosOrient(t,3)+w; 
    
    if PosOrient(t+1,3)>pi
        PosOrient(t+1,3)=PosOrient(t+1,3)-2*pi;
    else if PosOrient(t+1,3)<-pi
            PosOrient(t+1,3)=PosOrient(t+1,3)+2*pi;
        end
    end
end

figure;
set(gcf,'Color','white');
t=0:T-1;
subplot(2,1,1);
xlabel('time'); ylabel('state');
plot(t,PosOrient(t+1,1),t,PosOrient(t+1,2),t,PosOrient(t+1,3)*180/pi,'r-');
legend('x','y','theta');
grid on;
subplot(2,1,2);
xlabel('x'); ylabel('y');
plot(PosOrient(t+1,1),PosOrient(t+1,2));
plot(PosOrient(t+1,1),PosOrient(t+1,2),'o-');
legend('route');
grid on;

PosOrient(:,3)=PosOrient(:,3)*180/pi;

       matlab仿真的结果如下:



       图中的曲线通过调整rho,alpha和beta参数可以使得机器人能够较好地跟踪至目标位置。由于alpha和beta的方向相反,所以计算角速度w的时候两个分量会出现相互抵消的现象。如果K(1)过小,接近目标点的速度会很慢;如果K(2)过大,前进时会左右摇摆得很厉害;如果K(3)过小,则向全局坐标系x轴接近的速度会降低。问题是在参数那儿,经过调试发现K(2)和K(3)的大小接近时效果相对较好。角速度w设置为0时,轨迹为非常平稳的直线,但是目标点的位姿一直不变。说明在机器人前进过程中,实时调整姿态会影响到从目标点到终止点的轨迹,越是希望在过程中调整到准确的位姿,得到的轨迹越不理想。当然这种控制方式的局限性是它是基于线性系统的比例控制,如果希望实时地调整位姿,可以使用曲线拟合的方式效果更显而易见。

       注意:正向运动学的计算是基于全局坐标系的原点为(0,0,0)的情况,否则需要额外的坐标系转换。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值