前几天刚做了一个vrep车辆模拟轨迹模拟gui
【matlab】vrep小车轨迹gui
注意到之前的文章是用的matlab如果我们现在需要用键盘来控制汽车的移动,把位置发给汽车,然后汽车移动呢?
下面这个demo使用键盘控制汽车移动,键盘W键向上移动,键盘D键向右移动,A键向左
在分析汽车运动时,一个非常重要的参数是汽车三轮的运动速度,汽车轮属于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
函数!中断间隔也需要取合适的值)
完整视频演示如下
视频演示
资源自取