View Full Version : [Project] DARSha (or the thread formerly known as "Nexus 4WD omni-wheel platform")

05-26-2012, 01:37 AM
Yeah... I figured I should probably make a project thread instead of posting a sequel to this (http://forums.trossenrobotics.com/showthread.php?4337-Anyone-using-omnidirectional-drive&p=51810#post51810), since I'm rambling on quite a bit.

Got the NexusRobot "MotorWheel" based motor control running a bit more smoothly, but the speed it returns is still a bit off (often returns a speed in the tens of mm/s when it is sitting at rest). For that, I'm still hoping I finish my non-arduino version of the firmware to see if it works any better (using int32_t instead of float for 4 independent PID controllers might help it a bit).

On the ros front, it has been a nice learning experience writing and cleaning up my base_controller and teleop nodes. The base controller works pretty well, but I need better speed data from the wheel encoders and also to read a lot more about how ros does odometry. The first teleop node was keyboard controlled and the second version is joystick controlled by a ps3 sixaxis. Unfortunately the bluez driver in the more recent kernels doesn't like the sixaxis, so I have to use ps3joy.py which kills all other bluetooth devices. I was going to make a video of the bot under sixaxis control, but it did not seem very impressive with the netbook sliding off anytime the base changed very much in its direction or speed. It doesn't seem to have much trouble with low pile carpet to tile transition strips as it did not appear to slide/skit much more than when it stops from high speed (motor controller still needs tuning).

About the NexusRobot platform itself, the 1/16" plate of aluminum used as the base deflects noticeably with even a light push down and there is absolutely no where to mount a laptop and kinect. For that, I've spent the last while brainstorming about how to reinforce the base plate, protect the arduino-derivative boards and motors and encoders, and add a place to mount external devices on it. Definitely removing the 12V/1.8Ah NiMH battery, the charge connector, and the aluminum frames holding them in place. The power switch (on the same L-bracket as the charge connector) will be moved to the new frames whenever they get designed/made. I'm also currently thinking of moving the controller/driver boards from the center of the base plate to a more convenient location so that I can mount a big lipo low on the bot (thinking the battery storage box/cave/cavern will be 70mm wide, ~100mm tall, and ~225mm deep with one vertical face permanently open). The replacement batteries will probably start with cheap, high capacity hobbyking lipo's, and maybe upgrade later to a custom LiFePO4 pack (maybe even with a charge controller/balancer integrated into the pack itself). I plan to place any battery in a hardcase sized to slide into the open side of the box, and be held in place with spring-loaded retention clips. This will better facilitate my personal obsession/future design feature to have the bot autonomously find a docking station and have the station power the bot while the station swaps out the battery with a charged one.

Unfortunately I dug up a little more info about some of the components of the platform that is causing me a bit more annoyance. It uses four 17-Watt Faulhaber 2342L012CR motors with 64:1 gear head and 12 CPR optical encoder. They appear to be surplus/used with the original optical encoder sensor pcb replaced by one from Nexus. The gear head assembly is most likely a planetary gear train, but all plastic (gears and housing). The entire motor assembly is supposed to produce ~1.72 N-m (~17.5 kg-cm) of torque at stall, which is less than an AX-18F. ...hopefully none of them will be breaking anytime soon... I found a couple used on ebay with the original encoder pcb for ~$65, but a new replacement using parts now in production from Faulhaber (2342S012CR motor with 26A gearhead and no encoder) would cost ~200 euros (~$250 at present exchange rate) each plus shipping from Europe at a 2 week lead time. At that price we could buy three 180-Watt RS395/P60-64:1 assemblies from banebots with enough left over to buy a few bearing blocks and hopefully build an adapter to link the back end of the 2.3mm motor shaft to an encoder. Unfortunately the L298 drivers on the arduino-derivative could never handle those, so: one step forward, three steps back (would present an opportunity to turn each motor into an independent servomotor with some AVRs and beefy MOSFETs).

06-08-2012, 09:57 PM
Spent a few days designing a 1/16" aluminum upgrade plates for DS, but there was no sheet in stock in the shop (and its only open on mondays and tuesdays). Rather than trying to find an online vendor and wait for shipping and then wait for a chance to get into the shop, I kinda improvised with some 1/16" 6063 extruded angle from big box and a 14"x17" cutting board (supposedly polypropylene, but probably polyethylene - only says 'poly' on the label). Not my best work, but certainly not my worst (EDIT: not a fan of lots of inline pics - labeled "DS - mvc-296f" to "DS - mvc-303f") (http://forums.trossenrobotics.com/gallery/browseimages.php?c=3&userid=4806) (only used my limited collection of tools because I did not want to wait yet another week to get into the shop). Although the 3/4" angle along the edges fixes the base plate flex problem, the lack of additional connections to the L-bracket motor mounts means the wheels still tilt a bit under load (at least there is no longer a risk of the board getting damaged from flexing with the base plate). Next is to get a big-ass LiPo, mount a kinect (possibly on a pan-tilt turret), and build a gantry for supporting a DARwIn-OP (probably with a winch so it can 'fly' - crazy art students).

Still haven't finished my embedded-c base firmware to improve the odometry for ROS, but probably won't matter for actually shadowing a DARwIn-OP since there will be little to no navigation. Been a bit distracted again with designing the upgrade plates that I didn't build, spectroscopy work, servicing a DARwIn-OP (art student broke the right knee servo's motor), and trying to get PCL's Kinect Fusion working on the newest workstation (finally succeeded).

Dawned on me yesterday that alleletronics carries the same gearbox that nexus used on the bot, but they ran out of stock of the corresponding motor a while ago.

06-08-2012, 11:18 PM
Pictures? :-)

