Matlab联合仿真环境搭建

复制api文件到新建文件夹

路径:
C:\Program Files\CoppeliaRobotics\CoppeliaSimEdu\programming\remoteApiBindings\matlab\matlab

matlab找到对应目录

v-rep配置

添加内嵌脚本


选择对象

双击出现代码框,并添加语句,启动远程控制功能

代码测试

1.在v-rep中点击运行
2.MATLAB运行,simpleTest

版本不匹配

测试过程中出现“Note: always make sure you use the corresponding remoteApi library
(i.e. 32bit Matlab will not work with 64bit remoteApi, and vice-versa)”

需要将下路径中的remoteApi.dll文件复制到MATLAB代码文件夹中
C:\Program Files\CoppeliaRobotics\CoppeliaSimEdu\programming\remoteApiBindings\lib\lib\Windows


问题解决

控制代码测试

可以通过手册查找函数用法

逆运动学解算

杆件长度参数确定

同时选中两个坐标系,观察坐标系间距离结课获取相关参数。


此处应当重点注意,由于选择两坐标系所得距离并非calf_joint与地面间距离,所以不可直接使用,否则腿部无法伸直。
在SolidWorks中打开calf.stl,测量可得L3实际长度为0.22m,给响应坐标腿顺利伸直。


所以L1=0.0851,L2=0.2,L3=0.22

MATLAB代码

逆运动学解算

function [theta_1,theta_2,theta_3] = xyz(x,y,z)
%与课程对应
y=-y;
z=-z;
%
L1=0.0851;
L2=0.2;
L3=0.22;  %腿长不是0.2
dyz=sqrt(y.^2+z.^2);
lyz=sqrt(dyz.^2-L1.^2);
theta_1_yz=-atan(y/z);
theta_1_h_offset=-atan(L1./lyz);
theta_1=theta_1_yz-theta_1_h_offset;
%
lxzp=sqrt(lyz.^2+x.^2);
n=(lxzp.^2-L3.^2-L2.^2)/(2*L2);
theta_3=-acos(n/L3);
%
theta_2_xzp=-atan(x/lyz);
theta_2_off=acos((L2+n)/lxzp);
theta_2=theta_2_xzp+theta_2_off;
%输出角度为弧度
end

联合仿真.m

