在http://blog.csdn.net/andymfc/article/details/55517380中已经告诉大家如何在没有ros系统的环境下实现对kobuki机器人的简单控制,今天再向大家介绍如何快的实现对kobuki机器人的远程控制。
图1 kobuki机器人底盘
这里我们主要是利用了前面blog提到过的TCP/IP服务器通信技术来实现,其实更加简单的方式可以通过ssh远程登录来实现对机器人的控制,但是从实际的测试效果来看,这种方式在电脑端控制机器人动作的时候非常不稳定,所以最终还是决定是用TCP/IP通信技术来实现对机器人的远程控制,这里我们主要的实现思路是在dragonboard 410c上构建一个控制服务器,接收控制上位机的连接,控制上位机连接成功后发送命令到dragonbaord 410c上,dragonboard 410c然后根据控制命令来控制kobuki的移动,具体思路如下图2所示。
图2 远程控制kobuki设计思路
这里我们还充分利用了kobuki官方提供的键盘控制程序,通过写一个简单的键盘模拟控制端就可以实现对kobuki的控制,核心代码如下:
import virtkey
import time
def simulate():
v = virtkey.virtkey()
time.sleep(3)
v.press_keysym(65363)
v.release_keysym(65363)
上述代码模拟方向右键按下和释放,其中65363表示方向右键,方向上为65362 下为65364,,左为65361,通过模拟按键,然后配合官方给出的按键控制kobuki程序就可以实现对kobuki的编程控制。
然后我们利用上述代码构建一个控制服务程序,具体代码如下:
def controlService(self,cmd,time):
if cmd=="a":#左
v.press_keysym(65361)
time.sleep(time)
v.release_keysym(65361)
elif cmd=="d":#右
v.press_keysym(65363)
time.sleep(time)
v.release_keysym(65363)
elif cmd=="w"#上
v.press_keysym(65363)
time.sleep(time)
v.release_keysym(65363)
elif cmd=="s"#下
v.press_keysym(65363)
time.sleep(time)
v.release_keysym(65363)
elif cmd==“s”:# 停
v.press_keysym(65363)
time.sleep(time)
v.release_keysym(65363)
else:
return -1
有了上述控制服务后,就可以构建通信服务了,在通信服务中调用该服务进行控制,具体代码如下:
def handle(socket,address):
while(1):
try:
report=socket.recv(BUFSIZE)
print(report)
if len(report)>reportLenMin:
slef.controlService(report)
socket.send("successful")
else:
print("recv report error")
socket.send("your cmd is error")
except:
print("service error")
socket.send("service error")
到这里我们就完成了整个远程控制的代码,我们只需要在客户端输入对应的控制字母就可以实现对kobuki的控制。
65362 |