v-rep 入门(二) 键盘控制UAV移动

接上一篇博客,我在学习其他人的源码过程中,发现启动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) #建立和服务器的连接

即可.

关于v-rep机制的一些理解:

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移动?

1. 直接控制四个机翼

我尝试用上述的信号机制,直接更改四个机翼的速度值,表示结果直接炸裂,各种翻车,不建议使用.

2. 控制Quadricopter_target的位置

通过读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值

3. 键盘控制

知道了如何让无人机移动,之后就是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.

你可能感兴趣的:(python)