Pepper가 피곤하기 전에 쉬는 상자를 만들었습니다.

어플의 연속 재생이나 개발시에 애니메이션을 만들고 있는 도중에 모터가 열을 가져 버려 도중에 개발이 멈추어 버리는 일이 있으므로, 피곤해 버리기 전에 마음대로 휴식해 주는 박스를 만들었습니다.
앱의 Init나 Main에 넣어두면 재생 중에 열을 가지고 버려도 도중에 멈추지 않고 열을 가진 부품만 마음대로 휴식하고 열이 식으면 다시 움직이는 느낌으로 해봅니다.

사용한 API



ALMotionProxy

사용한 Method



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

    좋은 웹페이지 즐겨찾기