Pepper 개발을 위해 Python을 이해합니다. -Python 박스 입문편-
6124 단어 Choreographer파이썬PepperNAOqiNAO
사전 쓰기
Pepper나 NAO의 개발을 할 때 Python의 지식은 필수라고 할 수 있습니다.
그래서 간단하지만 Naoqi에서 파이썬 박스를 설명하고 싶습니다.
개발 환경
모델명 : MacBook Pro
OS : Yosemite 10.10.3
프로세서 이름 : Intel Core i5 2.6 GHz
메모리 : 16GB
그래픽 : Intel Iris 1536MB
Choreographe : 2.3.1
주제
파이썬 박스
파이썬 박스란?
우선 파이썬 박스에 대해 간단히 설명하고 싶습니다.
파이썬 박스는 박스 라이브러리 아래에 있습니다.
그렇지 않으면 돋보기에서 검색하십시오.
[Programming]->[Template]->Python 상자
input : "onStart""onStop"
output : "onStopped"
로 구성된 상자입니다.
스크립트
Choreographe 내의 박스는 기본적으로 모두 다음의 구성을 바탕으로 작성되고 있습니다.
스크립트는 다음과 같습니다.
#GeneratedClassの派生クラスがMyClassとなっていることがわかります。
class MyClass(GeneratedClass):
#まずbehaviorが読み込まれた際に初めて呼び出されるのが__init__(self)です。
def __init__(self):
#GeneratedClassの__init__(self)をオーバーライドしていることがわかります。
GeneratedClass.__init__(self)
#ここにはbehaviorが読み込まれた際に呼び出されるものを入れましょう。
def onLoad(self):
#put initialization code here
#ここでは初期化処理を入れましょう。
#behaviorが読み込まれ、すべてのinitが呼び出されたあとに呼ばれます。
pass
def onUnload(self):
#put clean-up code here
#アプリケーション終了時、onInput_onStopに入力があったときに呼ばれます。
pass
def onInput_onStart(self):
#self.onStopped() #activate the output of the box
#onStartに入力があった時に呼ばれます。
#self.onStopped()を記述しないと出力がなされません、注意しましょう。
pass
def onInput_onStop(self):
#onStopに入力があった時に呼ばれます。
self.onUnload() #it is recommended to reuse the clean-up as the box is stopped
self.onStopped() #activate the output of the box
검증
Python 상자가 호출되는 방법을 확인합니다.
각 함수에 Logger를 넣어 실행 순서를 확인했습니다.
모델명 : MacBook Pro
OS : Yosemite 10.10.3
프로세서 이름 : Intel Core i5 2.6 GHz
메모리 : 16GB
그래픽 : Intel Iris 1536MB
Choreographe : 2.3.1
주제
파이썬 박스
파이썬 박스란?
우선 파이썬 박스에 대해 간단히 설명하고 싶습니다.
파이썬 박스는 박스 라이브러리 아래에 있습니다.
그렇지 않으면 돋보기에서 검색하십시오.
[Programming]->[Template]->Python 상자
input : "onStart""onStop"
output : "onStopped"
로 구성된 상자입니다.
스크립트
Choreographe 내의 박스는 기본적으로 모두 다음의 구성을 바탕으로 작성되고 있습니다.
스크립트는 다음과 같습니다.
#GeneratedClassの派生クラスがMyClassとなっていることがわかります。
class MyClass(GeneratedClass):
#まずbehaviorが読み込まれた際に初めて呼び出されるのが__init__(self)です。
def __init__(self):
#GeneratedClassの__init__(self)をオーバーライドしていることがわかります。
GeneratedClass.__init__(self)
#ここにはbehaviorが読み込まれた際に呼び出されるものを入れましょう。
def onLoad(self):
#put initialization code here
#ここでは初期化処理を入れましょう。
#behaviorが読み込まれ、すべてのinitが呼び出されたあとに呼ばれます。
pass
def onUnload(self):
#put clean-up code here
#アプリケーション終了時、onInput_onStopに入力があったときに呼ばれます。
pass
def onInput_onStart(self):
#self.onStopped() #activate the output of the box
#onStartに入力があった時に呼ばれます。
#self.onStopped()を記述しないと出力がなされません、注意しましょう。
pass
def onInput_onStop(self):
#onStopに入力があった時に呼ばれます。
self.onUnload() #it is recommended to reuse the clean-up as the box is stopped
self.onStopped() #activate the output of the box
검증
Python 상자가 호출되는 방법을 확인합니다.
각 함수에 Logger를 넣어 실행 순서를 확인했습니다.
#GeneratedClassの派生クラスがMyClassとなっていることがわかります。
class MyClass(GeneratedClass):
#まずbehaviorが読み込まれた際に初めて呼び出されるのが__init__(self)です。
def __init__(self):
#GeneratedClassの__init__(self)をオーバーライドしていることがわかります。
GeneratedClass.__init__(self)
#ここにはbehaviorが読み込まれた際に呼び出されるものを入れましょう。
def onLoad(self):
#put initialization code here
#ここでは初期化処理を入れましょう。
#behaviorが読み込まれ、すべてのinitが呼び出されたあとに呼ばれます。
pass
def onUnload(self):
#put clean-up code here
#アプリケーション終了時、onInput_onStopに入力があったときに呼ばれます。
pass
def onInput_onStart(self):
#self.onStopped() #activate the output of the box
#onStartに入力があった時に呼ばれます。
#self.onStopped()を記述しないと出力がなされません、注意しましょう。
pass
def onInput_onStop(self):
#onStopに入力があった時に呼ばれます。
self.onUnload() #it is recommended to reuse the clean-up as the box is stopped
self.onStopped() #activate the output of the box
연결되지 않은 상자를 정렬했습니다.
[INFO] init 0
[INFO] init 1
[INFO] init 2
[INFO] init 3
[INFO] onLoad 0
[INFO] onLoad 1
[INFO] onLoad 2
[INFO] onLoad 3
#ここでrootのonStopをダブルクリック
[INFO] onUnload 0
[INFO] onUnload 1
[INFO] onUnload 2
[INFO] onUnload 3
init이 호출되고 onLoad가 호출되었음을 알 수 있습니다.
그런 다음 onUnload가 차례로 호출되어 종료됩니다.
직렬로 결선해 보았습니다.
[INFO] init 0
[INFO] init 1
[INFO] init 2
[INFO] init 3
[INFO] onLoad 0
[INFO] onLoad 1
[INFO] onLoad 2
[INFO] onLoad 3
[INFO] onInput_onStart 0
위에서도 썼지만 "onInput_onStart"메소드에 self.onStopped()를 추가하지 않으면 출력이 이루어지지 않습니다.
그래서 다음은 self.onStopped()를 넣은 것으로 검증합니다.
2에 self.onStopped()를 넣은 것.
"onInput_onStart"메소드에 self.onStopped()를 추가했습니다.
[INFO] init 0
[INFO] init 1
[INFO] init 2
[INFO] init 3
[INFO] onLoad 0
[INFO] onLoad 1
[INFO] onLoad 2
[INFO] onLoad 3
[INFO] onInput_onStart 0
[INFO] onInput_onStart 1
[INFO] onInput_onStart 2
[INFO] onInput_onStart 3
[INFO] onUnload 0
[INFO] onUnload 1
[INFO] onUnload 2
[INFO] onUnload 3
올바르게 끝까지 출력되었습니다.
스크립트는 그대로 ☓로 연결되었습니다.
[INFO] init 0
[INFO] init 1
[INFO] init 2
[INFO] init 3
[INFO] onLoad 0
[INFO] onLoad 1
[INFO] onLoad 2
[INFO] onLoad 3
[INFO] onInput_onStop 0
[INFO] onUnload 0
[INFO] onInput_onStop 1
[INFO] onUnload 1
[INFO] onInput_onStop 2
[INFO] onUnload 2
#注目
[INFO] onUnload 3
[INFO] onInput_onStop 3
[INFO] onUnload 0
[INFO] onUnload 1
[INFO] onUnload 2
[INFO] onUnload 3
주목과 기술한 곳입니다만, onInput_onStop과 onUnload의 순서가 역전해 불려 가고 있는 것을 알 수 있습니다.
몇번이나 반복해 보았습니다만, 써내지는 순서가 역전하는지, 불려 가는 순서가 역전하는지 모릅니다만, 0~2의 때와 같이 올바른 순서로 움직일 때도 있으면, 3 때처럼 역전하는 경우도 있습니다.
원인은 알 수 없습니다. Choreographe의 버그일지도 모르겠네요.
또한 onUnload가 두 번 호출되는 것에 주목합니다. ☓에 input했을 때와 behavior가 종료할 때의 2도 불려 갑니다.
감상
계속 기사로서 자작 함수의 활용 방법과 외부 라이브러리를 이용하는 방법을 써 가고 싶습니다.
Reference
이 문제에 관하여(Pepper 개발을 위해 Python을 이해합니다. -Python 박스 입문편-), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Ryo87/items/fe00ae0f0c0cc34092ba
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Pepper 개발을 위해 Python을 이해합니다. -Python 박스 입문편-), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Ryo87/items/fe00ae0f0c0cc34092ba텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)