06-11-2012, 03:29 PM
Apparently my fears about the motor brackets were not based too much in reality. The torque I can apply with my fingers is apparently much larger than what they actually experience under normal loading. With two 12V/7.5Ah Pb-Acid batteries (~5 pounds each) sitting in the center of the platform, neither the base plate nor any of the wheels move in any discernible manner. Placing the batteries directly over a wheel motor does cause very slight deflection, but it is only barely noticeable with the 2" lever arm that is the vertical portion of the motor mount bracket (some small fraction of a millimeter).

I now have a new dilemma on my hands: I'm having a bit of trouble deciding on the batteries. It depends a bit on how tolerant the Kinect is of <12V power. Anyone have any idea how it will react to 11.1V? I haven't cut up the power cable yet or bought a turtlebot cable kit (probably go with a spare Deans' connector or XT-60 instead).

The cheapest route would be Turnigy 5Ah 20C 4S1P hard-case LiPo's from hobbyking. At $23, it is cheaper than a 4.4Ah 15C 3S1P LiPo without a hard-case. They are about half the size of the Pb-Acid batteries and only a little over 1 pound each, so they could easily mount underneath the overhanging section of the platform. Unfortunately there is a bit of a conflict between the power requirements of the components. 4S (12.8V~16.8V) means it will be able to provide a regulated 12V to the Kinect pretty easily with just a 12V/1A+ LDO and heatsink. Unfortunately, the sbc-fitpc2i in the DARwIn-OP has a 9-15V rating and the MX-28T maxes at 16.8V (12V recommended). I'm having trouble finding many high current switching DC-DC regulators and using LDO's for this would be a big waste of power, so chances are we will have to pull a cell from one of the packs and use two batteries - a 4S for the kinect and a modded 3S for the rest. There is plenty of room for multiple packs on the bot, it just seems a little messy (and possibly prone to problems). If the Kinect is tolerant of less than 12V (or we get an Asus Xtion), then sticking with just 3S LiPo power for everything would be nice (buy three 4S hard-case packs and break them down into four 3S packs - ~$70).

Or go with some 4S LiFePO4 packs (10.8V~14.8V). Tenergy flat cells are way overpriced for the current rating, so don't bother recommending "all-battery". I would love to make a 4S2P pack of A123 26650B cells (12.8V/5Ah), but that runs into the triple digits (prof has already spent most/all of the funds on two more DARwIn-OP's for soccer). The best alternative I can find is a 4S2P pack of 26650 cells made from either 15C/20C 2.2Ah cells ($6.95 each) or 2C/5C 3.3Ah cells ($7.66 each). That gives a maximum continuous current for each pack of 66A (88A peak) and 13.2A (33A peak), respectively. The Kinect, sbc-fitpc2i, and CM-730 should use no more than about 2A and I don't think we have ever managed to simultaneously stall out all 20 MX-28T on the DARwIn-OP before (1.5A stall * 20 = 30A), so 33A peak should be just enough as long as there is a ~20A fuse to prevent long term over-current. Or make it a 4S3P pack (19.8A/49.5A).

Looking at the costs, it will probably be multiple 4S/3S LiPo's, but I would like some more input if anyone is willing.

