matlab通信实现
本章在[动力学建模]和[vrep与matlab建立通信]完成的前提下进行
传送门:
【CoppeliaSim】(原V-rep)模型文件导入及动力学建模
【CoppeliaSim】(原Vrep)与matlab建立通信
本篇文章用vrep的matlab接口实现了在CoppeliaSim中和下面文章同样的仿真功能
CoppeliaSim(原Vrep)中实现多关节机械臂的正运动学仿真【CoppeliaSim内嵌脚本lua语言实现】
1)在matlab工作路径下新建脚本
2)键入代码
%%% //配合RRRR_Sim_Kinematic_Matlab.ttt文件使用,主要用于演示如何采用matlab控制机械臂clear;clc;% //进行初始化,获取句柄vrep = remApi('remoteApi'); % //引入vrep的matlab接口(remoteApiProto.m)vrep.simxFinish(-1); % //关闭所有打开的连接clientID = vrep.simxStart('127.0.0.1',19997,true,true,5000,5); % //仿真连接入口jjjjJointHandle = zeros(1,4);for i = 1:4[~,jjjjJointHandle(i)] = vrep.simxGetObjectHandle(clientID,['RRRR_J' num2str(i)],vrep.simx_opmode_blocking);end[res,tar_handle] = %vrep.simxGetObjectHandle(clientID,'4j_Tar',vrep.simx_opmode_blocking);vrep.simxSynchronous(clientID,true); % //是否要开启同步 不同步的话可能会失真vrep.simxStartSimulation(clientID,vrep.simx_opmode_oneshot); % //以oneshot模式启动仿真%%qz = [0 0 0 0]; % //关节空间初始姿态qn = [pi/3 pi/6 pi/6 pi/6]; % //关节空间到达姿态count = 0;t = 0:0.01:1; % //可以尝试将vrep的时间步长设置为10ms,然后这里的步长改为0.01,再看下效果while count < 2if mod(count,2) == 1joint_pos = jtraj(qn,qz,t);elsejoint_pos = jtraj(qz,qn,t);endfor k = 1:size(joint_pos,1)for i = 1:4 vrep.simxSetJointTargetPosition(clientID,jjjjJointHandle(i),joint_pos(k,i),vrep.simx_opmode_blocking);% //用于没有开始仿真时候设置关节角度或者是被动关节endvrep.simxSynchronousTrigger(clientID); % //同步模式下触发店的位置很重要endcount = count + 1;endvrep.simxStopSimulation(clientID,vrep.simx_opmode_oneshot_wait); % //停止仿真vrep.simxFinish(clientID);vrep.delete(); % //call the destructor!
3)同时打开RRRR_Sim_Kinematic_Matlab.ttt
和RRRR_JointPositionControl.m
RUN