From BlenderWiki

Jump to: navigation, search

[edit] Blender For Robotics

This Wiki is dedicated to robotic projects using Blender in some way. It's also a good place to post scripts and patches for Blender that are useful for robotic applications. In addition, it wants to collect the opinions and suggestions of robotics people about how Blender's design, implementation and user interface could be improved in a way that would make the use of Blender in robotics applications more attractive.

The natural complement to this Wiki page is the Blender for Robotics mailing list, where the real discussions are supposed to take place.

[edit] What do we want to build?

This section discusses the expectations behind this effort, and possible collaborations.

[edit] The big picture

Because the programming of complex robotics systems has a lot in common with the computer animation of simulated creatures, it makes sense to advocate the use of Blender within the robotics community (both research and industry!), as well as to advocate the implementation within Blender of motion algorithms (control, inverse kinematics and dynamics, motion specification, sensor processing, etc.) that have proven their value in robotics. In addition to these functional opportunities, Blender has another potentially very valuable tool for robot programming, namely its Game Engine, a graphical programming environment to define the behaviour of actors in a game, allowing to interface to the world via sensors and actuators, and to control the actors' actions via controllers. The result could be a very flexible and performant robotics studio that could become the open source foundation of various toolchains in robotics and other engineering domains (automation, traffic control, gait analysis, motion capturing for animation, etc.).

[edit] Normalized interfaces to robotics hardware

A first step towards the above-mentioned big picture is the definition of normalized (or standardized) interfaces and naming of all common objects used in robotics contexts. For example, the class of actuators and sensors that we want to interface with, the set of control algorithms that are common in robotics, or the motion interfaces to the kinematic families of most common robotics platforms (arms, hands, as well as mobile platforms). In principle, this is a task for the whole robotics community, and not just for the subset that is interested in Blender; however, very little concrete collaboration has taken place in this context until now...

Here is an overview of the generic aspects of the robotics components that are already available in the Blender Game Engine, actuators, sensors and controllers:

  • actuators in robotics have basically four control modes: position, velocity, acceleration, or torque. (Also current is an actual control mode, but only when one wants to take the dynamics of the electric motor into account!) The torque control mode requires a dynamic model of the robot that the actuator is acting on, in order to calculate the position update of the robot under the applied torque. Position is the simplest to interface in Blender, currently, since computer animation packages typically work only at position level. Velocity and acceleration require some for of state information to be integrated into the Game Engine. (Or does that exist already?). Anyway, (most) actuator interfaces are rather simple, at least at the setpoint specification level; for non-position interfaces, Blender must be extended with integrators that transform the instantaneous velocity, acceleration or torque inputs into (a time series of) position updates.
  • sensors in robotics can be (roughly) of two different kinds:
    • proprioceptive: that means, 'sensing the internal state' of the robot, and that almost always boils down to the complement of the 'actuators' above, that is the sensing of the position, velocity, acceleration and/or the torque at the robot's joints.
    • exteroceptive, that means, 'sensing the interaction of the robot with its environment'. This category carries many sub-categories:
      • distance sensors (laser range scanners, for example)
      • force sensors (at the "wrist" of a robot arm, the "foot" of a humanoid robot, or the "fingertip" of a robothand)
      • camera's, that take images of the scene around the robot.
Again, each of these categories is not too difficult to give an interface.
  • controllers: the number of robot control algorithms is rich, but still enumerably finite, so some initial standardization would be possible to: 1 DOF PID control; simple trajectory planning to reach goals; full dynamic control of humanoid robot armatures;...

[edit] Expected/Wished features

Please mention your lab/contact after features!

  • Controlable by external middlewares (like ROS, YARP, VRPN, Purple, ORCA, CORBA, ICE, ...) (KULeuven, LAAS)
  • On-line visualisation of robot experiments: when connecting a running robotics demo to a corresponding simulated version in Blender, the latter could graphically display a selection of all available measurement values that the demo programmers want to monitor. (KULeuven)
  • Improved support for realistic inverse and forward dynamics. (KULeuven)
  • Easier user interface to build robot systems, and to program the motions of these systems, including motions that are based on current sensor measurements. (KULeuven)
  • Impoved simulation of robotics sensors.
  • In conjunction with the point above, imprecise readings and measurements from sensors and with respect to actuators -- the real world does not provide 26 digits of precision to its actions. It makes for a better simulation and transition to an actual robotics platform is the inputs and outputs have a small bit of noise (it also forces the developer to pay attention when designing control systems! ;) (douglas-dot-thom-at-gmail-dot-com)

[edit] Main collaboration areas

  • Helping each other to discover relevant Blender features (or the lack thereof).
  • Definition of the needs/requirements/wishes amongst the robotic community.
  • Discussion on the quality/flexibility/appropriateness of robotics algorithms that are suggested for inclusion into Blender.
  • Central repository with reusable robotic components → models of robots, sensors, actuators, ...

[edit] Current active projects

  • OpenRobots Simulator, maintened by LAAS-CNRS, Project page on Launchpad. Status: drafting stage, two dedicated full-time engineers (one at ONERA, one at LAAS-CNRS) are working on the project, until June/July 2010.
  • KDL (Orocos' Kinematics & Dynamics Library) integration into Blender, with current focus on improving the constraint-based IK (inverse kinematics) motion specification in Blender. Status: partime professional development by Benoit Bolsee.


[edit] Resources

[edit] Game Engine

[edit] Blender 2.5 specific features


[edit] Uses examples

[edit] Python scripts


[edit] Integration with middlewares

[edit] Links to other relevant resources

[edit] External links