70 likes | 202 Views
U niversal R eal-time B ehavior I nterface. URBI for iCat. Jean-Christophe Baillie ENSTA / Gostai. Aldebaran Robotics. WHAT IS URBI?
E N D
UniversalReal-timeBehaviorInterface URBI for iCat Jean-Christophe Baillie ENSTA / Gostai Aldebaran Robotics
WHAT IS URBI? URBI is a complete solution to control robots, both on a software and hardware level. It is simple & powerful, based on a script language compatible with all types of robots, all OS and it is interfaced with C++, Java or Matlab. The language itself is extensible via a plugins mechanism, which can work as embedded components or distant modules over the Internet. Importanttechnical breakthroughs: native parallel programming & event-based programming.
URBI Engine URBI Module (plugin) Mac OSX, Intel or standard URBI modules (remote) URBI Engine Windows, Linux, … commands messages super calculator or, simply onboard
Examples eyeBrowR URBI is an Object Oriented parallel script language to control the robot on the hardware and software level. camera lipUL URBI Engine 1.0 is now available for iCat All you need is the name of the object // Ball tracking program: whenever (ball.visible) { headPan = headPan + camera.xfov * ball.x & headTilt = headTilt + camera.yfov * ball.y }; // Get up on the Aibo getup: { { leg2 = 90 time:2s & leg3 = 0 time:2s } | leg1 = 90 time:1s | leg2 = 10 time:1s | { leg1 = -10 time:2s & leg3 = 90 time:2s } }; // Event detection at (headSensor ~ 2s) speaker.play("hello.wav"); at (distance < 40) emit collision; ... stop getup;
How to use URBI? telnet or urbilab client headPan.val = 15; headPan.val; [136901543:notag] 15.1030265089 ... C++ client // C++ code with liburbi C++ main() { UClient * client = new UClient("myrobot.ensta.fr"); int pos; pos = complex_calculation(x,y); client->send(“headPan.val = %d;”,pos); } Java client // Java code with liburbi Java import liburbi.UClient; robotC = new UClient(robotname); robotC.send("motor on;"); robotC.setCallback(image, "cam"); URBI.INI onboard scripts • simple commands • functions definition • complex scripts URBI Server Remote/Plugged C++ Module other integrated clients (matlab, python, . . .) // C++ object inherit fro UObject UStart(ball); class ball : UObject { ball(string); UVar x,y; . . . };
Demo code on iCat function cat.amorphe() { lips=100 & eyeBrow=0 & eyeLid=70 & eyesTilt=50 }; function cat.drunk() { eyeBrowR=100 & eyeBrowL=-100 & eyeLidL=50 & eyeLidR=30 & lipUR=0 & lipUL=-100 & lipL=-100 }; function cat.happy() { eyeLid=100 & eyeBrow= -100 & lips=-100 }; function cat.no() { headTilt=50; eyeLid=0; lips=0; eyeBrow=0; timeout(3s) headPan = 0 sin:1500 ampli:80, }; function cat.roll() { headTilt=50; headPan=0; lipU=100; lipL=-100; eyeBrow=-100; eyeLid=100; timeout(4s) { eyesTilt = 0 sin:1s ampli:80 & eyePan = 0 sin:1s ampli:80 phase:pi/2 } }; function cat.blinkaround() { around: at (random(150)==3) { eyeLid = random(50) time:random(800); wait(random(500)); eyeLid = 100 time:random(800); }; }; function cat.expraround() { around: at (random(80)==3) { v=random(200); eyeBrow = v-100; lipU = -v+random(40)-20; lipL = -v+random(40)-20; }; }; function cat.behave() { cat.turnaround() & cat.lookaround() & cat.blinkaround() & cat.expraround() & cat.randompose() }; function cat.stop() { stop randompose; stop around; };
Contact : Jean-Christophe Baillie, contact@urbiforge.com at (talk.finished == true) echo « Thank you for » + « your attention »;