gpt4 book ai didi

python - 停止在 nao 机器人上运行的 Python 脚本触摸他的头

转载 作者:行者123 更新时间:2023-12-01 02:37:20 27 4
gpt4 key购买 nike

我的问题如下。我有一个Python脚本被执行,以便机器人执行各种操作而不会停止,直到执行停止,但是出于安全原因(以防机器人发疯并想要杀死我们所有人)我需要添加此指令来停止它使用他头部的触摸传感器,以防被按下。

我读了一些关于 ALTouch 模块的内容,用它可以生成 TouchChanged() 模块,但它作用于所有传感器(包括运动),而不仅仅是头部的触摸传感器。

欢迎任何想法或相关文档。

这是我的一些代码:

class SoundProcessingModule(object):

def __init__( self, app):

ttsProxy.say("Touch my head at any moment to stop me")

super(SoundProcessingModule, self).__init__()
app.start()
session = app.session

self.audio_service = session.service("ALAudioDevice")
self.isProcessingDone = False
self.nbOfFramesToProcess = 100
self.framesCount=0
self.micFront = []
self.module_name = "SoundProcessingModule"

def startProcessing(self):
self.audio_service.setClientPreferences(self.module_name, 16000, 3, 0)
self.audio_service.subscribe(self.module_name)

while self.isProcessingDone == False:
time.sleep(1)

self.audio_service.unsubscribe(self.module_name)

def processRemote(self, nbOfChannels, nbOfSamplesByChannel, timeStamp, inputBuffer):
#ReadyToDance
postureProxy.goToPosture("StandInit", 0.5)

self.framesCount = self.framesCount + 1
if (self.framesCount <= self.nbOfFramesToProcess):
print(self.framesCount)
self.micFront=self.convertStr2SignedInt(inputBuffer)
rmsMicFront = self.calcRMSLevel(self.micFront)
print ("Nivel RMS del microfono frontal = " + str(rmsMicFront))
rmsArray.insert(self.framesCount-1,rmsMicFront)

#-40 y -30
if promedio >= -40 and promedio <= -30 :
#Some dance moves

#-29 y -20
elif promedio >= -29 and promedio <= -20:
#Some dance moves

#-19 y -11
elif promedio >= -19 and promedio <= -11:
#Some dance moves

else :
self.isProcessingDone=True
#Plot RMS signal
plt.plot(rmsArray)
plt.ylabel('RMS')
plt.xlabel('Frames')
plt.text(np.argmin(rmsArray), np.min(rmsArray) - 0.1, u'Mínimo', fontsize=10, horizontalalignment='center',
verticalalignment='center')
plt.text(np.argmax(rmsArray), np.max(rmsArray) + 0.1, u'Máximo', fontsize=10, horizontalalignment='center',
verticalalignment='center')
print("")
print ("El promedio total del sonido es: " + str(np.mean(rmsArray)))
print("El maximo total del sonido es: " + str(np.max(rmsArray)))
print("El minimo total del sonido es: " + str(np.min(rmsArray)))
plt.show()
postureProxy.goToPosture("Sit", 1.0)

def calcRMSLevel(self,data) :
rms = 20 * np.log10( np.sqrt( np.sum( np.power(data,2) / len(data) )))
return rms

def convertStr2SignedInt(self, data) :
signedData=[]
ind=0;
for i in range (0,len(data)/2) :
signedData.append(data[ind]+data[ind+1]*256)
ind=ind+2

for i in range (0,len(signedData)) :
if signedData[i]>=32768 :
signedData[i]=signedData[i]-65536

for i in range (0,len(signedData)) :
signedData[i]=signedData[i]/32768.0

return signedData


def StiffnessOn(proxy):
# We use the "Body" name to signify the collection of all joints
pNames = "Body"
pStiffnessLists = 1.0
pTimeLists = 1.0
proxy.stiffnessInterpolation(pNames, pStiffnessLists, pTimeLists)

if __name__ == "__main__":
parser = argparse.ArgumentParser()
#Es necesario estar al pendiente de la IP del robot para moficarla
parser.add_argument("--ip", type=str, default="nao.local",
help="Robot IP address. On robot or Local Naoqi: use '127.0.0.1'.")
parser.add_argument("--port", type=int, default=9559,
help="Naoqi port number")

args = parser.parse_args()
# Inicializamos proxys.
try:
proxy = ALProxy("ALMotion", "nao.local", 9559)
except Exception, e:
print "Could not create proxy to ALMotion"
print "Error was: ", e

try:
postureProxy = ALProxy("ALRobotPosture", "nao.local", 9559)
except Exception, e:
print "Could not create proxy to ALRobotPosture"
print "Error was: ", e

try:
ttsProxy = ALProxy("ALTextToSpeech" , "nao.local", 9559)
except Exception, e:
print "Could not create proxy to ALTextToSpeech"
print "Error was: ", e

try:
memory = ALProxy("ALMemory" , "nao.local", 9559)
except Exception, e:
print "Could not create proxy to ALMemory"
print "Error was: ", e

try:
connection_url = "tcp://" + args.ip + ":" + str(args.port)
app = qi.Application(["SoundProcessingModule", "--qi-url=" + connection_url])
except RuntimeError:
print ("Can't connect to Naoqi at ip \"" + args.ip + "\" on port " + str(args.port) +".\n"
"Please check your script arguments. Run with -h option for help.")
sys.exit(1)

MySoundProcessingModule = SoundProcessingModule(app)
app.session.registerService("SoundProcessingModule", MySoundProcessingModule)
MySoundProcessingModule.startProcessing()

机器人根据从前置麦克风捕获的 RMS 电平跳舞,但我需要在触摸头部传感器(或任何传感器)时随时停止它。

最佳答案

您可以仅使用 3 个事件(对于 3 个触觉按钮)订阅头部,而不是订阅 TouchChanged:

  • FrontTactilTouched
  • MiddleTactilTouched
  • 后触感触摸

当触摸开始时,它们的值将升高为 1,当触摸结束时,它们的值将升高为 0。因此,您需要进行过滤,并且仅在值为 1 时停止您的舞蹈。

关于python - 停止在 nao 机器人上运行的 Python 脚本触摸他的头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46083988/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com