一、前言
NAO机器人接触有一年多了,期间开发了很多的程序。
—最开始是做NAO机器人人脸识别和室内复杂环境下的路径规划;
—后来参加NAO机器人高尔夫球赛,开发了一套完整的NAO 机器人打高尔夫球赛的框架,并将源码提供给了举办方。
—在此基础之上,又帮助举办方开发了一套NAO机器人接力赛程序框架。第一个版本是机器人通过Socket通信实现机器人消息传输,也是本章节提及的;第二个版本为机器人通过机器视觉来提取信息。
下面就来说说socket通信吧。
TCP服务端:
1 创建套接字,绑定套接字到本地IP与端口
# socket.socket(socket.AF_INET,socket.SOCK_STREAM) , s.bind()
2 开始监听连接 #s.listen()
3 进入循环,不断接受客户端的连接请求 #s.accept()
4 然后接收传来的数据,并发送给对方数据 #s.recv() , s.sendall()
5 传输完毕后,关闭套接字 #s.close()
TCP客户端:
1 创建套接字,连接远端地址
# socket.socket(socket.AF_INET,socket.SOCK_STREAM) , s.connect()
2 连接后发送数据和接收数据 # s.sendall(), s.recv()
3 传输完毕后,关闭套接字 #s.close()
对于NAO机器人,无非就是一个作为服务器,一个作为客户端,代码如下:
client.py
#-*- coding: utf-8 -*-
###########################################################
# > Description: 远程控制-客户端
# 向服务器发送指令,查看服务器回执消息。
###########################################################
#! /usr/bin/env python
import argparse
from naoqi import ALProxy
import socket
import time
LISTEN_PORT = 8001 # 服务器监听端口
# command
COMMAND_DISCONNECT = 'DISCONNECT'
COMMAND_HEADYAW = 'HEADYAW' # 头左右
COMMAND_HEADPITCH = 'HEADPITCH' # 头上下
# flag
CONNECT = False
def main(robot_IP, robot_PORT=9559):
# ----------> 连接socket服务器监听端口 <----------
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((robot_IP, LISTEN_PORT))
time.sleep(2)
CONNECT = True
while CONNECT == True:
# 输入指令
command = raw_input("Command code:")
# socket 发送指令
sock.send(command)
if command == COMMAND_HEADYAW or command == COMMAND_HEADPITCH:
value = raw_input("Value:")
sock.send(value)
# socket 接受返回消息
buf = sock.recv(1024)
print buf
if command == COMMAND_DISCONNECT:
CONNECT = False
sock.close() # 与服务器端断开socket连接
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("--ip", type=str, default="192.168.1.100", help="Robot ip address")
parser.add_argument("--port", type=int, default=9559, help="Robot port number")
args = pa