做姿态控制时,我让它蹲下0.1m的时候它会趴下
%通讯初始化
clear
clc
disp('Program started');
vrep=remApi('remoteApi');
vrep.simxFinish(-1);
clientID=vrep.simxStart('127.0.0.1',19999,true,true,5000,5); %如果返回值为-1 则代表通讯不成功,返回值为0代表通讯成功
disp(clientID);
if (clientID>-1)
disp('Connected to remote API server');
vrep.simxStartSimulation(clientID,vrep.simx_opmode_oneshot); %开启仿真
%声明节点,关节初始化,12个关节
[rec ,rb_rot_3]=vrep.simxGetObjectHandle (clientID,'rb_rot_3',vrep.simx_opmode_blocking);
[rec ,rf_rot_3]=vrep.simxGetObjectHandle (clientID,'rf_rot_3',vrep.simx_opmode_blocking);
[rec ,rb_rot_2]=vrep.simxGetObjectHandle (clientID,'rb_rot_2',vrep.simx_opmode_blocking);
[rec ,rf_rot_2]=vrep.simxGetObjectHandle (clientID,'rf_rot_2',vrep.simx_opmode_blocking);
[rec ,rb_rot_1]=vrep.simxGetObjectHandle (clientID,'rb_rot_1',vrep.simx_opmode_blocking);
[rec ,rf_rot_1]=vrep.simxGetObjectHandle (clientID,'rf_rot_1',vrep.simx_opmode_blocking);
[rec ,lb_rot_3]=vrep.simxGetObjectHandle (clientID,'lb_rot_3',vrep.simx_opmode_blocking);
[rec ,lf_rot_3]=vrep.simxGetObjectHandle (clientID,'lf_rot_3',vrep.simx_opmode_blocking);
[rec ,lb_rot_2]=vrep.simxGetObjectHandle (clientID,'lb_rot_2',vrep.simx_opmode_blocking);
[rec ,lf_rot_2]=vrep.simxGetObjectHandle (clientID,'lf_rot_2',vrep.simx_opmode_blocking);
[rec ,lb_rot_1]=vrep.simxGetObjectHandle (clientID,'lb_rot_1',vrep.simx_opmode_blocking);
[rec ,lf_rot_1]=vrep.simxGetObjectHandle (clientID,'lf_rot_1',vrep.simx_opmode_blocking);
%12个电机力矩参数
rb_rot_1_force=500; rb_rot_2_force=500; rb_rot_3_force=500; %第一条腿
rf_rot_1_force=500; rf_rot_2_force=500; rf_rot_3_force=500; %第二条腿
lb_rot_1_force=500; lb_rot_2_force=500; lb_rot_3_force=500; %第三条腿
lf_rot_1_force=500; lf_rot_2_force=500; lf_rot_3_force=500; %第四条腿
%设置电机力矩
rec=vrep.simxSetJointForce(clientID,rb_rot_3, rb_rot_3_force,vrep.simx_opmode_blocking);
rec=vrep.simxSetJointForce(clientID,rf_rot_3, rf_rot_3_force,vrep.simx_opmode_blocking);
rec=vrep.simxSetJointForce(clientID,rb_rot_2, rb_rot_2_force,vrep.simx_opmode_blocking);
rec=vrep.simxSetJointForce(clientID,rf_rot_2, rf_rot_2_force,vrep.simx_opmode_blocking);
rec=vrep.simxSetJointForce(clientID,rb_rot_1, rb_rot_1_force,vrep.simx_opmode_blocking);
rec=vrep.simxSetJointForce(clientID,rf_rot_1, rf_rot_1_force,vrep.simx_opmode_blocking);
rec=vrep.simxSetJointForce(clientID,lb_rot_3, lb_rot_3_force,vrep.simx_opmode_blocking);
rec=vrep.simxSetJointForce(clientID,lf_rot_3, lf_rot_3_force,vrep.simx_opmode_blocking);
rec=vrep.simxSetJointForce(clientID,lb_rot_2, lb_rot_2_force,vrep.simx_opmode_blocking);
rec=vrep.simxSetJointForce(clientID,lf_rot_2, lf_rot_2_force,vrep.simx_opmode_blocking);
rec=vrep.simxSetJointForce(clientID,lb_rot_1, lb_rot_1_force,vrep.simx_opmode_blocking);
rec=vrep.simxSetJointForce(clientID,lf_rot_1, lf_rot_1_force,vrep.simx_opmode_blocking);
row=0; pitch=0; yaw=0;
pos_x=0; pos_y=0; pos_z=-0.1;
while 1
[lb_x,lb_y,lb_z,rb_x,rb_y,rb_z,rf_x,rf_y,rf_z,lf_x,lf_y,lf_z] = pose_control(row,pitch,yaw,pos_x,pos_y,pos_z);
[lb_rot_1_pos,lb_rot_2_pos,lb_rot_3_pos]=xyz(lb_x,lb_y,lb_z);
[lf_rot_1_pos,lf_rot_2_pos,lf_rot_3_pos]=xyz(lf_x,lf_y,lf_z);
[rb_rot_1_pos,rb_rot_2_pos,rb_rot_3_pos]=xyz(rb_x,rb_y,rb_z);
[rf_rot_1_pos,rf_rot_2_pos,rf_rot_3_pos]=xyz(rf_x,rf_y,rf_z);
%电机控制函数
rec=vrep.simxSetJointTargetPosition(clientID,lb_rot_1,-lb_rot_1_pos,vrep.simx_opmode_oneshot);
rec=vrep.simxSetJointTargetPosition(clientID,lb_rot_2,lb_rot_2_pos,vrep.simx_opmode_oneshot);
rec=vrep.simxSetJointTargetPosition(clientID,lb_rot_3,lb_rot_3_pos,vrep.simx_opmode_oneshot);
rec=vrep.simxSetJointTargetPosition(clientID,rf_rot_1,rf_rot_1_pos,vrep.simx_opmode_oneshot);
rec=vrep.simxSetJointTargetPosition(clientID,rf_rot_2,rf_rot_2_pos,vrep.simx_opmode_oneshot);
rec=vrep.simxSetJointTargetPosition(clientID,rf_rot_3,rf_rot_3_pos,vrep.simx_opmode_oneshot);
rec=vrep.simxSetJointTargetPosition(clientID,rb_rot_1,-rb_rot_1_pos,vrep.simx_opmode_oneshot);
rec=vrep.simxSetJointTargetPosition(clientID,rb_rot_2,rb_rot_2_pos,vrep.simx_opmode_oneshot);
rec=vrep.simxSetJointTargetPosition(clientID,rb_rot_3,rb_rot_3_pos,vrep.simx_opmode_oneshot);
rec=vrep.simxSetJointTargetPosition(clientID,lf_rot_1,lf_rot_1_pos,vrep.simx_opmode_oneshot);
rec=vrep.simxSetJointTargetPosition(clientID,lf_rot_2,lf_rot_2_pos,vrep.simx_opmode_oneshot);
rec=vrep.simxSetJointTargetPosition(clientID,lf_rot_3,lf_rot_3_pos,vrep.simx_opmode_oneshot);
end
vrep.simxStopSimulation(clientID,vrep.simx_opmode_blocking); %仿真停止
vrep.simxFinish(clientID);
else
disp('Failed connecting to remote API server');
end
vrep.delete();
disp('Program ended');
第三方账号登入
QQ 微博 微信