Matlab BP神经网络拟合四足机器人足端轨迹线积分方程用于足端轨迹规划

问题描述

一般情况下,在对四足机器人足端轨迹进行规划时分别对足端路径轨迹加速度进行规划,然后将规划好的加速度进行两次积分得到足端在该加速度条件下的位移,将位移与规划的足端路径的线积分长度进行匹配,从而建立起规划的路径与控制系统时间的映射关系。
以下对几个概念进行解释:
路径规划(Path Planning):路径规划不考虑时间因素,只考虑几何因素,是空间中的一系列点组成的一条曲线。
轨迹规划(Trajectory Planning):在路径规划的基础上加入时间因素,即对应系统给定的任意时间能够计算得到机器人足端对应在空间中的位置。
加速度规划:加速度规划为轨迹规划中的一种常用方法,其目的在于像规划好的路径中添加适当的时间信息,满足工作空间中运动的连续、弱冲击等要求。

以下为机器人足端轨迹规划中的对角步态路径规划与修正梯形加速度曲线规划:

足端路径规划

根据机器人腿部的几何关系,进行运动学分析,得到从关节坐标到足端工作空间的映射关系,然后遍历关节空间点得到足端的工作空间,并采用MATLAB中的拖拽点点击触发回调函数与移动触发回调函数进行动态拖动工作空间中的贝塞尔控制点,进行足端路径的设计。其源码如下所示

%% 1. 足端路径规划
% 并联五杆腿工作空间求解
% 足端F点坐标(x,y)
% 生成工作空间
clc; clear;
i = 1;
for Alpha1 = 0:0.01:pifor Alpha2 = 0:0.01:pi[x(i),y(i)] = forward_kinematic(Alpha1,Alpha2); % 运动学正解i = i + 1;endfigure(1);plot(x,y,'b.');hold on;i = 1;
end
title('工作空间');
xlabel('x/mm');  %x轴
ylabel('x/mm');%y轴
axis equal;
hold on;% 在工作空间中生成可拖动的贝塞尔曲线
n= 7;  %控制点个数
x=[-80 -130 -90 0 90 130 80];
y=[180 180 140 120 140 180 180];length_x = length(x);length_y = length(y);vertices = zeros(2, length_x);  %初始化坐标向量vertices(1, 1 : length_x) = x;vertices(2, 1 : length_y) = y;[x2,y2]=Bezier_n(vertices);hold on;h=plot(x2, y2, 'r','LineWidth',3);axis([-250 250 -250 250])l=line(x,y,'LineWidth',3);% 绘制控制线hl = handle(l);for i = numel(x):-1:1hp(i) = patch('xdata',x(i),'ydata',y(i),'LineWidth',4,...'linestyle','none','facecolor','none',...'marker','o','markerEdgecolor','g',...'buttonDownFcn',@drag,'userdata',i);endax = gca; idx = [];xl = get(ax,'xlim'); yl = get(ax,'ylim');
%% 拖拽点点击触发回调函数function drag(src,~)idx = get(src,'userdata');set(gcbf,'WindowButtonMotionFcn',@move,'WindowButtonUpFcn',@drop);end
%% 拖拽点移动触发回调函数function move(~,~)cp = get(ax,'currentPoint');xn = min(max(cp(1),xl(1)),xl(2));yn = min(max(cp(3),yl(1)),yl(2));set(hp(idx),'xdata',xn,'ydata',yn)hl.XData(idx) = xn;hl.YData(idx) = yn;end
%% 拖拽点取消点击触发回调函数function drop(src,~)delete(h);length_x = length(hl.XData());length_y = length(hl.YData());vertices = zeros(2, length_x);  %初始化,防止只记录最高次vertices(1, 1 : length_x) = hl.XData();vertices(2, 1 : length_y) = hl.YData();[x2,y2]=Bezier_n(vertices);hold on;h=plot(x2, y2, 'r','LineWidth',3);x=hl.XData();y=hl.YData();set(src,'WindowButtonMotionFcn',[],'WindowButtonUpFcn',[]);return ;end

运行上述代码后,生成如图2所示的工作空间与规划所得路径。

其中绿色点为六阶贝塞尔曲线的七个控制点,红色曲线为规划得到的足端路径的腾空相部分。

求曲线线积分

将规划所得到的六阶贝塞尔曲线,利用参数方程的线积分,求出整个足端路径的长度,以为之后的加速度规划和匹配做好准备。