%通讯初始化 从simpleTest中copy过来
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 ,RR_calf_joint]=vrep.simxGetObjectHandle (clientID,'RR_calf_joint',vrep.simx_opmode_blocking);[rec ,FR_calf_joint]=vrep.simxGetObjectHandle (clientID,'FR_calf_joint',vrep.simx_opmode_blocking);[rec ,RR_thigh_joint]=vrep.simxGetObjectHandle (clientID,'RR_thigh_joint',vrep.simx_opmode_blocking);[rec ,FR_thigh_joint]=vrep.simxGetObjectHandle (clientID,'FR_thigh_joint',vrep.simx_opmode_blocking);[rec ,RR_hip_joint]=vrep.simxGetObjectHandle (clientID,'RR_hip_joint',vrep.simx_opmode_blocking);[rec ,FR_hip_joint]=vrep.simxGetObjectHandle (clientID,'FR_hip_joint',vrep.simx_opmode_blocking);[rec ,RL_calf_joint]=vrep.simxGetObjectHandle (clientID,'RL_calf_joint',vrep.simx_opmode_blocking);[rec ,FL_calf_joint]=vrep.simxGetObjectHandle (clientID,'FL_calf_joint',vrep.simx_opmode_blocking);[rec ,RL_thigh_joint]=vrep.simxGetObjectHandle (clientID,'RL_thigh_joint',vrep.simx_opmode_blocking);[rec ,FL_thigh_joint]=vrep.simxGetObjectHandle (clientID,'FL_thigh_joint',vrep.simx_opmode_blocking);[rec ,RL_hip_joint]=vrep.simxGetObjectHandle (clientID,'RL_hip_joint',vrep.simx_opmode_blocking);[rec ,FL_hip_joint]=vrep.simxGetObjectHandle (clientID,'FL_hip_joint',vrep.simx_opmode_blocking);%12个电机力矩参数RR_hip_joint_force=500;     RR_thigh_joint_force=500;         RR_calf_joint_force=500; %第一条腿FR_hip_joint_force=500;     FR_thigh_joint_force=500;         FR_calf_joint_force=500; %第二条腿RL_hip_joint_force=500;     RL_thigh_joint_force=500;         RL_calf_joint_force=500; %第三条腿   FL_hip_joint_force=500;     FL_thigh_joint_force=500;         FL_calf_joint_force=500; %第四条腿%12个电机角度参数 弧度值 RL_hip_joint_pos=0*pi/180;   RL_thigh_joint_pos=0*pi/180;   RL_calf_joint_pos=0*pi/180;                     FL_hip_joint_pos=0*pi/180;   FL_thigh_joint_pos=0*pi/180;   FL_calf_joint_pos=0*pi/180;   RR_hip_joint_pos=0*pi/180;   RR_thigh_joint_pos=0*pi/180;   RR_calf_joint_pos=0*pi/180;   FR_hip_joint_pos=0*pi/180;   FR_thigh_joint_pos=0*pi/180;   FR_calf_joint_pos=0*pi/180;   %   RL_hip_joint_pos=30*pi/180;   RL_thigh_joint_pos=30*pi/180;   RL_calf_joint_pos=70*pi/180;
%  FL_hip_joint_pos=30*pi/180;   FL_thigh_joint_pos=30*pi/180;   FL_calf_joint_pos=70*pi/180;
%  RR_hip_joint_pos=30*pi/180;   RR_thigh_joint_pos=30*pi/180;   RR_calf_joint_pos=70*pi/180;
%  FR_hip_joint_pos=30*pi/180;   FR_thigh_joint_pos=30*pi/180;   FR_calf_joint_pos=70*pi/180;   %设置电机力矩rec=vrep.simxSetJointForce(clientID,RR_calf_joint, RR_calf_joint_force,vrep.simx_opmode_blocking);rec=vrep.simxSetJointForce(clientID,FR_calf_joint, FR_calf_joint_force,vrep.simx_opmode_blocking);rec=vrep.simxSetJointForce(clientID,RR_thigh_joint, RR_thigh_joint_force,vrep.simx_opmode_blocking);rec=vrep.simxSetJointForce(clientID,FR_thigh_joint, FR_thigh_joint_force,vrep.simx_opmode_blocking);rec=vrep.simxSetJointForce(clientID,RR_hip_joint, RR_hip_joint_force,vrep.simx_opmode_blocking);rec=vrep.simxSetJointForce(clientID,FR_hip_joint, FR_hip_joint_force,vrep.simx_opmode_blocking);rec=vrep.simxSetJointForce(clientID,RL_calf_joint, RL_calf_joint_force,vrep.simx_opmode_blocking);rec=vrep.simxSetJointForce(clientID,FL_calf_joint, FL_calf_joint_force,vrep.simx_opmode_blocking);rec=vrep.simxSetJointForce(clientID,RL_thigh_joint, RL_thigh_joint_force,vrep.simx_opmode_blocking);rec=vrep.simxSetJointForce(clientID,FL_thigh_joint, FL_thigh_joint_force,vrep.simx_opmode_blocking);rec=vrep.simxSetJointForce(clientID,RL_hip_joint, RL_hip_joint_force,vrep.simx_opmode_blocking);rec=vrep.simxSetJointForce(clientID,FL_hip_joint, FL_hip_joint_force,vrep.simx_opmode_blocking);%    row=0;   pitch=0; yaw=0;
%    pos_x=0; pos_y=0.2; pos_z=-0.2;pause(1);   %延时1st=clock;   %获取matlab系统当前时间 startTime=t(5)*60+t(6); %当前时间 [年 月 日 时 分 秒]currentTime=0; %当前时间gait_state=2;  %步态标志位
%  [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);
%
%  RL_calf_joint_pos=-52.5*pi/180-RL_calf_joint_pos;
%  FL_calf_joint_pos=-52.5*pi/180-RL_calf_joint_pos;
%  RR_calf_joint_pos=-52.5*pi/180-RL_calf_joint_pos;
%  FR_calf_joint_pos=-52.5*pi/180-RL_calf_joint_pos;while(1)
%x正前负后 y外负内正 z=-0.42伸直
[FL_hip_joint_pos,FL_thigh_joint_pos,FL_calf_joint_pos]=xyz(0,-0.0851,-0.35);
[RL_hip_joint_pos,RL_thigh_joint_pos,RL_calf_joint_pos]=xyz(0,-0.0851,-0.35); %x正前负后 y外负内正 z=-0.42伸直 [FR_hip_joint_pos,FR_thigh_joint_pos,FR_calf_joint_pos]=xyz(0,-0.0851,-0.35);
[RR_hip_joint_pos,RR_thigh_joint_pos,RR_calf_joint_pos]=xyz(0,-0.0851,-0.35); %x正前负后 y外正内负 z=-0.42伸直 %电机控制函数%由于模型导入原因 calf关节初始角度-52.5且只有输入角度小于-52.5才有效rec=vrep.simxSetJointTargetPosition(clientID,FL_hip_joint,-FL_hip_joint_pos,vrep.simx_opmode_oneshot);rec=vrep.simxSetJointTargetPosition(clientID,FL_thigh_joint,FL_thigh_joint_pos,vrep.simx_opmode_oneshot);rec=vrep.simxSetJointTargetPosition(clientID,FL_calf_joint,FL_calf_joint_pos-52.5*pi/180,vrep.simx_opmode_oneshot); rec=vrep.simxSetJointTargetPosition(clientID,RL_hip_joint,-RL_hip_joint_pos,vrep.simx_opmode_oneshot);rec=vrep.simxSetJointTargetPosition(clientID,RL_thigh_joint,RL_thigh_joint_pos,vrep.simx_opmode_oneshot);rec=vrep.simxSetJointTargetPosition(clientID,RL_calf_joint,RL_calf_joint_pos-52.5*pi/180,vrep.simx_opmode_oneshot);rec=vrep.simxSetJointTargetPosition(clientID,FR_hip_joint,FR_hip_joint_pos,vrep.simx_opmode_oneshot);rec=vrep.simxSetJointTargetPosition(clientID,FR_thigh_joint,FR_thigh_joint_pos,vrep.simx_opmode_oneshot);rec=vrep.simxSetJointTargetPosition(clientID,FR_calf_joint,FR_calf_joint_pos-52.5*pi/180,vrep.simx_opmode_oneshot);rec=vrep.simxSetJointTargetPosition(clientID,RR_hip_joint,RR_hip_joint_pos,vrep.simx_opmode_oneshot);rec=vrep.simxSetJointTargetPosition(clientID,RR_thigh_joint,RR_thigh_joint_pos,vrep.simx_opmode_oneshot);rec=vrep.simxSetJointTargetPosition(clientID,RR_calf_joint,RR_calf_joint_pos-52.5*pi/180,vrep.simx_opmode_oneshot);endvrep.simxStopSimulation(clientID,vrep.simx_opmode_blocking); %仿真停止vrep.simxFinish(clientID);
elsedisp('Failed connecting to remote API server');
endvrep.delete(); disp('Program ended');

