利用神经网络解决机器人动力学问题

利用神经网络解决机器人动力学问题

总览

提出了利用神经网络解决机器人动力学问题的新观念。主要介绍了神经网络相关技术背景,BP神经网络的基本原理。在Matlab中建立了一个6自由度的机器人,采用BP神经网络和径向神经网络,进行了对机器人动力学预测的仿真验证。结果表明神经网络能有效地解决该问题。

背景介绍

在开发机器人牵引技术过程中,需要对机器人进行动力学建模。而机器人动力学建模通常由牛顿欧拉法和牛顿拉格朗日法,两种方法推导过程都较为复杂,且计算量随着机器人自由度的增加而迅速增加,计算结果容易出错。我受到人工智能的启发,灵机一动,想到可以尝试采用神经网络的方法来解决该问题,让机器人自己学会对动力学的建模。

神经网络是一个让人感觉很妙不可言的人工智能技术。在机器学习领域,人工神经网络的计算模型灵感来自动物的中枢神经系统,它是对人脑的抽象简化和模拟,它是根植于神经科学,数学,统计学,物理学,计算机科学和工程学的一门技术。它可以根据大量的输入和输出历史数据,可以对一件事物,一个过程,一个函数进行预测估计。神经网络理论可应用于模式识别、自动控制、信号处理,图像处理,数据挖掘,医疗,经济金融,气象等领域。

 技术原理

BP  神经网络结构

我采用了BP神经网络与径向神经网络两种典型的神经网络结构,其中70%的实际应用均是采用BP神经网络结构,故我将重点介绍其原理。


图1

 

图1显示了一个具有R个输入,S个logsig神经元构成的单层BP神经网络,其中,左边的是详细结构图。右边的是以向量形式表示的结构图。

BP算法

BP算法沿着沿误差减小最快的方向,也就是梯度反向改变权值和偏差。

Xk代表当前权值和偏差,Xk+1代表迭代的下一次权值与偏差,xk+1代表下一次权值与偏差,gk为当前误差函数的梯度,ak代表学习速率。推导过程如下:


  如果你不想知道推导过程,那么只需要看上面中的两个所以(有三个点的地方)的内容,就可以知道所需要的误差量是什么样的了;如果想要想弄明白的话,或许需要自己在稿子上画画看推导推导。

Matlab仿真

仿真思路

1.首先采用robotictoolbox ,建立了一个SIASUN 六自由度机器人。包含了DH参数,杆件质量,质心矢量,转动惯量,摩擦系数等动力学参数信息。


2.随机生成2200个机器人姿态,变量名为PoseInput(6X2200的矩阵)。

3.采用roobtic toolbox里的动力学计算函数 rne 计算出对应姿态下的各个关节的力矩。

4.采用matlab神经网络工具箱,建立BP神经网络,设定输入为6个关节角度,9个神经节点数,输出为6个关节对应的力矩值,1000次的迭代,学习速率0.1,期望目标,误差小于0.001。神经网络的隐层函数与输出函数均为默认。

5.取前2000组数据作为训练,取后200组作为预测。

预测结果:


可以看到神经网络经过184次迭代,就达到了目标6次验证均符合要求。下面画出曲线图进行分析。


 

 

从上图中可知,对于一个典型的6DOF机器人,其主要的重力矩由2,3关节承受。

所以2,3关节的误差也是最大的。而对于第二个关节,200组数据中仅有3个数据的偏差在1.5牛左右,大部分均在0.5牛内。而这个结果是完全满足用于牵引示教的用途的。其他关节的误差都非常小。

径向神经网络

径向神经元的输入是权值向量和输入向量之间的向量距离与偏差b的乘积。||dist||表示权值与输入向量的点积。


经过1332次的训练,才达到目标值0.05.而BP网络才经过182次迭代就达到0.025的均方差。并且从下图看到误差出现了较大的波动。


结论:从目前仿真的结果来看,采用BP神经网络的方式结果要优于径向神经网络的结果。

 

BP神经网络C语言实现


通过仿真,证明了BP神经网络能够非常好的解决机器人动力学问题。但是唯一遗憾的是Mathworks公司考虑到版权问题,Matlab的神经网络工具箱并不支持直接编译成C语言。

故想要真正实现就需要根据BP神经网络原理,自己编程写出神经神经网络。


在这里,先不考虑具体函数的执行细节,从大体上来介绍程序的执行过程。用伪代码来表示,如下:

 

主函数main{

 

    读取样本数据 readData();

       初始化BP神经网络  initBPNework(){

 

            包括数据的归一,神经元的初始化w[Neuron][In]、v[Out][Neuron]等;

        }

        BP神经网络训练 trainNetwork(){

            do{

                for(i 小于 样本容量 Data){

                   

            计算按照第 i 个样本输入,产生的BP神经网络的输出 computO(i);

                   累记误差精度;

                   反馈调节BP神经网络中的神经元,完成第 i 个样本的学习 backUpdate(i);

                }

            }while(达到训练次数 或者 符合误差精度);

        }

 

        存储训练好的神经元信息 writeNeuron();

        用一些数据来测试,训练出来的BP神经网络的结果;

        return 0

}

 

以上是处理的流程,对于读取数据、保存数据之类的处理本文将略去这方面内容,突出主干部分。


