入门篇(4)NAO机器人接力赛通信问题

本文介绍了NAO机器人在接力赛中如何利用Socket通信进行信息传递。作者首先回顾了NAO机器人的开发经历,包括人脸识别、路径规划和高尔夫球赛。接着详细讲解了TCP服务端和客户端的通信过程,包括创建套接字、绑定、监听、接受连接、数据收发及关闭套接字的步骤。最后,提到了在NAO接力赛中的应用,一台机器人作为服务器,另一台作为客户端,通过发送指令完成接力任务。
摘要由CSDN通过智能技术生成

一、前言

NAO机器人接触有一年多了,期间开发了很多的程序。

—最开始是做NAO机器人人脸识别和室内复杂环境下的路径规划;

—后来参加NAO机器人高尔夫球赛,开发了一套完整的NAO 机器人打高尔夫球赛的框架,并将源码提供给了举办方。

—在此基础之上,又帮助举办方开发了一套NAO机器人接力赛程序框架。第一个版本是机器人通过Socket通信实现机器人消息传输,也是本章节提及的;第二个版本为机器人通过机器视觉来提取信息。

下面就来说说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
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值