%% 2. 求曲线长度
% 将上一步中设计好的曲线对应控制点记录下来
% 七个控制点对应六阶贝塞尔曲线
clc; clear;
syms t;
x=[-80 -130 -90 0 90 130 80];  % 控制点
y=[180 180 140 120 140 180 180];
% 六阶贝塞尔曲线参数方程
fx(t) = x(1)*(1-t)^6 + 6*x(2)*(1-t)^5*t + 15*x(3)*(1-t)^4*t^2 + 20*x(4)*(1-t)^3*t^3 + 15*x(5)*(1-t)^2*t^4 + 6*x(6)*(1-t)*t^5 + x(7)*t^6;
fx(t) = simplify(fx(t));
fy(t) = y(1)*(1-t)^6 + 6*y(2)*(1-t)^5*t + 15*y(3)*(1-t)^4*t^2 + 20*y(4)*(1-t)^3*t^3 + 15*y(5)*(1-t)^2*t^4 + 6*y(6)*(1-t)*t^5 + y(7)*t^6;
fy(t) = simplify(fy(t));
dfx(t)=diff(fx(t));
dfy(t)=diff(fy(t));
flengt(t)=sqrt(dfy(t)^2+dfx(t)^2);
% 求数值解
i=1;
for t=0:0.01:1dl(i)=flengt(t);dt(i)=t;i=i+1;
end
l=vpa(trapz(dt,dl),10); %数值积分求得曲线长度为255.4717

BP神经网络求线积分函数反函数

由于加速度规划后经过两次积分得到的是系统时间t与位移之间的对应关系,而位移与路径曲线进行匹配后需要知道该位移下对应的路径曲线参数t的值以求出足端在工作空间中的直角坐标。因此需要知道线积分长度l与曲线时间参数t之间的函数关系。即上述时间-线积分长度函数的反函数。
根据上述线积分的参数方程,求出每一个参数下对应的线积分的长度,然后通过神经网络工具箱,使用BP神经网络得到每一个时间t对应下的曲线长度。

%% 3. 根据曲线长度求出当前的t
clc; clear;
k=1;
i=1;
for m=0:0.001:1for n=0:0.001:mdl(k)=CalIntFunc(n);dt(k)=n;k=k+1;endl(i)=trapz(dt,dl); t(i)=m;i=i+1;k=1;
end
plot(t,l, 'b','LineWidth',3);
grid on;
hold on;

下图为时间t与线积分长度l的函数图像

构建BP神经网络对长度和时间参数t进行拟合。神经网络采用双层BP神经网络,隐藏层有10个神经元,由于时间参数t均为正数所以采用logsig传递函数。学习函数选用traingdx函数。具体的构造代码为

% BP神经网络拟合
net=newff(minmax(l),[10,1],{'logsig' 'logsig'},'traingdx');
net.LW{2,1}= net.LW{2,1}*0.01;        %  调整输出层权值,加速收敛
net.b{2}= net.b{2}*0.01;        % 调整输出层权值t1=sim(net,l);
plot(l,t,l,t1,'--');
title('未训练的网络输出结果');
xlabel('长度');
ylabel('仿真输出-- 原函数 -');
net.performFcn='sse';
net.trainParam.show= 20;                       % 结果显示间隔
net.trainParam.epochs = 1000000;    % 训练次数
net.trainParam.goal =0.01;  % 训练精度设置
net.trainParam.mc=0.95;                         % 动量因子
net= train(net,l,t);        % 训练·
t2 = sim(net,l);
plot(l,t,l,t1,l,t2);
title('训练后的网络输出结果');
xlabel('长度');
ylabel('仿真输出');

所设计的神经网络的结构如图所示

对设计好的神经网络进行多次训练最终得到训练结果

训练过程中不同误差下的拟合效果图如下所示。
误差0.5输出结果

误差0.1输出结果

误差0.02输出结果

误差0.005输出结果

由上图不难发现,随着训练次数的增加,神经网络对曲线的拟合效果越来越好,在误差为0.005时基本已经能够完全拟合目标曲线。