原文链接: http://www.cnblogs.com/jzhlin/archive/2012/07/30/bp_c.html


实验结果


试验表明在两轴运动过程中,输出的力矩曲线与计算的力矩曲线非常接近。


总结

1.通过训练,神经网络能够有效的预测机器人任意姿态的各关节所需力矩值。

2.相对于传统的动力学计算法,神经网络具有如下两点优势:一. 它能够避免复杂的动力学建模过程和动力学计算过程,完全不需要任何参数,包括DH参数,质心,质量,摩擦力矩等等的参数。二,动力学建模计算出的力矩与实际力矩必然因种种原因而产生误差。而神经网络计算出的预测值,只要经过充分的训练和选择适当的结构,其最终的预测结果误差与实际的将会明显小于计算法计算出的力矩值。

3.目前的仿真表明,对于动力学问题,BP神经网络的效果要优于径向神经网络。


附 matlab 


 clear all
load('bp_neural_3dof_matlab.mat');
%网络结构
in_num=4;
mid_num=9;
out_num=2;


%样本数量
test_num=144;
train_num=1800;


%
trainin=traindata(:,1:4);
trainout=traindata(:,5:6);
testin=testdata(:,1:4);
%归一化范围:定义为-1到1
Ymax=1;
Ymin=-1;


%寻找最大最小值
for j=1:in_num
    maxin(j)=trainin(1,j);
    minin(j)=trainin(1,j);
    for i=1:train_num
        if trainin(i,j)>=maxin(j)
           maxin(j)=trainin(i,j); 
        elseif trainin(i,j)<=minin(j)
               minin(j)=trainin(i,j); 
        end
    end
end


for j=1:out_num
    maxout(j)=trainout(1,j);
    minout(j)=trainout(1,j);
    for i=1:train_num
        if trainout(i,j)>=maxout(j)
           maxout(j)=trainout(i,j); 
        elseif trainout(i,j)<=minout(j)
                minout(j)=trainout(i,j); 
        end
    end
end        


%归一化过程
for j=1:in_num
    for i=1:train_num
       if maxin(j)== 0 & minin(j)== 0
            trainin_norm(i,j)=0;
       else
           trainin_norm(i,j)=(Ymax-Ymin)*(trainin(i,j)-minin(j))/(maxin(j)-minin(j))+Ymin;
       end  
    end
end
    
for j=1:out_num
    for i=1:train_num
        if maxout(j)== 0 & minout(j)== 0
             trainout_norm(i,j)=0;
        else
            trainout_norm(i,j)=(Ymax-Ymin)*(trainout(i,j)-minout(j))/(maxout(j)-minout(j))+Ymin;
        end
    end
end


%将测试数据同样进行归一化
for j=1:in_num
    for i=1:test_num
       if maxin(j)== 0 & minin(j)== 0
            testin_norm(i,j)=0;
       else
           testin_norm(i,j)=(Ymax-Ymin)*(testin(i,j)-minin(j))/(maxin(j)-minin(j))+Ymin;
       end  
    end
end


%神经网络预测
for i=1:test_num          
    for j=1:1:mid_num
         H(j)=testin_norm(i,:)*win(j,:)'+bin(j);
         Hout(j)=1/(1+exp(-H(j)));
    end
          testout(i,:)=wout*Hout'+bout;
end


%将预测结果进行反归一化
for j=1:out_num
    for i=1:test_num
        BPoutput(i,j)=(testout(i,j)-Ymin)*(maxout(j)-minout(j))/(Ymax-Ymin)+minout(j);
    end
end
plot(BPoutput);
hold on
plot(BPoutput-taosim','r');



书籍推荐

 [MATAB神经网络30个案例分析].史峰.扫描版[jb51.net]

51CTO下载-神经网络设计(国外经典教材)中文版

精通matlab神经网络  朱凯 王正林 编著

  • 8
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
机器人动力学与控制 pdf是一本关于机器人动力学和控制的电子书,涵盖了机器人动力学和控制的基本原理、理论和应用。本书内容详细、细致,对于研究机器人运动以及设计和控制机器人运动的人们来说是一个很好的参考资料。 机器人动力学是研究机器人运动和力学行为的一门学科,主要研究机器人的运动规划、轨迹控制、力学特性等问题。而机器人控制则是研究如何通过控制器对机器人进行运动控制和姿态控制的一门学科。 本书首先介绍了机器人的基本构造和动力学模型,包括机器人臂型结构、旋转关节和活动关节的力学模型等。然后详细讲解了机器人的运动学和逆运动学,分析了机器人的自由度、坐标系、运动规划和轨迹控制等内容。 在机器人控制的部分,本书介绍了PID控制器、模糊控制、神经网络控制和自适应控制等方法,并分析了它们在机器人控制中的应用。此外,本书还介绍了机器人的力学特性和传感器的应用,如力传感器、视觉传感器等。 总的来说,机器人动力学与控制 pdf是一本内容丰富、理论系统的机器人学教材。无论是研究机器人动力学和控制的专业人员,还是对机器人学感兴趣的学生,都可以从中获得很大的帮助。通过学习本书,读者可以深入了解机器人动力学和控制原理,掌握机器人的运动规划和控制方法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值