InMoov Service support for I2C based servo controllers

While the MyRobotLab is very versatile with the types of controllers it supports, the InMoov service is not.

It should be possible to add support into the skelletal sections to allow for differing controller configurations beyond the standard arangments.

For example:

One user may be using an arduino with I2C controllers in each arm.

Another user may be running a Raspberry Pi using the I2C bus the run servo controllers though out the robot.

It would mean the config files for the skeleton would be more complex, and of course it would need to be backward compatible with a default configuration aimed at the standard layout as listed on the InMoov web site.

There is no hard and fast rule that a particular method is the best method, so it would be better if a larger configuration base was supported.

 

Currently, I can't run the InMoov service as I don't currently have an Arduino installed, but i would love to take advantage of all the features that the InMoov service has without forking the development, that can lead to other issues that no one really wants.

It is my belief that the I2C bus running down the InMoov arms is the best currently available solution as it allows for a lot ore sensors as well as servo drivers of general IO to be added witout much more wiring.
This of course will most likely change in the future as new types of hardware is invented.

Thanks in advance

Ray

Mats's picture

InMoov configuration

I agree 100% to what you write.

I think the InMoov servics shouldn't assume that you use any Arduino, and that it should be more freely configurable.

Using the i2c bus down the arm is a very good alternative. That's the way I built my InMoov, but have never been able to use the InMoov sevices becasue they assume that you use Arduino's.

It is possible to make some reconfiguration of the InMoov seevice, by starting a service using the same name as the InMoov service will use. 

So for example you can start and configure a servo i01.leftHand.thumb before starting the InMoov service and then that configuration will be used. 

One of the changes that have been made latley is the usage of virtual Arduinos, so perhaps it's possible to simply use the virtual arduinos instead of the real.

I would suggest that you start with either the startinmoov.bat or the startinmoov.sh scripts and see what they do. I think they can be a good starting point since they use the virtual arduino as a replacement for the real Arduinos. 

 

GroG's picture

We all agree ! :) Mats and I

We all agree ! :)

Mats and I had a lengthy chat about this topic - and I believe we have a solid plan for the future, but a couple things need to be coordinated.

There is a lot of InMoovers & Python scripts out there that depend on the current rigid InMoov services.

In the future the "user" will have the control to assemble  all the services they want - this includes ServoControllers.

This means initializaiton is lengthy, but clear - because all services and their details need to be defined.

Doing this will break all the current InMoov scripts.  And Gael, Markus, moz4r and others will be unhappy.  So, I'd like to do this decomposition after the release.  It could be possible, instead of forking the code -  forking the services with InMoov2 InMoovHand2 etc..   But, I'm not really in favor of that since new features and fixes are applied to one service, and forgotten on the other.

Quite frankly, I prefer I2C devices - since there wiring is cleaner, and would be able to test with several.

It might be good to start going over the plan with moz4r & seb as they have put considerable work in the inititialization of the Arduino InMoov scripts.

 

Ray.Edgley's picture

It's great to have agreance

Hello GroG,

I will admit to not knowing Pyton or Java very well (at all), however if you need a tester give me a yell.

I'm in Australia so time zone is GMT+10

My current configuration is as follows:

Raspberry Pi 3
4 x PCA9685 PWM 16 Channel Servo Drivers (Head, Left Arm, Right Arm, Body)
Currently installing I2C 4 Channel Analog input module in left forearm.

Planning to shortly add second Raspberry Pi 3 for Left RPi camera and giving the remote service links a good try out.

As powerful as the Raspberry Pi 3 is, I still think Gael is correct in the about the lack of power in the small processor to run the entire InMove robot, to I plan to split the load across multiple Rasperry Pi 3's
Eventually, I plan to have three of them mounted in the head..

Yes I have made room by modifying Matts modification to the head.  If successfull, I'll let you know.

 

Ray