Use of Nervo Boards vs Distributed Micro Arduino's, Ribbon Cables vs Distributed Power

512 views
Skip to first unread message

John-Paul Hopman

unread,
Apr 19, 2016, 4:30:57 PM4/19/16
to InMoov
I was hoping to start up a discussion on the rationale of the current wiring paradigm of the InMoov project versus alternative control system methods. As mentioned in one of the reviews in the store on the Nervo boards, they were designed and implemented by individuals further along in the project then myself and others new to the project. They have been proven to work, but it would be nice to hear from those using them why they are the best implementations of control systems for InMoov.

For instance, I was originally thinking of using Arduino Micros or Adafruit Trinkets in each arm for plugging in the servos. A single USB would then be wired into a Rasperry Pi for control using MyRobotLab (which I believe is much easier to get up and running as well as comprehend over the current ROS options). In theory, using something like the Adafruit Feathers, LiPoly batteries for powering the servo's could be recharging when not in use via the USB serial connection to the Raspberry Pi. Ultimately the issues I see with this idea is the added cost to the project, with a single Adafruit Feather + Servo Featherwing costing as much as a cloned arduino mega, plus you would need at least 4-6 feathers compared to 2 megas. There is also the added weight of the battery in each arm, especially when considering the need for a 2 cell battery that could handle the amp draw of five servos making a fist.

Alternatively, what about the use of ribbon cables by the current Nervo boards? They seem to be an evolution of Gael's original 3D printed servo wire brackets. But would it be better to use smaller ethernet cables with RJ-45 (?) jacks to carry servo signals and a single strand of thicker gauge cables for carrying power, all zip-tied together? Is there a need for more flexible silicone wire (?) in home made bundles, terminated with molex connectors?

Hopefully I am not offending anyone with my questions, these are just the kind of things that pop into my head.
Message has been deleted

Scott Hodges

unread,
Apr 19, 2016, 10:53:49 PM4/19/16
to InMoov
Hi John-Paul, 

First off, I have to say that I personally am following a "build it the way it was designed" approach with my InMoov.  As an old IT guy, I know that changing too many variables at once will guarantee failure, so I am not changing any initially.  I probably have 50 servos in my animatronics toolbox, but I went ahead and bought the type of servos specified in the BOM.   I have a half dozen different control systems including a couple of SSC-32 and Raspberry PI based systems, but I bought two Nervo boards. I even bought one of the cheap little tablet computers that Gael uses because all of these systems are proven. The same applies to the derivatives.  Lots of options, but I want to know how it SHOULD be before I start messing around with other configurations. (I did combine a few parts for easier printing on my bigger printer, but that was about it.)  And My Robot Lab is genuinely pretty easy to use once you muscle through it a couple of times.  It is as close to turn-key for robotics control as you will get. So, my strongest recommendation would be to build it the way it was designed.  Once you understand how it should and does work, then start making changes, either based on derivatives, or your own designs.  

That said, the coolest thing about this community is that EVERYONE has good ideas.  If you are thinking about a different way to do something, chances are that somebody else has written about and possibly somebody else has done it.  And since this is a community (and because Gael recognizes the value of that community), many of the best new designs have actually made their way into the "core" robot design.

I have also thought about the RJ-45 and separate power option over the Nervo boards.  Technically, you can control 8 servos with a single RJ-45 if you run a separate power and ground.  That also ensures you will get the amperage you need and you can run power in parallel off of one pair of wires where needed, like down an arm or a leg.  And an early question of mine was regarding running the power needed for the big servos through a ribbon cable. (They run power and ground over multiple pins to ensure there is enough amperage.)  I even broke out my circuit board software with the idea of building a mega shield that would run RJ-45s instead of ribbons.  But then I started thinking about all of the other pieces and that the first and foremost objective is to get a complete InMoov up and running and working at 100%.  There is plenty to do to get there and there will be plenty of time to make changes (both others and my own) once I get the whole thing up and running.   Besides, the way this group moves, somebody else may already be working on an RJ-45 solution that will be ready as soon as you get your InMoov all assembled and running at 100%.  Don't get distracted.  Just build it.  Oh, and by the way, the Nervo boards work very, very well.  We will outgrow them eventually, but for now they support everything on the robot including some of the derivatives. No need to reinvent that wheel just yet.   

I'm going to use a kind of corny, totally unrelated analogy here to explain what this is like: Scuba Diving.  When you first jump into the water and look down in clear water, there is so much to see that it is difficult to decide where to go or what to focus on.  The options are as expansive as the view of the ocean bottom 60 feet below you.  Fortunately, there is an anchor line that leads down to someplace very close to where you want to be.  That anchor line is your frame of reference for the descent to the bottom.  Once you follow the anchor line down to the anchor, you can then head off in whatever  direction you and your dive buddy want and since you are now at the bottom, your senses are no longer overloaded with the hugeness of it all.  Gael is the anchor line and the anchor is the InMoov as designed.  It isn't absolutely necessary that you follow the anchor line down, but it is SO MUCH easier and less stressful when you do.  Without it, you may never complete the objective.  The objective is to explore, to learn and, most of all, to have some fun.    

Oh, sorry.  That was corny.  But you get the idea.  I hope that was at least a little helpful.  

Thanks,

Scott
 


Mats Önnerby

