[Robotics] Python control of armature in the GE

Benoit Bolsee benoit.bolsee at online.be
Sun Sep 20 16:41:14 CEST 2009


Hi Markus,

To support this feature, I added considerable amount of new features in
the GE Py class management system, which makes the patch quite big and
complex. I tried to apply it to 2.49 branch using SVN automatic merge
and it didn't work: too many things had already change between 2.49 and
2.5 when I created this feature. Only a manual merge is possible and
it's not an easy job, precisely because of these changes. Also, 2.49 is
currently in 'feature freeze' state which does not permit new features
although there is some tolerance on GE features.

I don't have much time available right now to do this porting effort but
I can work on it on a regular basis and do it in a few weeks time. Let
me know if this fits your planning. Best is of course that you can work
with 2.5.

/Benoit

> -----Original Message-----
> From: robotics-bounces at blender.org 
> [mailto:robotics-bounces at blender.org] On Behalf Of Markus Mehrwald
> Sent: vendredi 18 septembre 2009 16:01
> To: Blender and Robotics
> Subject: Re: [Robotics] Python control of armature in the GE
> 
> 
> Hi Benoit,
> 
> is it possible to extract your part for reading the joint 
> angles in the 
> game engine to use it in the current version of blender 
> without the IK? 
> My problem is, at our institute we developed an IK which 
> unfortunately 
> uses numPy which is not yet ported to Python3. If I get it to 
> work it is 
> very likely that we provide the code so everyone can use it. It is 
> especially designed to control 7 DOF robots.
> 
> Regards,
> Markus
> 
> 
> Benoit Bolsee schrieb:
> > You can read armatures (all poseChannel and bone fields 
> that matters 
> > in
> > the GE) and you can write pose channels (only 
> position/orientation though).
> > The detailed documentation on this API in the BPY_GE 
> directory that you 
> > will find in the builds. Open the index.html in your 
> browser and select 
> > the BL_ArmatureObject, BL_ArmatureChannel, BL_ArmatureBone 
> classes on 
> > the left panel: you will find all the properties that you 
> can read or 
> > write in the GE.
> >  
> > Here is an example on how you can get access to the pose 
> channels in a
> > Python controller in the GE:
> >  
> > cont = GameLogic.getCurrentController()
> > # get reference to armature object
> > arm = cont.owner
> > # list of pose channels for all bones
> > channels = arm.channels
> > # access by bone name   
> > pose=channels['Bone']  
> > # read current joint rotation
> > print (pose.joint_rotation)
> > # set joint rotation for next frame
> > pose.joint_rotation = [0.0, 0.0, 0.1]
> > # you can also set euler angle
> > # pose.euler_rotation = [x,y,z]
> > # you can get rest pose information from the bone
> > bone = pose.bone
> > # all properties are read-only
> > print (bone.bone.mat)
> > # make sure the pose gets updated on next graphic frame
> > arm.update()
> > The above code shows the path of references:
> > 
> GameLogic.getCurrentController().owner.channels["<bone_name>"].<pose 
> > properties>
> > 
> GameLogic.getCurrentController().owner.channels["<bone_name>"].bone.<b
> > one
> > properties>
> >  
> > There is also a path for constraints: 
> > 
> GameLogic.getCurrentController().owner.constraints["<bone_name>:<const
> > raint_name>"].<constraint
> > properties>
> >  
> > Thanks for confirming that the build works on a recent 
> Ubuntu distro, 
> > I
> > have upgrade mine for a long time.
> >  
> > /benoit
> > 
> >     -----Original Message-----
> >     *From:* robotics-bounces at blender.org
> >     [mailto:robotics-bounces at blender.org] *On Behalf Of 
> *Florian Lier
> >     *Sent:* lundi 14 septembre 2009 18:18
> >     *To:* Blender and Robotics
> >     *Subject:* Re: [Robotics] Python control of armature in the GE
> > 
> >     Hey all,
> > 
> >     for claryfication ... I can read write armatures in the GE now?!
> >     This is what I understood from the last mails :)
> > 
> >     My goal is to write a time triggered script which 
> manipulates the
> >     armature.
> > 
> >     Benoit - if so, can you provide us with some sample code?
> > 
> >     BTW: You build works fine on Ubuntu (32Bit) ) 9.04
> > 
> > 
> >     Cheers, Florian
> > 
> > 
> >     Benoit Bolsee wrote:
> >>     Blender 2.5 needs Python 3.1 indeed (at least the GE). 
> >>     Regarding Blender module, yes it's gone, you need to 
> switch to the new
> >>     RNA and operator API.
> >>     You have the documentation (still partial) here :
> >>      http://www.graphicall.org/ftp/ideasman42/html/bpy-module.html
> >>
> >>     The principle is that you get reference to the data 
> block you want to
> >>     manipulate from the context
> >>     
> (http://www.graphicall.org/ftp/ideasman42/html/bpy.types.Conte
> xt-class.h
> >>     tml): you start from the main and dig through it.
> >>
> >>     Afaik it's not available in the GE yet.
> >>     So in the GE you must stick with GE API only, which 
> hasn't changed.
> >>     You will noticed that I implemented proxy classes in 
> the GE to bone,
> >>     pose channel, and armatures. So you don't need bpy for that.
> >>
> >>     I hope this news are not too disappointing ;-)
> >>
> >>     Regards,
> >>     Benoit
> >>
> >>
> >>
> >>       
> >>>     -----Original Message-----
> >>>     From: robotics-bounces at blender.org 
> >>>     [mailto:robotics-bounces at blender.org] On Behalf Of 
> Markus Mehrwald
> >>>     Sent: vendredi 11 septembre 2009 16:04
> >>>     To: Blender and Robotics
> >>>     Subject: Re: [Robotics] Python control of armature in the GE
> >>>
> >>>
> >>>     Hi Benoit,
> >>>
> >>>     I figured out some other problems now. I got Blender 
> to compile only 
> >>>     with Pyhton 3.1 but now I cannot use my scripts anymore with 
> >>>     the error:
> >>>
> >>>     Traceback (most recent call last):
> >>>        File "Steuerung.py", line 4, in <module>
> >>>     ImportError: No module named Blender
> >>>
> >>>     Do you know what this could be or is there already a 
> >>>     documentation for 2.5?
> >>>
> >>>     Thanks,
> >>>     Markus
> >>>
> >>>     Benoit Bolsee schrieb:
> >>>         
> >>>>     I fixed CMake in the itasc branch. Sorry for the delay.
> >>>>
> >>>>     /benoit
> >>>>
> >>>>           
> >>>>>     -----Original Message-----
> >>>>>     From: robotics-bounces at blender.org
> >>>>>     [mailto:robotics-bounces at blender.org] On Behalf Of 
> Markus Mehrwald
> >>>>>     Sent: vendredi 11 septembre 2009 11:21
> >>>>>     To: Blender and Robotics
> >>>>>     Subject: Re: [Robotics] Python control of armature in the GE
> >>>>>
> >>>>>
> >>>>>     Hi,
> >>>>>
> >>>>>     I just managed it to compile the branch with the 
> ikplugin. For some
> >>>>>     reasons I was not able to compile because of a few 
> errors. I 
> >>>>>     think its 
> >>>>>     just some little changes in the CMake files. First 
> of all the 
> >>>>>     BIK_api.h 
> >>>>>     was not found. I did it quick and dirty by copying the full 
> >>>>>     path in the 
> >>>>>     files where it is needed. The second thing was that 
> obviously 
> >>>>>     the libs 
> >>>>>     bf_ikplugin and bf_ITASC are not in the list of 
> libs to link 
> >>>>>     against. Maybe you did not update the CMakeList or was it a 
> >>>>>     problem of my computer?
> >>>>>
> >>>>>     Regards,
> >>>>>     Markus
> >>>>>
> >>>>>
> >>>>>     Benoit Bolsee schrieb:
> >>>>>             
> >>>>>>     Hi,
> >>>>>>      
> >>>>>>     I have added support for controlling armatures through
> >>>>>>               
> >>>>>     Python in the
> >>>>>             
> >>>>>>     GE.
> >>>>>>     This is provided through the new proxy class
> >>>>>>               
> >>>>>     BL_ArmatureChannel that
> >>>>>             
> >>>>>>     corresponds to the pose channel structure. Most 
> attributes match
> >>>>>>     directly the Blender bPoseChannel structure but I added a 
> >>>>>>     'joint_rotation' attribute that gives direct access to
> >>>>>>               
> >>>>>     joint angles. You
> >>>>>             
> >>>>>>     can use this attribute to set the joint angles from
> >>>>>>               
> >>>>>     external data or
> >>>>>             
> >>>>>>     your own calculation and the armature will move according
> >>>>>>               
> >>>>>     to it. If the
> >>>>>             
> >>>>>>     armature is controlled by IK, you can read the joint angles
> >>>>>>               
> >>>>>     computed by
> >>>>>             
> >>>>>>     the algorithm. Full details is provided in the BPY 
> documentation
> >>>>>>     included in the packages below. Download them if you want
> >>>>>>               
> >>>>>     to know more
> >>>>>             
> >>>>>>     about it.
> >>>>>>      
> >>>>>>     Other fix in this build is correct matrix operation with
> >>>>>>               
> >>>     MathUtils:
> >>>         
> >>>>>     
> http://lists.blender.org/pipermail/bf-blender-cvs/2009-Septemb
> >>>>>     er/022245.html
> >>>>>             
> >>>>>>      
> >>>>>>     For those who want to experiment, I made two builds on 
> >>>>>> graphicall:
> >>>>>>      
> >>>>>>     Linux:
> >>>>>>
> >>>>>>               
> >>>>>     http://graphicall.org/builds/builds/showbuild.>
> >>>>>             
> >>>>     php?action=show&id=1082
> >>>>           
> >>>>>     
> <http://graphicall.org/builds/builds/showbuild.php?action=show
> >>>>>             
> >>>>     &id=1082>
> >>>>           
> >>>>>     Windows:
> >>>>>
> >>>>>             
> >>>     http://graphicall.org/builds/builds/showbuild.>
> >>>         
> >>     php?action=show&id=1080
> >>       
> >>>     <http://graphicall.org/builds/builds/showbuild>
> >>>         
> >>     .php?action=show&id=1080
> >>       
> >>>>>      
> >>>>>     If your system is not in this list, you can check 
> out the itasc 
> >>>>>     branch and compile. For those interested in the
> >>>>>             
> >>>     implementation, look
> >>>         
> >>>>>     at the BL_ArmatureChannel.cpp module in
> >>>>>             
> >>>     source/gameengine/converter.
> >>>         
> >>>>>     If
> >>>>>             
> >>>>     you
> >>>>           
> >>>>>     have some ideas to extend the API, you are welcome 
> to make your own
> >>>>>     additions and send me the diff, I will review and commit
> >>>>>             
> >>>     them to SVN.
> >>>         
> >>>>>      
> >>>>>     The itasc branch will be merged with 2.5 in the coming
> >>>>>             
> >>>     days, it would
> >>>         
> >>>>>     be
> >>>>>     nice to get some feedback before I start the merge.
> >>>>>      
> >>>>>     /benoit.
> >>>>>      
> >>>>>
> >>>>>
> >>>>>
> >>>>>             
> >>>     
> >>> 
> ---------------------------------------------------------------------
> >>>         
> >>>>>     -
> >>>>>     --
> >>>>>
> >>>>>     _______________________________________________
> >>>>>     Robotics mailing list
> >>>>>     Robotics at blender.org
> >>>>>     http://lists.blender.org/mailman/listinfo/robotics
> >>>>>             
> >>>     _______________________________________________
> >>>     Robotics mailing list
> >>>     Robotics at blender.org
> >>>     http://lists.blender.org/mailman/listinfo/robotics
> >>>
> >>>         
> >>
> >>     _______________________________________________
> >>     Robotics mailing list
> >>     Robotics at blender.org
> >>     http://lists.blender.org/mailman/listinfo/robotics
> >>
> >>       
> > 
> > 
> > 
> ----------------------------------------------------------------------
> > --
> > 
> > _______________________________________________
> > Robotics mailing list
> > Robotics at blender.org 
> > http://lists.blender.org/mailman/listinfo/robotics
> 
> -- 
> Dipl.-Inform. Med. Markus Mehrwald
> Institut für Prozessrechentechnik, Automation und Robotik 
> Medizin-Gruppe Universität Karlsruhe (TH) Gebäude 40.28, 
> Zimmer 110 Engler-Bunte-Ring 8 76131 Karlsruhe
> 
> Fon: +49 (721) 608-7113
> Fax: +49 (721) 608-7141 
> _______________________________________________
> Robotics mailing list
> Robotics at blender.org 
> http://lists.blender.org/mailman/listinfo/robo> tics
> 



More information about the Robotics mailing list