zoukankan      html  css  js  c++  java
  • 平面二连杆逆运动学仿真Vrep_matlab

                           平面二连杆逆运动学仿真  Vrep_matlab

    1.创建平面二连杆模型

    1.   打开vrep,新建scene。

    2. 点击Add->Dummy,调整Dummy大小、颜色、位置。命名为Base.

    3. 点击Add->Joint->Revolute,命名为j1。双击j1,在scene object properties中将Mode设置为Inverse kinematics mode。length设置为0.15、Diameter设置为0.04。

    4. 点击Add->Primitive shape->Cylinder,设置参数X-size为0.05m,Z-size为0.5m。并调整颜色、位置。如下图。

    5. 按照上述创建关节与连杆的方式,再创建关节二,参数设置与上述相同。

    6. 再按下图调整各部件的关系图。

    7. 添加dummy对,点击Add添加dummy,命名为tip,并调整其大小、位置。再添加target,同样设置其参数。最后调整层次结构。配对dummy对,如图(其实可以不添加)

       

      至此,模型创建完成。 此处模型购买链接,提供咨询服务。

    2.推导平面逆运动学方程

    由余弦定理得

                                                  

    式-1

    又由三角学知识可得

    式2

     

    代入上式求得

    式3

    时,上式有解。

    式4

    求解关节角 θ1,得

    式5

    再次应用余弦定理得

    式6

     

    其中β∈(0,π)

    此处模型购买链接,提供咨询服务。 

       3.Matlab代码实现

    在matlab中新建函数,函数名为InverseKinematics,添加如下代码。

    function [theta1,theta2] = InverseKinematics(Px,Py,a1,a2)
        %   此处显示详细说明
        
        if Px^2+Py^2<=(a1+a2)^2
            
           %关节2角度
           theta2=acos((Px^2+Py^2-a1^2-a2^2)/(2*a1*a2));
           
           %关节1角度
           if (Px<0 && Py>0)
                alaph=-pi+atan(Py/Px);
           elseif (Px<0 && Py<0)
               alaph=pi+atan(Py/Px);
           else
               alaph=atan(Py/Px);
           end
           beta=acos((Px^2+Py^2+a1^2-a2^2)/(2*a1*sqrt(Px^2+Py^2)));
           if  theta2>=0
               
                theta1=alaph-beta;
           else
                theta1=alaph+beta;
           end
           fprintf("alaph: %f°  , beta:  %f  
    ",alaph*180/pi,beta*180/pi);
    
            fprintf("theta1:  %f°, theta2:  %f°
    ",theta1*180/pi,theta2*180/pi);
        else
            
            disp('目标点不在工作范围内!');
            
        end
    
        
    end

    添加新脚本

    %两连杆机械臂控制脚本
    
    %建立matlab与vrep通信通道
        disp('Program started');
        % sim=remApi('remoteApi','extApi.h'); % using the header (requires a compiler)
        sim=remApi('remoteApi'); % using the prototype file (remoteApiProto.m)
        sim.simxFinish(-1); % just in case, close all opened connections
        clientID=sim.simxStart('127.0.0.1',19999,true,true,5000,5);
        
    %获取vrep模型参数
         if (clientID>-1)
                    disp('Connected to remote API server!!!!');
         end
         a1=0.5;
         a2=0.5;
         %Position=[0,0];
         %取得目标点句柄                                           
         [returnCode,P_handle]=sim.simxGetObjectHandle(clientID,'target',sim.simx_opmode_oneshot_wait);
         %基坐标系句柄
         [returnCode,Base_handle]=sim.simxGetObjectHandle(clientID,'base',sim.simx_opmode_oneshot_wait);
         %取得目标点坐标
         [returnCode,Position]=sim.simxGetObjectPosition(clientID,P_handle,Base_handle,sim.simx_opmode_oneshot_wait);
         Px=Position(1);
         Py=Position(2);
         fprintf("Px: %f  ,Py:  %f 
    ",Px,Py);
    %逆运动学解算
        [theta1,theta2]=InverseKinematics(Px,Py,a1,a2);
    %关节角发送至vrep
    %关节句柄
     [returnCode,J1_handle]=sim.simxGetObjectHandle(clientID,'j1',sim.simx_opmode_oneshot_wait);
     [returnCode,J2_handle]=sim.simxGetObjectHandle(clientID,'j2',sim.simx_opmode_oneshot_wait);
     %设置关节角度
     sim.simxSetJointPosition(clientID,J1_handle,theta1,sim.simx_opmode_oneshot);
     sim.simxSetJointPosition(clientID,J2_handle,theta2,sim.simx_opmode_oneshot);
    
     
     
    

    视频观看地址 https://www.bilibili.com/video/bv1Xg4y1v7pR

    vrep Q群 609286340

    此处模型购买链接,提供咨询服务。

    vrep_matlab平面二连杆逆运动学仿真

  • 相关阅读:
    HDU 3416
    The connection to adb is down, and a severe error has occured
    HDU 2255 奔小康赚大钱 KM裸题
    springMVC --@RequestParam注解(后台控制器获取參数)
    面试宝典之预处理、const与sizeof
    oracle中字符串类似度函数实測
    Android学习之路
    007_尚学堂_高明鑫_android 之项目的打包apk与apk的反编译
    提高eclipse使用效率(二)—— 提高Android开发效率的小技巧
    提高eclipse使用效率(一)--使用快捷键
  • 原文地址:https://www.cnblogs.com/deciduousmap/p/13326274.html
Copyright © 2011-2022 走看看