资讯详情

【matlab】vrep小车与matlab通信并模拟

前几天刚做了一个vrep车辆模拟轨迹模拟gui

【matlab】vrep小车轨迹gui

注意到之前的文章是用的matlab如果我们现在需要用键盘来控制汽车的移动,把位置发给汽车,然后汽车移动呢?

下面这个demo使用键盘控制汽车移动,键盘W键向上移动,键盘D键向右移动,A键向左

图1.png

在分析汽车运动时,一个非常重要的参数是汽车三轮的运动速度,汽车轮属于joint类型

[搜索文档](Enabling the B0-based remote API - client side (coppeliarobotics.com)),B0-Based api有一个人得到了这个组件的速度api,但无奈我的pc机器没有配置,也没有找到配置方法qwq

因此,只能在模拟软件中读取,然后与之一起读取matlab通信,得到速度

仿真软件:

首先找到绑定在汽车脚本上的脚本

双击打开,看到这里的14行已经写好了得速度的句子

--get motor initial speed     v0 = sim.getJointTargetVelocity(motor_0);     v1 = sim.getJointTargetVelocity(motor_1);     v2 = sim.getJointTargetVelocity(motor_2); 

然后你需要找到发送这个速度的方法matlab,查阅资料发现,vrep和matlab以下两种通信需要通过api

  • setStringSignal通过通信接口发送字符串信号
  • GetStringSignal接受字符串信号

当然,在发送之前,必须将字符串转换为信号,并在接受之后重新分析

  • packFloatTable
  • UnpackFloats

所以在vrep中的sysCall_actuation添加以下代码

-- added     Velocity={ 
       };     table.insert(Velocity,v0);     table.insert(Velocity,v1);     table.insert(Velocity,v2);     print("Hello")     print(Velocity)     print("world")     Velocity = sim.packFloatTable(Velocity) -----------------------added     sim.setStringSignal('scan Velocity', Velocity) ----------------added 

在matlab的pushbutton1_Callback添加到循环中

[returnCode,Velocities]=vrep.simxGetStringSignal(clientID,'scan Velocity',vrep.simx_opmode_oneshot);         %             Velocities         Velocities=vrep.simxUnpackFloats(Velocities); 

然后在matlab的gui添加元素可以显示


后来想办法加一些小玩意

  • 车的模型图表示车的实时位置

  • 加了一个示意图和表示速度大小和方向的箭头

(tips:刷新图窗记得使用drawnow函数!中断间隔也需要取合适的值)

完整视频演示如下

视频演示

资源自取

标签: 传感器传给matlab

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台