首页 > 编程知识 正文

vrep python,vrep建模

时间:2023-05-06 17:32:13 阅读:233797 作者:2913


这些天主要对vrep做了一些探索,一些笔记如下:
1.urdf机器人模型文件的导入 点击plugins-urdf importing即可
2.动力学模型的配置

将此处改成零,大意是以方框的正中心为质心,否则很容易抖!!模型导入后坐标系都会被这个包围盒的坐标系覆盖,上面的fkdmla is responsable表示刚体是有碰撞特性的,一般前一个臂如果前四个打钩,后一个臂则后四个打钩,fkdmla is dynamic表示是该物体是动态的,即受到一定的力会动,各个关节轴配置如下,力矩控制模式,其中position是当前关节,改了机器人会动,target position是目标关节,如果一切都配置好了的话,点击仿真按钮机械臂会走到该关节位置(不会抖!)

3. 末端工具和力传感器添加

这里就需要熟练使用这两个按钮了
因为导入后坐标系是包围盒中心,看包围盒的尺寸大小如下,通过平移旋转工具调到与末端法兰盘间是自由落体运动才行,最后再add-forcesensor,即可稳定连接(vrep里坐标系是真的烦)

4. matlab通讯

随便添加一个脚本,写上

-- This is a threaded script.simRemoteApi.start(19999,1300,false,true)function sysCall_threadmain() end

新建一个文件夹拷贝下面文件,新建一个脚本写上如下代码

disp('Program started');vrep=remApi('remoteApi'); % using the prototype file (remoteApiProto.m)vrep.simxFinish(-1); % just in case, close all opened connectionsid=vrep.simxStart('127.0.0.1',19997,true,true,5000,5);if (id>-1) disp('Connected to remote API server');%%cyclic control while (vrep.simxGetConnectionId(id)~=-1 ) %此处添加相关代码 end % Now close the connection to V-REP: vrep.simxStopSimulation(id,vrep.simx_opmode_oneshot_wait); vrep.simxFinish(id);else disp('Failed connecting to remote API server');end vrep.delete(); % call the destructor! disp('Program ended');

先打开一个vrep场景,再运行上述代码,结果如下:

5 一些相关命令示例

sim_opmode_blocking 阻塞模式simx_opmode_oneshot_wait 非阻塞函数 适用于向V-rep 发送数据而不需要回复simx_opmode_streaming 数据流模式simxSynchronousTrigger(id); %同步操作,很重要!! %获取关节句柄 [res,armJoints(1)] = vrep.simxGetObjectHandle(id,'joint1',vrep.simx_opmode_oneshot_wait); %获取力传感器句柄 [res,external_force_sensor] = vrep.simxGetObjectHandle(id,'Force_sensor',vrep.simx_opmode_oneshot_wait); %获取关节位置 vrep.simxGetJointPosition(id,armJoints(i),vrep.simx_opmode_streaming); %获取关节速度 可以查matlab API 参数2012表示为关节速度 vrep.simxGetObjectFloatParameter(id,armJoints(i),2012,vrep.simx_opmode_streaming) %获取关节力 vrep.simxGetJointForce(id,armJoints(i),vrep.simx_opmode_streaming); %读取力传感器 vrep.simxReadForceSensor(id,external_force_sensor,vrep.simx_opmode_streaming); %设置目标位置 !!基于位置的控制 res = vrep.simxSetJointTargetPosition(id, joint_handles(i), target_joint_position (i), vrep.simx_opmode_oneshot); %设置仿真参数,可以设置仿真步长 记得选择custom vrep.simxSetFloatingParameter(id,vrep.sim_floatparam_simulation_time_step,dt,vrep.simx_opmode_oneshot_wait);


最后看下我的一个仿真图

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。