Everything will be connected downstream of the software controlled E-Stop/battery under-voltage alarm/cut-off (AVR + voltage divider + big red button + status LEDs + buzzer + 10A~20A fuse + big-ass P-FET with heatsink). There will probably be more than one P-FET, since it would be nice to be able to cut power to the base's motors and/or DARwIn-OP without killing the kinect (arduino stays powered over USB by laptop).

06-11-2012, 04:20 PM
I've been through a similar search recently.

If the Kinect needs regulated 12V (or whatever,) I would either use fewer batteries with higher capacity each, or more batteries with lower capacity each, and use a step-up or step-down switching DC converter. For the motors, you want to hook them up directly, so match the batteries to whatever you need for motors, and then use a boost or buck converter for the electronics (or one of each -- 7.4V for motors, a boost for 12V electronics, and a buck for 5V electronics.)

Using hobby batteries, a 4S, 15C, 4.4 Ah battery from Hong Kong will run you about $28. A single one of these, regulated (buck / step-down) to 12 V, may be all you need, if you don't need to run as long. And, even parallel, it's still lower cost than LiFePO4 up front, but it takes significantly fewer charge cycles before it dies.
If 12V/600 mA is sufficient, here's a decent regulator: http://www.pololu.com/catalog/product/2104
( (http://www.pololu.com/catalog/product/2104)high-power 12V regulators is actually a pretty hard area to work in, unless you have your own surface mount PCB skills...)
Another option (note: you need 14V in capability): http://www.digikey.com/product-detail/en/78SR112HC/78SR112HC-ND/210819
(http://www.digikey.com/product-detail/en/APXW003A0X3-SRZ/555-1245-1-ND/2640013)And, at some point along the power curve, you may be better off with a simple relay with a low coil current, than with a P-FET. Plus: No heatsink needed :-)

Finally, I'm using 4S flat 10 Ah LeFePO4 cells from all-battery, and it works for me. With 2C rating, that's 20 amps continuous at 11-16 volts, 128 Wh of capacity, and very tolerant to charging/discharging. If you can get them cheaper elsewhere, good for you! And please share your source with others :-)

06-11-2012, 11:35 PM
Ah... pololu and digikey, two of my favorite vendors/retailers/wholesalers/etc. (also, trossen and sparkfun). I had actually looked at both those dc-dc converters and a whole bunch of others (mostly those high power 100+ pad LGA-package converters from Linear Technology - not sure I could convince the lab across the corridor to examine the solder joints with their medical/agricultural x-ray scanner). It is that cursed Kinect that kinda throws a wrench in the works with its probable need for a regulated 12V where the rest are just fine with 11.1V. A 4S LiPo is just a bit too high voltage and most regulators I've run across could not efficiently drop the voltage and provide enough power to everything that needs it. A 4S LiFePO4 would be nice for a single battery supply for the entire bot, but requires a significant upfront investment compared to some cheap LiPo's.

The 3.3Ah 26650 LiFePO4 cell (http://www.batteryspace.com/lifepo426650cell32v3300mah16.5arate10whunapproved. aspx)'s specs appear almost indistinguishable from the Tenergy version at all-battery (other than the 5C peak discharge), especially since the 2C constant discharge rating on the shop page is not noted in the actual spec sheet. Because I don't really know about the quality (I've not yet used Powerizer/AA Portable Power Corp. cells, but have not seen many negative reviews), I think I'm going the cheap 4S Turnigy LiPo route for now. Four 4S 5Ah packs broken down to one 4S and four 3S packs, with the one 4S pack for the Kinect and the four 3S packs for the base+motors and DARwIn-OP (only one 4S and one 3S pack on the bot at a time, with the rest charging). Should be able to last ~4 hours without charging which should be good enough for now.

If I dig a bit deeper into my savings, I may try to implement my little pipe dream of a ~7S2P A123 26650B (rev. B has a slightly higher capacity at 2.5Ah and slightly lower internal impedance) pack in a hardcase with built-in charger and switching regulator. Have a couple of them sitting in an automated base station (à la swarmanoid (http://www.botjunkie.com/2010/07/08/swarmanoid-autonomous-battery-swapping/)) connected to a DC power supply and have all charging and balancing be controlled by the individual batteries. When the battery on the bot gets low, it tells the bot over a data link (CAN/RS-485/other reliable transmission protocol/electrical interface) to go to an exchange station which temporarily provides power to the bot while it pulls out the low battery and stuffs a charged battery onto the bot. The bot would have to command the newly acquired battery over the data link to actually begin providing power and transmitting power status updates. When power has been confirmed, the base station releases the bot to go about its business.

I was thinking P-FET's because they are easy to control as high-side switches and are not affected by vibration/shock/impact compared to a relay. Add in a charge pump or an opto-isolator capable of direct driving a MOSFET, and an N-FET would work just as easily (probably at a slightly lower internal resistance). I like solid-state.

For the LiFePO4 source, slightly nicer cell ratings: 3.2V 10Ah 5C/10C flat cell for $34 (http://www.batteryspace.com/HighPowerLFPPolymerCell3.2V10Ah8790160-10C32Wh100Arate.aspx). Also much better pricing on their prismatic cells (http://www.batteryspace.com/LiFePO4-Prismatic-Batteries.aspx), most with slightly higher current ratings and matrix screw mounts instead of a single threaded stud. They also sell rather cool polypropylene holders to easily make cylindrical cell packs (C-cell and M-cell diameters). I think I'm still going to get four of the 3.3Ah cells just to see how well they work.

I rather hate to do it, but I feel compelled to attempt to recruit for UGA Engineering because the robots and projects in the lab far outnumber the people working on them. If there are any engineering or computer science (under)grads willing to tolerate living in dueling banjo land, there should be two more DARwIn-OP's ready and able for soccer before the year is out, but will likely be in rather dire need of humans to program them (a third one is already in the lab waiting for me to finish upgrading DARSha). There is a fourth currently over in the art/drama department getting its dance/acting on and will ideally be mimicking, interacting, and improvising with a human via a kinect before much longer (but could always use a smarter human to do the programming. I am very slowly but surely loosing my marbles. I also still need to get some of these little solar panels to better homes.). I'm going bed before I do anything any dumber.

06-12-2012, 01:27 PM
If I dig a bit deeper into my savings, I may try to implement my little pipe dream of a ~7S2P A123 26650B (rev. B has a slightly higher capacity at 2.5Ah and slightly lower internal impedance) pack in a hardcase with built-in charger and switching regulator. Have a couple of them sitting in an automated base station (à la swarmanoid) connected to a DC power supply and have all charging and balancing be controlled by the individual batteries. When the battery on the bot gets low, it tells the bot over a data link (CAN/RS-485/other reliable transmission protocol/electrical interface) to go to an exchange station which temporarily provides power to the bot while it pulls out the low battery and stuffs a charged battery onto the bot. The bot would have to command the newly acquired battery over the data link to actually begin providing power and transmitting power status updates. When power has been confirmed, the base station releases the bot to go about its business.

Now, that's just crazy talk! Delicious crazy talk! ;-)

Please post videos when you've got this working, and good luck on the project!

06-13-2012, 10:27 AM
Cut apart a power supply cables from a kinect last night and added some QC connectors to it (idiot I am. left all my crimp tools and connectors at home I did). Just tested it with a 3S LiPo and it works fine. It may be pulling a bit more current if there are switching regulators inside the kinect, but there appears to be no malfunction yet. So, yippee! We get to use a single power supply (cheap 3S LiPo's) without linear regulators and potential damage to motors.

06-15-2012, 11:57 AM
So much for security bits. It's probably useless excess information for most people out there, but if you are interested:

A 3/32" flat-head screwdriver can remove either the entire T10 Torx security screw (properly wedged between two of the star points and the center pin) or the center pin depending on how well the screw was snugged down. If you break the pin and don't have a plain Torx driver, then you can still use the 3/32" flat-head with a 1.5mm hex driver (or similar sized implement) as a wedge to keep the flat-head sufficiently far into the two recesses to turn the screw.

The screws used on the kinect have a ~3mm outer thread diameter, a ~2.3mm inner thread diameter, and a ~10mm long shaft with thread pitch of ~1mm. The actual hole appears to be ~2.97mm in diameter for ~1mm and then ~2.5mm in diameter deeper in (out of reach of the calipers). So, thread-forming screws sized at either #4 or more likely M3 for best guess as a replacement. Or going by the Turtlebot's kinect standoff drawing: a #6-32 hanger bolt (has shallower threads, so bigger diameter needed to cut new threads into the untouched plastic in the hole).

Also got the darwin controlling the base and riding around while following a ball (sitting on the edge overhanging or standing and balancing a bit like a surfer). It is a non-accomplishment, so no video yet. Going to be putting in a big-ish order to digikey in the next day or so for a bunch of different projects whirling around in the vast emptiness of my head.

07-17-2012, 06:05 PM
Just finished the battery box, camera mast, and the kinect's pan-tilt mount. With everything installed, DARSha stands 30" tall with the pan axis of the kinect about a millimeter or two forward of dead center (not too bad using only hand tools). The battery box is grossly over-sized for a 7.5Ah Lead-Acid battery and should easily fit future upgrades. All of the power and servo cables are routed through the mast to protect them from damage, and hopefully I will have the CM-730 ready to control it sometime soon.

Next is to decide on how to route power to the kinect and DARwIn-OP tether, build the gantry for the DARwIn-OP, and also install the E-Stop button (and maybe a few additional buttons and LEDs for user control/feedback).

I wish I could remember how to resize images in a post, but since I can't, the rest are in the gallery.

All the black plastic is 3/8" thick "poly" (probably HDPE and not PP) from a 14"x17" cutting board (one for the bottom surface and another cut up to build the box). The mast is 1"x1"x1/16" aluminum tube, the box uses 1"x1"x1/16" and 3/4"x3/4"x1/16" aluminum angle all from a big box The box and mast are assembled with blind rivets, and the bottom plate is now attached to the wheeled base with #4-40 screws since I will need to access the internals again soon. The battery box is ~4" deep, ~5" tall, and ~10" wide (first attempt cutting with a dremel router bit) with a single face open at the rear for easy access.

07-21-2012, 12:34 AM
Finished the box for mounting/protecting the E-Stop (is very nice (http://www.digikey.com/product-detail/en/87943-08/480-2082-ND/1162812) - [email protected], IP67 rating, vibration resistant, and very sturdy) and did a bit of wire routing cleanup. Moved the pan-tilt cable through a hole directly below the plastic bioloid C-frame attaching it to the mast instead of through the top end of the mast. Since there was a bunch of left over room in the ABS box from RS, I added two vandal-resistant buttons and at least two LED's for general user input/output (none are yet connected or even mounted right now).

The battery's positive terminal runs straight to a 32V 20A fuse then to a 'euro-style' screw terminal strip that links it to the E-Stop (#1 - VBAT) with the return of the E-Stop connected to the next position of the screw terminal strip (#2 - +12V). The battery's negative terminal runs to the third and final position of the terminal strip (#3 - GND). First thing I should do on Monday is add some rectifier diodes to the input of the arduino board controlling the base to keep the motors from energizing the +12V bus when being manually moved (doubt it is very good for the kinect and definitely defeats the purpose of the E-Stop disconnecting all power to the bot).

The E-Stop comes with a little plastic cap to cover the screw, but I might need to remove the switch sometime in the near future so I decided against installing it. A few more photos in the gallery.


05-28-2013, 08:58 AM

Wow. I am having a rather intense hatred of FedEx right now. Faster than UPS, my pale hairy ass.

Anywho, Darsha is finally getting some upgrades. First is the 12V 20Ah LiFePO4 battery, and very soon will be the 20mm T-slot extrusions to replace the crappy aluminum angle hand-built frames and plastic cutting board platforms.

05-28-2013, 12:21 PM
Sounds great!

Btw: did you install those rectifier diodes? Is the voltage drop a problem for you? For something as high-current as driving motors, I'd assume you'd want lower-loss solutions of some sort.

05-28-2013, 01:58 PM
The rectifier diodes were installed quite a while ago. The cheapo surplus motors only pull about an amp each and the driver boards are only rated for ~1.5A, so no real problems yet with a 12V 5A SMPS. After the frames are upgraded, will probably move on to a new bot rather than waste more money on those POS gearmotors and omni-wheels (loud gearmotors and non-rounded rollers combine to make ears bleed).

06-27-2013, 07:38 PM
Oh, McMaster and Misumi. How I love thee!

I really hope to have Darsha rebuilt before the weekend with purty pictures to follow.

Unfortunately, the RGB LED driver ICs do not arrive from Adafruit until at least friday afternoon, so the new dance stage/platform for the Type-A humanoid will not be done before the weekend. Will be a bit smaller, but should be much improved over the crappy plywood stage they built in the shop for use at the freshman orientation resource fair (eye candy to aid recruitment). 12"x12"x1/2" semi-clear white polypropylene sheet mounted on four 12" 20mm black anodized extrusions with 25 individually controlled RGB LEDs shining upward into the sheet for a nice diffused effect.