Pepper가 피곤하기 전에 쉬는 상자를 만들었습니다.
12264 단어 ChoregrapheNAOqi파이썬Pepper
앱의 Init나 Main에 넣어두면 재생 중에 열을 가지고 버려도 도중에 멈추지 않고 열을 가진 부품만 마음대로 휴식하고 열이 식으면 다시 움직이는 느낌으로 해봅니다.
사용한 API
ALMotionProxy
사용한 Method
getIdlePostureEnabled(const std::string& pChainName)
setIdlePostureEnabled(const std::string& pChainName, const bool& pEnable)
변수
getIdlePostureEnabled(const std::string& pChainName)
setIdlePostureEnabled(const std::string& pChainName, const bool& pEnable)
변수
Monitor cycle (s)
타이머로 일정 간격으로 모터의 온도를 확인합니다.
1초~5000초 간격까지 지정할 수 있습니다.
Motion stop temperature(or more)
여기에서 지정한 온도가 되면 Pepper가 휴식합니다.
40도~70도까지 설정할 수 있습니다. 휴식에서 돌아올 때는 이 온도 미만의 값이 되었을 때가 됩니다.
메커니즘
관리·감시계의 박스에 넣어, 이 기능을 멈추고 싶을 때는 이벤트를 발화시켜 멈춥니다.
Example.py def onLoad(self):
self.timer = None
self.memory = ALProxy("ALMemory")
self.motion = ALProxy("ALMotion")
self.parts = ["Head", "LArm", "RArm", "Legs"]
def onTimer(self):
partList = []
tempList = []
partCount = { "Head":False, "LArm":False, "RArm":False, "Legs":False }
sNameList = ["HeadPitch", "HeadYaw", "LElbowRoll", "LElbowYaw", "LHand", "LShoulderPitch", "LShoulderRoll", "LWristYaw", "RElbowRoll", "RElbowYaw", "RHand", "RShoulderPitch", "RShoulderRoll", "RWristYaw", "KneePitch", "HipRoll", "HipPitch"]
for sName in sNameList:
sKeyName = "Device/SubDeviceList/%s/Temperature/Sensor/Value" % sName
try:
partList.append(sName)
tempList.append(int( self.memory.getData(sKeyName) ))
except:
self.logger.error("No temperature found for this hardware: " + str(sName))
for pName in partList:
if ( "Head" in pName ):
act = "Head"
elif ( "LElbow" in pName or "LHand" in pName or "LShoulder" in pName or "LWrist" in pName ):
act = "LArm"
elif ( "RElbow" in pName or "RHand" in pName or "RShoulder" in pName or "RWrist" in pName ):
act = "RArm"
elif ( "Ankle" in pName or "Hip" in pName or "Knee"):
act = "Legs"
i = tempList[partList.index(pName)]
if i >= int(self.getParameter("Motion stop temperature(or more)")):
if partCount[act] == False:
partCount[act] = True
for part in self.parts:
if partCount[part] and self.motion.getIdlePostureEnabled(part) == False:
self.logger.warn("%s Motion Stopped" % part)
self.motion.setIdlePostureEnabled(part, True)
elif partCount[part] == False and self.motion.getIdlePostureEnabled(part):
self.logger.info("%s Motion Start" % part)
self.motion.setIdlePostureEnabled(part, False)
마지막으로
소스 더럽지만 용서하십시오.
샘플
로봇 시작의 로봇 라이브러리
htps : // 로보-b. 코 m / 레포시 토리 s / 슈마 ry / 49
Reference
이 문제에 관하여(Pepper가 피곤하기 전에 쉬는 상자를 만들었습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mat_aaa/items/4b63d3a5d1607b4814ab
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
def onLoad(self):
self.timer = None
self.memory = ALProxy("ALMemory")
self.motion = ALProxy("ALMotion")
self.parts = ["Head", "LArm", "RArm", "Legs"]
def onTimer(self):
partList = []
tempList = []
partCount = { "Head":False, "LArm":False, "RArm":False, "Legs":False }
sNameList = ["HeadPitch", "HeadYaw", "LElbowRoll", "LElbowYaw", "LHand", "LShoulderPitch", "LShoulderRoll", "LWristYaw", "RElbowRoll", "RElbowYaw", "RHand", "RShoulderPitch", "RShoulderRoll", "RWristYaw", "KneePitch", "HipRoll", "HipPitch"]
for sName in sNameList:
sKeyName = "Device/SubDeviceList/%s/Temperature/Sensor/Value" % sName
try:
partList.append(sName)
tempList.append(int( self.memory.getData(sKeyName) ))
except:
self.logger.error("No temperature found for this hardware: " + str(sName))
for pName in partList:
if ( "Head" in pName ):
act = "Head"
elif ( "LElbow" in pName or "LHand" in pName or "LShoulder" in pName or "LWrist" in pName ):
act = "LArm"
elif ( "RElbow" in pName or "RHand" in pName or "RShoulder" in pName or "RWrist" in pName ):
act = "RArm"
elif ( "Ankle" in pName or "Hip" in pName or "Knee"):
act = "Legs"
i = tempList[partList.index(pName)]
if i >= int(self.getParameter("Motion stop temperature(or more)")):
if partCount[act] == False:
partCount[act] = True
for part in self.parts:
if partCount[part] and self.motion.getIdlePostureEnabled(part) == False:
self.logger.warn("%s Motion Stopped" % part)
self.motion.setIdlePostureEnabled(part, True)
elif partCount[part] == False and self.motion.getIdlePostureEnabled(part):
self.logger.info("%s Motion Start" % part)
self.motion.setIdlePostureEnabled(part, False)
소스 더럽지만 용서하십시오.
샘플
로봇 시작의 로봇 라이브러리
htps : // 로보-b. 코 m / 레포시 토리 s / 슈마 ry / 49
Reference
이 문제에 관하여(Pepper가 피곤하기 전에 쉬는 상자를 만들었습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mat_aaa/items/4b63d3a5d1607b4814ab
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Pepper가 피곤하기 전에 쉬는 상자를 만들었습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mat_aaa/items/4b63d3a5d1607b4814ab텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)