unread,
Apr 20, 2016, 5:36:33 AM4/20/16
to InMoov
Hi John-Paul. 
I try to use Adafruit 16-Channel servo drivers in the arms of my InMoov robot. https://learn.adafruit.com/16-channel-pwm-servo-driver
It's still work in progress, but the plan is to have support for that device and several other i2c devices in MyRobotLab.
Using the i2c protocol opens up for using more sensors without increasing the number of cables. 
For example the MPU-6050 to be able to sense the position of the hand or arm. Both Arduino and Raspberry PI has pins for i2c and I develop the drivers so that it's possible to use either of them.  
From a cabling point, it only requires two power cables (GND and +6V) for the servos and three signal cables for vcc, scl and sda. For the i2c communication JR45 could work. Even the smaller RJ10 has enough cables. RJ45 could be mixed up with network cables, but with RJ10 that risk decreases. 
/Mats 

John-Paul Hopman

unread,
Apr 20, 2016, 10:25:57 AM4/20/16
to InMoov
Great answer, just what I needed to hear. Focus on actually getting InMoov built and then worry about the small stuff. I've always been too focused on the destination over the journey. Though now I wish I was in better shape so I could plan a dive trip.

John-Paul Hopman

unread,
Apr 20, 2016, 10:31:22 AM4/20/16
to InMoov
Had not even considered I2C. It would allow for a more distributed build and the RJ10 should be much more flexible then the RJ45 since it would be a smaller cable.

Presently, MyRobotLab controls the servo pins via serial communication with the Arduino, can it communicate via I2C also or would all of that need to be programmed from scratch?

Mats Önnerby

unread,
Apr 20, 2016, 4:18:46 PM4/20/16
to InMoov
In MyRobotLab, you create a Servo instance and then you attach an Arduino and a pin,
To configure a servo to use i2c, you create the Servo instance, and then you attach an Adafruit16CServoDriver and a pin. The Adafruit16CServoDriver connects to an Arduino service that sends the i2c commands to the Adafruit 16-Channel Servo driver board using the i2c pins on the Arduino. So you use the same Servo commands/methods/gui as when you use the Arduino to drive the servos. It's is available in the latest release of MRL.

So it's very easy to change how a single servo connects.

But if you want to use the InMoov service with all it's default configurations, it will be a little bit more difficult because Arduinos and pins need to be reconfigured. I hope that the development of the InMoov service in MyRobotLab will allow for a more flexible configuration in the future.  

I made a video of my tests a few weeks ago: https://www.youtube.com/watch?v=Q_9U-OyJYPQ
If you choose to use a Raspberry PI it's also possible to connect the same board to the i2c pins on the PI.
In that case you connect the Adafruit16CServoDriver to the RasPI service.
I made a video of that too.

Ange koden här...


John-Paul Hopman

unread,
Apr 21, 2016, 9:20:54 AM4/21/16
to InMoov
Thanks for the links, subscribed to your channel and look forward to seeing your future progress. In looking up the servo driver yesterday, I realized you might also be able to substitute the servo featherwing from Adafruit. I believe it is half the size as it only has outputs for 8 servos rather than the 16 you are using. Assuming an arm doesn't need more than that, the featherwing is $5 cheaper than the 16 servo driver.

Thought I would mention it.

revwarguy7

unread,
Apr 21, 2016, 10:37:02 AM4/21/16
to InMoov


On Tuesday, April 19, 2016 at 3:30:57 PM UTC-5, John-Paul Hopman wrote:
I was hoping to start up a discussion on the rationale of the current wiring paradigm of the InMoov project versus alternative control system methods.

I chose a while back to make my own servo wiring distribution boards, only because the Nervo boards weren't available then and I didn't want to wait for them.  I am using adafruit's Metro minis only because I had some of them for other reasons - their advantage is software compatibility with an Uno but in a small form factor, like a Trinket.

In retrospect, I would probably have saved myself a lot of time going with a Nervo set and ended up with the same situation. (more about it here if interested.)

Mats Önnerby

unread,
Apr 22, 2016, 3:56:18 AM4/22/16
to InMoov
I didn't know about the  featherwing product line. To add support for it in MRL should be easy. If it's compatible with the larger version, then maybe no changes are needed at all.  

Mats Önnerby

unread,
Apr 22, 2016, 6:46:23 AM4/22/16
to InMoov
Both the 8-channel and 16-channel version use the same PCA9685 chip. So you can already use it in MyRoboLab :-)

John-Paul Hopman

unread,
Apr 22, 2016, 3:53:55 PM4/22/16
to InMoov
Yep, I found your build log a few months ago. Pretty sure you were the one who got me on the track of using mini arduino's in the arms. I also considered trinkets, but I needed the serial over USB of the mini's for controlling the pins through MyRobotLab.

I think that also led me towards the Feather product line temporarily, which included the built in lipo recharger via USB for roughly the same price as the Metro mini plus a recharging backpack. Using the Servo Featherwing would keep me from having to create my own plugin board to connect the servos to the power and arduino mini. But that just added to the cost of the project.

Then, after briefly toying with the idea of going wireless with the ESP8286 Feather board, I realized the Nervo boards were going to be my best choice in the short term and started contemplating this thread. I do like Mats' work with I2C servo control though. You could do 8 servo featherwings in each arm, a Raspberry Pi Servo HAT on the back, and then connect the 7" Raspberry Pi touch screen to that. A RPi3 would give you a 64 bit CPU (?), two USB jacks for the eyes, one for the Kinect, plus bluetooth for a keyboard and wireless control.
Reply all
Reply to author
Forward
0 new messages