|
急求大神帮忙啊》《
老师让我用C++控制NAO机器人,利用UDP,socket通信,刚接触,也不懂具体是啥东西,因为法国公司出品的NAO这款机器人可以用公司同步开发的软件choregraphe进行控制,而choregraphe里的程序又是用python进行编写的,所以我真是很混乱啊~~
得同时写C++和python两种编程语言进行UDP通信。菜菜的我要爆炸了》《
下面我把我的发送端和接收端程序罗列一下 :大神帮我看看
首先第一个是接收端,也就是用python写的程序,用来直接控制机器人
from multiprocessing import Process
import os
import sys
from socket import *
HOST = '127.0.0.1' #ここは設定に合わせて
PORT = 50008
class MyClass(GeneratedClass):
def __init__(self):
GeneratedClass.__init__(self)
def onLoad(self):
#put initialization code here
pass
def onUnload(self):
#put clean-up code here
pass
def onInput_onStart(self):
# ソケット接続
try:
#接続処理
self.s = socket(AF_INET, SOCK_DGRAM)
self.s.connect((HOST, PORT))
data=self.s.recv(1024)
#u{"can you" please} stand up {now}) ok i stand up $standup=1
if data == 'hello':
self.log("pid :")
except:
#接続失敗したらソケットを閉じて終了へ
self.s.close()
self.onStopped()
return
# 子プロセスの作成
try:
# 子进程要执行的代码
def pid(name):
if __name__=='__main__':
p = Process(target=pid, args=('test',))
print('Child process will start.')
p.start()
p.join()
print('Child process end.')
except:
return
# つながったらテキストの送受信を行う
self.log("pid :" + str(pid))
# 子プロセスの場合の処理
if pid == 0:
self.s.send("HHello")
# 一旦未使用
pass
# 親プロセスの場合
else:
while 1:
self.log("pid else")
data = self.s.recv(1024)
if not data:
break
elif data == "quit":
os.kill(pid, 9)
break
self.log(data)
# Stopの何かがないか確認
stop = self.stopVerification(data)
if stop == False:
self.outputStringFromServer(data)
self.s.close()
self.onStopped()
pass
def onInput_inputString(self, p):
# PCからインプットされたテキストをmsgに入れて、喋らせる
self.log("Recieve String " + p)
# Stopの何かがないか確認
stop = self.stopVerification(p)
# Stopではなかったらメッセージをサーバに送る
if stop == False:
self.s.send(p)
def onInput_onStop(self):
self.onUnload() #it is recommended to reuse the clean-up as the box is stopped
self.onStopped() #activate the output of the box
def stopVerification(self,inputString):
if inputString == "ストップ":
self.log("stop!!")
self.outputStopBehavior()
return True
else:
return False
下面是送信端程序,是用C++程序编写的
// boostudpsender.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
#include <boost/array.hpp>
#include <boost/asio.hpp>
using boost::asio::ip::udp;
int main(int argc, char* argv)
{
try {
boost::asio::io_service io_service;
udp::resolver resolver(io_service);
udp::resolver::query query(udp::v4(), "localhost", "50008");
udp::endpoint receiver_endpoint = *resolver.resolve(query);
udp::socket socket(io_service);
socket.open(udp::v4());
std::string str = "hello";
socket.send_to(boost::asio::buffer(str), receiver_endpoint);
} catch (std::exception& e) {
std::cerr << e.what() << std::endl;
}
}
运行程序后,C程序怎么都控制不了choregraphe软件,也就控制不了机器人,如果有大神用NAO机器人进行研究的话,请帮帮我啊,我还想知道怎样在script编辑功能盒里写程序,控制机器人做各种动作。
万分感谢大神——先表达感激之情 |
|