Matlab BP神经网络拟合四足机器人足端轨迹线积分方程反函数用于足端轨迹规划相关推荐

  1. 【故障诊断分析】基于matlab BP神经网络三相逆变器故障诊断研究【含Matlab源码 1736期】

    一.BP神经网络三相逆变器故障诊断简介 针对三相桥式逆变电路为研究对象,建立了仿真模型,并对逆变器主电路开关器件的开路故障进行仿 真,提出了基于BP神经网络的故障诊断方法,确定了网络的结构和参数,并以 ...

  2. 【电力负荷预测】基于matlab BP神经网络电力负荷预测【含Matlab源码 278期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源: [电力负荷预测]基于matlab BP神经网络电力负荷预测[含Matlab源码 278期] 获取代码方式2: 付费专栏Matlab智能算 ...

  3. 【停车位预测】基于matlab BP神经网络停车位预测【含Matlab源码 765期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[停车位预测]基于matlab BP神经网络停车位预测[含Matlab源码 765期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方 ...

  4. (三)【数学建模】Matlab BP神经网络

    [数学建模] 文章目录 Matlab BP神经网络 Matlab BP神经网络 归一化算法: (0,1): y=(x−min)/(max−min)y=(x-min)/(max-min)y=(x−min ...

  5. 基于matlab BP神经网络的手写数字识别

    摘要 本文实现了基于MATLAB关于神经网络的手写数字识别算法的设计过程,采用神经网络中反向传播神经网络(即BP神经网络)对手写数字的识别,由MATLAB对图片进行读入.灰度化以及二值化等处理,通过神 ...

  6. matlab bp神经网络的诊断,基于-BP神经网络的故障诊断方法.doc

    <智能控制基础> 研究生课程设计报告 题 目 基于BP神经网络的故障诊断方法 学 院 机械与汽车工程学院 专业班级 车辆工程 学 号 221601852020 学生姓名 李跃轩 指导教师 ...

  7. 【图像重建】基于matlab BP神经网络双基地SAR成像图像重建【含Matlab源码 1950期】

    ⛄一.BP神经网络成像图像重建简介 1 BP神经网络的图像重建算法原理 在目前基于神经网络的图像重建算法中,网络的类型一般采用BP神经网络.BP网络是一种多层前馈神经网络,它采用后向传播算法,亦称BP ...

  8. 【情感识别】基于matlab BP神经网络语音情感识别【含Matlab源码 349期】

    一.BP神经网络语音情感识别简介 0 引言 随着科技的迅速发展, 人机交互显得尤为重要.语音是语言的载体, 是人与人之间交流的重要媒介.相较于其它交流方式而言, 语音交流更加直接.便捷.近年来, 随着 ...

  9. matlab 预测值一样,matlab BP神经网络建造如下,预测时,预测值反归一化报错,求大神指教!!!!!...

    data=xlsread('Book1.xlsx','sheet1');%读取表格中的数据 input=data(:,1:3);%将前三列作为输入 output=data(:,4:6);%后三列作为输 ...

最新文章

  1. WebGIS中基于AGS的画圆查询简析以及通过Polygon来构造圆的算法
  2. CentOS7 扩容 / 目录
  3. hdu1251 hash或者字典树
  4. WordPress的cookie处理
  5. [Swift]LeetCode826. 安排工作以达到最大收益 | Most Profit Assigning Work
  6. 【数据结构与算法】字符串匹配 AC自动机
  7. 《软件建模与设计: UML、用例、模式和软件体系结构》一一3.2 设计验证和确认...
  8. 软工小学期实践PART ONE
  9. TypeError: create_target_machine() got an unexpected keyword argument ‘jitdebug‘解决方案
  10. du命令和df命令的区别
  11. Apache Oozie Installation
  12. Ajax专题:异步交互局部刷新初步
  13. java设计模式_抽象工厂
  14. VB6.0处理WPS个人免费版代码
  15. 使用ADB启动手机APP
  16. RGB图转为灰度图的方法
  17. C++实现积分函数(第一章)
  18. 【GameObject 类】 (四)SetActive 显示 / 隐藏游戏对象
  19. 小王的研发日记-自动对焦(硬件与计算机通信)
  20. appinventor2在window上搭建步骤

热门文章

  1. 二进制文件的读写详细剖析
  2. 卷积码译码:硬判决维特比(Viterbi)译码
  3. Vue.js——60分钟组件快速入门(下篇)
  4. 车牌识别SDK,解决多行业全方位方案
  5. 百度辟谣:秋实为广告产品并非手机操作系统
  6. java通过与4g模块DTU通信控制串口设备PLC解决方案
  7. 锋利的戴德金“刀”并没有耗尽直线上所有的几何点
  8. 2023年如何在知识管理中构建成功的知识图谱/知识库?
  9. SVM核函数RBF的参数
  10. 很多时候我们都是因为太在乎别人的想法而受苦