我正在尝试创建一个程序,该程序的一部分将使用naoqi Python SDK将帧中的实时视频(或图像)从PC的网络摄像头传输到Pepper的平板电脑。在机器人一侧,将有一个使用ALTabletService的showWebview函数的程序将图像显示为html网页。但是,此过程开始后,它仅进行几秒钟,然后屏幕返回其主页。我猜想机器人会抢占我的程序。但这在playVideo函数中不会发生。有什么办法解决这个问题吗?

PC侧:

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html')

def gen(camera):
    # Set our pipelines state to Playing.
    video_pipeline.set_state(Gst.State.PLAYING)
    audio_pipeline.set_state(Gst.State.PLAYING)
    while True:
        frame = camera.get_frame()
        yield (b'--frame\r\n'
            b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n\r\n') #sending frames to the webpage

@app.route('/video_feed')
def video_feed():
    try:
        return Response(stream_with_context(gen(VideoCamera())), mimetype='multipart/x-mixed-replace; boundary=frame')
    except Exception:
        return None

if __name__ == '__main__':
#   app.run(host='0.0.0.0', port = http, debug=True, threaded=True)
    http_server = WSGIServer(('0.0.0.0', http), app) #creating a server with open ip
    http_server.serve_forever()


胡椒面:

tabletService = session.service('ALTabletService')
tabletService.loadUrl('http://' + user_ip + ':' + str(user_http_port) + '/')
tabletService.showWebview()

最佳答案

这是因为Pepper的“自主生活”是围绕activities建立的,并且每当活动失去焦点时,Pepper都会重置所有内容-语言,姿势,LED以及平板电脑。

因此,理想情况下,您的代码应位于应用程序内部(即标记为“互动”的行为),并且只要它具有焦点,平板电脑就不会重置。

(edit)创建一个独立的Python脚本应用程序,一种简单的方法是使用机械手jumpstarter,这是一个从模板(包括所有样板等)生成应用程序的python脚本,有关说明,请参见here

关于python - 如何阻止Pepper机器人抢占其平板电脑?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50696587/

10-13 07:43