四腿完全伸直

[FL_hip_joint_pos,FL_thigh_joint_pos,FL_calf_joint_pos]=xyz(0,-0.0851,-0.42);
[RL_hip_joint_pos,RL_thigh_joint_pos,RL_calf_joint_pos]=xyz(0,-0.0851,-0.42); %x正前负后 y外负内正 z=-0.42伸直 [FR_hip_joint_pos,FR_thigh_joint_pos,FR_calf_joint_pos]=xyz(0,-0.0851,-0.42);
[RR_hip_joint_pos,RR_thigh_joint_pos,RR_calf_joint_pos]=xyz(0,-0.0851,-0.42); %x正前负后 y外正内负 z=-0.42伸直

四个足端相同xy坐标不同z坐标得到如下测试结果

[FL_hip_joint_pos,FL_thigh_joint_pos,FL_calf_joint_pos]=xyz(0,-0.0851,-0.42);
[RL_hip_joint_pos,RL_thigh_joint_pos,RL_calf_joint_pos]=xyz(0,-0.0851,-0.35); %x正前负后 y外负内正 z=-0.42伸直 [FR_hip_joint_pos,FR_thigh_joint_pos,FR_calf_joint_pos]=xyz(0,-0.0851,-0.3);
[RR_hip_joint_pos,RR_thigh_joint_pos,RR_calf_joint_pos]=xyz(0,-0.0851,-0.25); %x正前负后 y外正内负 z=-0.42伸直

四个足端相同yz坐标不同x坐标得到如下测试结果

[FL_hip_joint_pos,FL_thigh_joint_pos,FL_calf_joint_pos]=xyz(0.1,-0.0851,-0.3);
[RL_hip_joint_pos,RL_thigh_joint_pos,RL_calf_joint_pos]=xyz(0,-0.0851,-0.3); %x正前负后 y外负内正 z=-0.42伸直 [FR_hip_joint_pos,FR_thigh_joint_pos,FR_calf_joint_pos]=xyz(-0.1,-0.0851,-0.3);
[RR_hip_joint_pos,RR_thigh_joint_pos,RR_calf_joint_pos]=xyz(-0.2,-0.0851,-0.3); %x正前负后 y外正内负 z=-0.42伸直

四个足端相同xz坐标不同y坐标得到如下测试结果

[FL_hip_joint_pos,FL_thigh_joint_pos,FL_calf_joint_pos]=xyz(0,-0.12,-0.3);
[RL_hip_joint_pos,RL_thigh_joint_pos,RL_calf_joint_pos]=xyz(0,-0.0851,-0.3); %x正前负后 y外负内正 z=-0.42伸直 [FR_hip_joint_pos,FR_thigh_joint_pos,FR_calf_joint_pos]=xyz(0,-0.04,-0.3);
[RR_hip_joint_pos,RR_thigh_joint_pos,RR_calf_joint_pos]=xyz(0,0,-0.3); %x正前负后 y外正内负 z=-0.42伸直

