2. About ourselves Ourselves HirotakaNiisato(@hirotakaster) Noritsuna Imamura(@noritsuna) About SIProp Project Open Source Software Project The world of media (communication medium) is extended.
3. Agenda Summary Part “Software” Detect the face Calculate the course Calculate the distance Part “Hardware” How to control the robot How to process the analog data Need more power supply
4. Summary This product is "Auto Chasing Turtle". By autonomous control, this robot recognizes people's face and approaches to the detected human.
5. Robot behavior Rotate and look for the human who becomes a target. Detect the human with recognizing people's face by using RGB camera of Kinect. If it can detect the human, it calculates the course which it should follow. And It direction is changed. Calculate the distance to target by using Z(depth) camera of Kinect. Walk toward to target. 2-5 are repeated until it becomes a suitable distance. And if losts target, returns to 1. The scene that it is working in real time can be seen by iPad.
10. Why this project? DENSUKE project Mobile Internet Device with Cyber-Pet User Interface
11. DENSUKE project OESF(Open Embedded Software Foundation) Future Systems WG’s mission http://fswg.oesf.biz/ Project leader Mr. Ohtsuki The Father of AIBO Partners
13. Why KINECT and Robot ? Application have changed Game, Motion Controller, Nunchuk Cell Phone, Tablet
14. Why KINECT and Robot ? KINECT show the next future Camera, Depth censor. Recognition of human’s data. Mobility Problem ...
15. Why KINECT and Robot ? KINECT on Robot is result of mobility problem. sensory system drive system Robot movement Camera data Depth censor Analyze Grey Walter's turtle robot in 1949.
19. About ofxDroidKinect This is the Android Application Framework which runs on openFrameworks & uses Kinect. Using softwares openFrameworks for Android Linaro Android
20. Using Kinect OpenKinect Open Source Free Library openFrameworks OpenNI PrimeSense Initial support for the Android & ARM platforms. Kinect for Windows SDK Kinect Services for Microsoft Robotisc Developer Studio
21. Control Robot and KINECT ofxDroidKinect USB Serial openFrameworks Linaro/Android Wifi
22. Analyze KINECT data Detect the Face Calculate the course Calculate the distance 1. detect 3. distance 2. course
23. Detect the face What’s data ? 640x480 RGB image, using KINECT’s camera, Characteristics of human face. KINECT Image
24. Detect the face Not all frame, but realtime analyzing. Auto search around people. analyze thread 10fps image thread FaceDetector detector = new FaceDetector(w, h, faces.length); intnumFaces = detector.findFaces(bitmap, faces); if (numFaces > 0) { // Calculate the course, Calculate the distance } else { // search around }
25. Calculate the course Using width. Specify centerposition of face. Specify position of the face in 4-sections relavive to KINECT’s image.
26. Calculate the course Using height. Change Kinect’s angle. Specify position of the face in image relavive to KINECT’s image. if (pointX > 0 && pointX < w/4) { DroidBot.getInstance().turnRight2(); // right position } else if (pointX >= w/4 && pointX <= 3*w/4) { ; // center position } else if (pointX > 3*w/4 && pointX <= w) { DroidBot.getInstance().turnLeft2(); // left position } int angle = 30 - pointY*30/h; if (angle > 0 && angle <= 30) OFAndroid.setAngle(angle); void Java_cc_openframeworks_OFAndroid_setAngle(JNIEnv* env, jobject thiz, jint angle) { if (angle > 30) angle = 30; else if (angle < 0) angle = 0; kinectApp->kinect.setCameraTiltAngle(angle); }
27. Calculate the distance Mesure the depth of specified point using KINECT. Robots walk forward or back, depending on the mesured distance. int dist = OFAndroid.getDistance(pointX, pointY); if (dist < 100) DroidBot.getInstance().walkBack4(); else if (dist >= 100 && dist < 150) DroidBot.getInstance().walkToward4(); else if (dist >= 150 && dist < 200) DroidBot.getInstance().walkToward8(); else if (dist >= 200 && dist < 300) DroidBot.getInstance().walkToward16(); else if (dist >= 300) DroidBot.getInstance().walkToward32(); JNIEXPORT jint JNICALL Java_cc_openframeworks_OFAndroid_getDistance(JNIEnv* env, jobjectthiz, jintobjx, jintobjy){ return (int)kinectApp->kinect.getDistanceAt(objx, objy); }
28. Performance problem Data analyze and image processing Face recognition More resource !! GPU, Multi core.
34. How to process more sensors? Analog data is stream data! Need powerful processor Need to save power for Mobile Now Solution ARM base Processor dual Cortex A9 MALI 400 GPU Next trend GPGPU FPGA
35. How to optimize for each sensors? http://linaro.org/ Mission Optimize for each SoC & Platform We are committer!
37. MAKE:style Hardware beagleboard-xM KONDO Animal Kinect Software ofxDroidKinect Linaro Kernel Android(Embedded Master) Do It Yourself ⇒Do It With Others!