极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 3656|回复: 0

(需要懂choregraphe)NAO机器人的软件choregraphe如何与C程序进行UDP通信的程序疑难

[复制链接]
发表于 2016-3-9 19:55:30 | 显示全部楼层 |阅读模式
急求大神帮忙啊》《
老师让我用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编辑功能盒里写程序,控制机器人做各种动作。
万分感谢大神——先表达感激之情
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊 ( 浙ICP备09023225号 )

GMT+8, 2019-7-22 12:22 , Processed in 0.045443 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表