Matlab与V-rep联合仿真 逆运动学相关推荐

  1. 通过文件读写方式实现Matlab和Modelsim的联合仿真

    虽然 Modelsim 的功能非常强大,仿真的波形可以以多种形式进行显示,但是当涉及到数字信号处理的算法的仿真验证的时候,则显得有点不足.而进行数字信号处理是 Matlab 的强项,不但有大量的关于数 ...

  2. matlab veristand,matlab和NI VeriStand联合仿真环境搭建(一)

    因现在需要搭建matlab和labview联合仿真环境需要,在labview2012及以前版本中,可以用工具包Simulation interface tookit (SIT)完成,该工具只支持32位 ...

  3. Matlab 2018a与SolidWorks联合仿真——如何将SolidWorks模型以xml格式导出至Matlab中

    Matlab 2018a与SolidWorks联合仿真--如何将SolidWorks模型以xml格式导出至Matlab中   要实现Solidworks与Matlab的联合仿真,需要在Solidwor ...

  4. PreScan交通流车流插件(ITM)- Intelligent Traffic Module Plugin与matlab(simlink)联合仿真使用实例

    PreScan交通流车流插件(ITM)- Intelligent Traffic Module Plugin与matlab(simlink)联合仿真使用实例 注:本实例为自己学习验证成果,仅供大家学习 ...

  5. matlab robotics工具箱(3)逆运动学

    之前一直想把vrep和matlab的robotics工具箱做个配合,因为工具箱的一些功能比vrep方便一些.最近有些空闲时间来试一试. %三.机器人的逆运动学 %3.1 使用解析解 %加载KR5模型 ...

  6. MATLAB/simulink与Amesim联合仿真之FMU

    Simulink生成FMU 第一步:首先搭建一个模型(MATLAB的工作路径应于此模型路径一致,根据所需建立接口数量,路径不可包含中文或者数值开头路径) 第二步:对模型进行设置(固定步长,求解器4) ...

  7. MATLAB与VERP/Coppeliasim联合仿真:配置ZeroMQremote API

    网上查找MATALB与VREP联合仿真的配置和例程都是基于传统API的连接,传统API的连接方式,配置简单,但是此连接方式可使用的vrep中API函数的是有限的,有很多函数在MATLAb中无法调用. ...

  8. Carsim+MATLAB/Simulink多版本联合仿真设置matlab版本的问题

    目录 问题 方法 问题 同时安装了matlab的两个及以上版本,如果实现carsim与指定版本的matlab联合仿真,如何操作? 方法 管理员方式打开预期的matlab版本,命令行中输入 regmat ...

  9. MATLAB—Simulink与Flowmaster联合仿真

    在按照系统的步骤做好准备工作之后,运行例子1的过程中,我出现了如下错误 网上关于联合仿真的内容实在是太少了,这个问题怎么解决我现在还不清楚,欢迎有兴趣的小伙伴一起来探讨.

最新文章

  1. firewalld、netfilter、 netfilter5表5链、iptables介绍
  2. 项目上传github步骤
  3. Go 类型别名与类型声明的区别
  4. 文本分类-TensorRT优化结果对比图
  5. (一)Eureka搭建服务注册中心
  6. [转载] 晓说——第8期:镖局——最后的江湖(下)
  7. 电脑PC端实现微信多开
  8. 实车开放道路真体验,开启车联网发展新征程
  9. 服务器硬盘开机吱吱响,开机时硬盘吱吱响的原因
  10. 利用JD-GUI寻找JAR内部依赖
  11. MVP模式基本用例开发
  12. python绘制小提琴图_seaborn画小提琴图(violin plot)
  13. 一起学JAVA之【基础篇】4种默认线程池介绍
  14. Python如何爬取不确定页数的网页
  15. 多卡聚合智能融合通信设备在智慧房车上的应用
  16. DataGuard - 利用Cascaded Redo Log Destinations避免WAN稳定性问题
  17. java字节码文件学习
  18. 大厂高频面试系列02--最长不重复子串问题(LeetCode)
  19. Nand Flash原理分析与编程
  20. linux mint 修改dns,如何在Ubuntu和LinuxMint中刷新DNS缓存-linux运维

热门文章

  1. php在线考试系统4.0版本,网络在线考试系统4.0 多功能一体化考试平台 可二开!在线模拟考试系统商业版PHP源码...
  2. 日奥委会主席否认行贿 以调查报告主张清白遭质疑
  3. Java基于PHP+MySQL干洗店管理系统的设计与实现
  4. 深入java--与MySQL连接时的时间类问题以及Calendar的用法
  5. MFC操作ini配置文件
  6. html百度翻译界面,百度翻译界面测试(二),接口,2
  7. SurfaceHolder.callback接口如何具体捕获texture
  8. MySql数据库命令操作大全
  9. 模拟退火算法详细讲解(含实例python代码)
  10. 记一次使用百度云图像搜索功能 python sdk