基于dragonboard 410c的kobuki机器人控制——远程控制

      在http://blog.csdn.net/andymfc/article/details/55517380中已经告诉大家如何在没有ros系统的环境下实现对kobuki机器人的简单控制,今天再向大家介绍如何快的实现对kobuki机器人的远程控制。

基于dragonboard 410c的kobuki机器人控制——远程控制_第1张图片

图1 kobuki机器人底盘

这里我们主要是利用了前面blog提到过的TCP/IP服务器通信技术来实现,其实更加简单的方式可以通过ssh远程登录来实现对机器人的控制,但是从实际的测试效果来看,这种方式在电脑端控制机器人动作的时候非常不稳定,所以最终还是决定是用TCP/IP通信技术来实现对机器人的远程控制,这里我们主要的实现思路是在dragonboard 410c上构建一个控制服务器,接收控制上位机的连接,控制上位机连接成功后发送命令到dragonbaord 410c上,dragonboard 410c然后根据控制命令来控制kobuki的移动,具体思路如下图2所示。

基于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

你可能感兴趣的:(DragonBoard,410c,kobuki)