接上一篇博客,我在学习其他人的源码过程中,发现启动python程序与v-rep的连接并不需要修改script.直接修改python代码即可,
将
clientId = vrep.simxStart("127.0.0.1", 19999, True, True, 5000, 5) #建立和服务器的连接
改为
clientId = vrep.simxStart("127.0.0.1", 19997, True, True, 5000, 5) #建立和服务器的连接
即可.
python和v-rep的通信可以通过信号传递实现.v-rep的remote-api中有以下的函数来实现信号传递:
number returnCode,string signalValue=simxGetStringSignal(number clientID,string signalName,number operationMode)
number returnCode=simxSetStringSignal(number clientID,string signalName,string signalValue,number operationMode)
上面只是两个简单的函数,具体的使用方法为在你的python代码中使用simxsetStringSignal向v-rep传递一个信号,假设名字为"test", 在v-rep中任意一个script中都可以使用simxGetStringSignal来接收"test"信号的值,并根据不同的值来进行一下不同的操作.各种好玩的实现,大家可以自行尝试.
进入正题,如何键盘控制UAV移动?
我尝试用上述的信号机制,直接更改四个机翼的速度值,表示结果直接炸裂,各种翻车,不建议使用.
通过读Quadricopter的Script,可以知道无人机是不断在跟随Quardricopter_target的位置,所以改变Quardricopter_target的位置就可以实现无人机飞行的控制.
位置控制函数如下:
vrep.simxGetObjectPosition(client_id, handle, -1, vrep.simx_opmode_buffer)
vrep.simxSetObjectPosition(client_id, handle, vrep.sim_handle_parent, position, vrep.simx_opmode_oneshot)
大家可以根据上下左右自行更改获得的Quardricopter_target的position值
知道了如何让无人机移动,之后就是python实现键盘控制的部分了.需要导入pyxhook的库(linux),windows下为pyhook
简单例子如下:
#!/usr/bin/env python
import pyxhook
def OnKeyPress(event):
print (event.Key)
if event.Key == "Escape":
exit(0)
hm = pyxhook.HookManager()
hm.KeyDown = OnKeyPress
hm.HookKeyboard()
hm.start()
while True:
a = 1
pyxhook包的安装方法(ubuntu):
pip install pyxhook
如果安装有aconda的话就不需要再安了,直接用就可以.
具体的demo,我会在之后的更新,大家自己尝试写出自己的demo.