欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

机器人判断人是否接近

程序员文章站 2022-03-11 09:37:46
...
一个Cruzr机器人项目,要实现人离开显示迎宾表情,人接近跳到程序主页,
方法是:在onCreate 中加传感器监听,在每2s内检测数据变动,判断距离是否在指定范围内,在范围内则发出 迎接语音提示,然后再判断是否在主页,否 则用finish 和 startActivity跳转到主页

下面是代码



    void initWelcome(){
        try {
//            List<SensorDevice> sensorDeviceList = sensorManager.getDeviceList();
//            for (SensorDevice sd:sensorDeviceList ) {
//                Log.d(TAG, sd.getDescription()+sd.getId()+sd.getName()+sd.getType());
//            }
            SensorManager sensorManager = Robot.globalContext().getSystemService(SensorManager.SERVICE);
            String sensorId="human_detect";
            //判断是否打开,否则打开
            if(sensorManager.isEnabled("human_detect")){
                Log.d(TAG, "human_detect isEnabled");
            }else{
                Log.d(TAG, "human_detect is not Enabled");
                sensorManager.enable(sensorId).get();
            }
            //传感器监听
            SensorListener sensorListener = new SensorListener() {
                //传感器变化事件
                @Override
                public void onSensorChanged(SensorDevice sensorDevice, SensorEvent sensorEvent/* [1] */) {

                    VisualManager mVisualManager = VisualManager.getInstance();
                    EmotionManager emotionManager = Robot.globalContext().getSystemService(EmotionManager.SERVICE);
                    ExpressingOption /* [1] */ option = new ExpressingOption.Builder(
                            Uri.parse("emotion://va/littlestar_smile")).setSticky(true).setLoops(1).build();
                    if(sensorEvent.getTimestamp()-lastTime>2000){//间隔2秒 判断一次
                        float[] tmpValues=sensorEvent.getValues(); //传感器的值
                        if(tmpValues[0]<2&&tmpValues[1]<0.8){ //现在有人接近了
                            //关闭空闲功能
                            LeisureManager leisureManager=LeisureManager.get();
                            leisureManager.prohibitedLeisure();
                            leisureManager.wakeup();


                            if(!humanStand){ //之前没有人,现在有人了
                                mVisualManager.stop("visualIndex");//人脸检测关闭
//                                RobotAssist.motionRest();
                                //Date 的 getHours()过时的方法
                                Calendar cal = Calendar.getInstance();
                                int hours = cal.get( Calendar.HOUR_OF_DAY );
                                String greet="你好";
                                if (hours>7&&hours<11){
                                    greet="上午好";
                                }else if(hours>12){
                                    greet="下午好";
                                }else if(hours>10&&hours<14){
                                    greet="中午好";
                                }
                                greet+="我是门诊导诊机器人,有什么需要帮忙的?";
                                RobotAssist.speeekWithMotion2(greet).done(new DoneCallback() {
                                    @Override
                                    public void onDone(Object o) {
                                        if(!isCurrent)
                                        restartApp2();//回到首页
                                    }
                                });
                                emotionManager.dismiss();//关表情
//                                initVisual();
//                                getCurr();
                            }

                            humanStand=true;
                        }else {
                            if(humanStand=true){
                                humanStand=false;
                                emotionManager.express(option); //promise =
                                RobotAssist.motionRest();
                            }
                        }
                        lastTime=sensorEvent.getTimestamp();
                        values = tmpValues; //[2.0, 0.0]
//                        initVisual();
                    }

//                    Log.d(TAG, sensorEvent.toString());
                }
            };
            sensorManager.registerListener("human_detect", sensorListener);

        }  catch (SensorException e) {
            e.printStackTrace();
        } catch (CancelledException e) {
            e.printStackTrace();
        }
    }

//    void restartApp1(){
//        ActivityManager manager = (ActivityManager)this.getSystemService(Context.ACTIVITY_SERVICE);
//        manager.restartPackage("com.example.test");
//    }
    void restartApp2(){
        Intent intent= new Intent(IndexActivity.this,IndexActivity.class);
        startActivity(intent);
//        System.exit(0);
        finish();
    }
相关标签: java