I seem to sound like a fan-boy, but what Eric has done there is simply mind boggling. He seems to have the passion and skills you have for machining things just using it in his software forge...
...the sheer AMOUNT of work Eric did put out for the P2, makes me wonder how he does it.
Well, since @msrobots went all fan-boy, on @ersmith & FlexGUI, I'm following his lead.
I have a theory that "Eric" is actually a cybernetic organism... not one of us meat-machines... which would explain how I report a bug at 2 AM and 30 minutes later it's fixed. Either that or "Eric" is actually 8 guys in 4 different time zones. Either variation of this conspiracy theory is supported by the evidence.
So yeah. Sir Eric... it's time to stop being so durned humble and take a well-deserved bow! (And maybe release FlexGUI V4.1.1? heheh)
And while we're toasting our stand-outs, there are a bunch more bows that need to be taken: Chip, Ken, Cluso, JohnnyMac, Peter, OzProp, Rogloh... jeeze... I can easily list 30+ folks who move my Parallax world. I do hope to meet you all someday, buy you a drink, and go all geeky.
Started to experiment with using a touch potentiometer that is 2.5 inches long.
Hooked it up to a multimeter to see how much pressure is needed to activate, don’t have to press on it very hard for it to activate. Since this thin plastic would be on the bottom of the foot, it needs some protection that can take some abuse yet flexible enough to allow activation.
I found a 3/8” thick rubber sheet that when placed over the potentiometer still provided enough movement to activate the sensor. The sensor is open with no pressure and reads up to 10K depending on where the pressure point is on the sensor. At this point I don’t really care where the touch point would be, just need to know that it is touching.
Next step is to machine a test rig for one leg. I had some 1.5” x 1.5” aluminum bar laying around so I cut a 2.5” chunk off to build something with on the CNC mill.
The idea is to put a curve on one end that the potentiometer will be attached to. The curve is needed so no matter what angle the leg is to the ground, the potentiometer will still activate some value. A strip of the rubber will go over the potentiometer to protect it from direct contact with the ground. The other end of the block will be turned on a lathe to fit into the bottom tube on the leg. Testing determines any refinements to the design and the best way to attach the potentiometer (it has a sticky backing that should work OK) and the rubber strip. I could epoxy the rubber or see if screws are better. It all needs to be somewhat water resistant so nothing shorts out in the rain or walking through puddles. The last thing I need to figure out is how to set up the electrical connections to the potentiometer. The best way would be to run the potentiometer connector into the interior of the lower leg tube so there isn’t any exposed wiring down low on the leg, have to figure that one out.
If you know that the value you may not even need an ADC, just a voltage divider that will change state on a pin. Contact/no contact scenario, without any superfluous info or code.
If you know that the value you may not even need an ADC, just a voltage divider that will change state on a pin. Contact/no contact scenario, without any superfluous info or code.
Thanks for the idea, I have always needed an actual ADC value whenever I read a potentiometer. Since all that is needed is any reading then I just read the state of the pin instead without needing a ADC.
Been busy on on the milling machine coming up with a new design of the leg foot for testing and finally got the CAD done and machined. Still need a few tweaks to the design but this will do for testing.
This is the initial test foot made out of a block of 1.5” x 1.5” aluminum. The rounded area fits into the lower leg tube extension, the end hole is threaded for the 1/4 - 20 thread rod that holds the lower leg assembly together. The flat part on the rounded end has a small slot for the potentiometer connector to slide through so that the connector is physically inside the lower leg extension.
This shows how the potentiometer will wrap around the outside curve of the foot.
This shows how the connector end of the potentiometer comes out along side the flat section on part that fits into the lower leg extension tube. It also shows the slot on the curve that connects the everything together.
I still have to cut the rubber protective sheet and figure out how to attach it to the curved section of the foot. It will probably need epoxy to make it stay in place. I can also look into using screws to hold it down. Another problem to figure out is how to keep the new foot from rotating since the flat part of the foot needs to always touch the floor to activate the potentiometer. The only thing holding it together is a section of threaded rod that is inside the lower leg extension tube. Because of this there is currently no means of preventing the foot from potentially rotating as the leg moves. So I will need some method of locking the position of the foot in place
Software-wise I need the code to read the potentiometer output and put the foot on the robot with new code to use the leg down activation as a way to know when the leg has touched down correctly. First off is coding for flat floors but I want to think about when the floor has variations in height like outdoors and for climbing stairs. Next posting should show the testing results.
I did some code work with the flexible potentiometer, ended up coding it like a switch. So when it is touched I had a LED lite up. I can touch any part of the potentiometer and the LED lites up immediately. However it takes about 2-3 seconds for the LED to turn off after removing pressure.
I don’t think this will be a problem as I mainly just need to know when the leg tip is touching a solid surface. I think the long response time is due to pin capacitance ramping down. Any ideas on how to shorten the time so it is faster?
I discovered that I misread the diameter of the leg tube extension so the test leg bottom I machined is too small a diameter for the leg tube. So its back to the CNC mill and machine up another test piece. I’ll put in some design changes I came up with already and hopefully see what works. This next one I may machine out of black Delrin, that will match the mostly black finish on the rest of the robot (I don’t have to anodize it either!).
It’s going slow, too many around the house and RV projects going on that are taking up my time! I didn’t realize that once you retire you actually have less time to do things...
I’ve been gone a while but the stay at home thing is finally getting me back to work on the robot. I continued to develop a ‘foot’ for the robot, the first versions didn’t work out too well but I think I’ve got one that is close to meeting my needs. I finished machining the foot assembly out of Delrin tonight.
These are the parts used, the large round piece is the actual ‘foot’. The smaller round piece is a cover. The flexible potentiometer is there along with a red protective rubber cover.
This photo shows how the potentiometer wraps around the outside of the foot with the connector placed inside the cavity in the foot. The lower leg attaches using a 1/4-20 all thread rod that screws into the foot and then into the knee portion of the leg. This way I don’t have to drill any holes in the round lower leg section to hold everything together. There are also holes in the foot for wires to the potentiometer to travel inside the hollow leg section out of sight.
This shows how a protective rubber cover will be attached over the potentiometer to protect it from the ground. The cover goes over the opening in the foot to keep out water.
The sensor is mounted so it will activate in all the normal leg stances from vertical to sticking out at a high angle. I went this route for the leg down sensor since I was unable to find any switches that would activate over such a wide span of input angles. I still have to route the wires through the other end of the leg and to the leg controller so theire will some more hole drilling for that.
Do I ever feel like a dummy! I made a second ‘foot’ with a couple of minor changes after modifying the CAD and CAM files. Somehow i ended up re-using the original file so I now have a duplicate part. I just went in and manually made the appropriate changes to the CAM file, ready to try again tomorrow.
Grrrrrrrr!
Cold miserable day outside so early start in the workshop. Got the prototype leg down switch mechanical parts machined and started to put everything together.
This is the Delrin foot with the flexible potentiometer attached. The potentiometer is connected to a 2 wire socket.
This shows the top of the foot with the cutout for the lower leg extension and the wires that go up into the extension. The center hole is threaded for a 1/4-20 threaded rod that pulls the foot and upper attachment pieces together. The connector is shown in the photo also
This is the other end of the lower leg extension. This shows the spot for the threaded rod to attach and the new hole drilled to pass the cable up through the extension. The fun part of threading this together is that the wire inside the leg extension will wrap itself around the threaded rod so there has to be enough slack to allow it to wrap as the parts are threaded together.
This is the foot with the protective rubber piece wrapped around the potentiometer. I used screws to hold the rubber in place for the time being. I will epoxy it down later but want to be able to access the potentiometer during testing. The side panel is also on the foot.
This shows the whole lower leg assembly put back together and ready to reattach to the leg.
Here is where I’ll be working tomorrow, wiring in the new sensor back up to the controller computer. Hopefully I’ll have time enough to do some coding to test it out.
In between sleep and getting house improvements done during this isolation period I got some time to play in the shop. Today’s task was to get the robot power system re-installed and get the updated leg back on and hooked up. I don’t know why all the photos rotated on me when I inserted them, first time I’ve seen this happen.
The battery compartment is fairly roomy, I can put in a much larger battery if needed. I have been checking out lithium batteries around the 25 amp hour range, those are fairly pricy at this point. I might be better off building my own battery, I’ve seen several instructions on how various people have built batteries themselves, both wiring setups and battery management systems. I have some experience with lithium systems, I designed and put a 400 amp-hr battery in my RV that works pretty good. Lithium batteries are great but their are some crazy power capabilities that make working with them a serious matter.
Here are the power and sensor plug in boards for leg #5. Still have open slots for connectors.
Here all the motor power connectors (large white connectors at top of photo) plugged in. The bottom plugs are sensor power and signal connections. Its a tight fit to get everything plugged in while simultaneously holding a 26 pound leg steady. Once the sensors are plugged the leg is secured in place using 4 bolts. Thank goodness I decided early on to design everything to be modular so it would relatively easy to disassemble and reassemble.
Now the leg is attached and ready to do some testing under computer control.
I turned the key that turns on the main power, got the green light but my display panel that (Lascar PanelPilot SCD 24M) did not start up and show current battery voltage. Removed the panel and the ground wire had come off. It turned out that getting that wire back in the connector was harder than expected, loosening the connector with a screwdriver didn’t change the opening for the wire and trying to force the wire into the hole just turned the wire into a rats nest. I gave up for the night, tomorrow I’ll solder the end of the wire and see if that works better.
Amazing progress, DiverBob! You are the most tireless builder I have ever "met" and your persistence is incredible. Keep up the excellent work!
If by ‘tireless’ you mean slow, then I’m your man! I’m amazed at the number and variety of robotic projects you turn out! This forum is a favorite stomping ground for me, lots of great ideas coming out, good discussions to watch although the quantity of new content has gone down a lot in the last couple of years. I stopped making small bots several years ago and now all my robot time is being spent on this. I didn’t expect this project to take this long! The mechanical parts are the easiest, programming this beast has been more difficult than expected. It has been fun though, learned a lot of new things and it’s kept me occupied for lots of hours. Since retiring I have found I’ve had less time to work on the robot, go figure!
Got the power display working again so powered everything up successfully. I loaded the program for the test leg and ran some simple tests just make sure the leg down mechanism worked properly. Initially I used my hand to manually activate the sensor without moving the leg. Once I was confident that I was getting a good signal I programmed in manual leg movements. Then I tried to manually move the femur motor with no success. Manual operation at this point involves typing in a movement command into the PST terminal from the keyboard. Thinking I messed up the program, I loaded the master file for that leg, still no go. Finally I checked the code that extracts the movement data, that’s when I remembered that the command sequence was changed when I started using the master computer to transmit data to speed up transmission rates. Once I crossed this mental block and typed in the correct sequence, the manual entry worked perfectly. I added some better notes in the program for the future!
I modified the program to stop moving the leg downward once the sensor activated. This worked but I realized under some circumstances I needed the leg to stop moving once the leg touches down and other times the leg needs to be able to move even if the sensor is active (such as when the robot is raising itself up and the leg tips are stationary). My initial programming change is adding a new variable to the input command string. The command string consists of ‘$, leg number, femur angle, tibia angle, coxa angle, and 1 for stop on leg down sensor or 0 for ignore sensor’. The code changes are only on the femur as this is the only motor that lifts and lowers the leg.
I’ll play around with this a while and see if this sequence works out. For normal walking purposes the sensor indicates when the leg has touched down. If the robot is stationary and changing its height without the leg tip moving then the sensor is ignored.
Once I finish verifying the sensor works with the robot legs in different positions (I need the sensor to activate when the tibia has the leg at full extension) then time to machine 5 sensor housings just like it.
Started machining the new foot sensor housings. It was going great until the 3rd one, CNC mill went stupid and ended up breaking the 1/8” end mill. Of course that happened to be the only mill that was long enough to do the cut. So ordered 2 new end mills, hopefully they will get here soon so I can get started again. In the meantime I have some wiring harnesses to assemble and drill some holes in existing parts to pass the wires through. I removed and disassembled the remaining 5 leg lower extensions in preparation for the new feet. I can at least finish up the other 2 feet that did get machined.
One of the things I found after returning from our last trip is that the robot sealed lead acid battery will only charge up to around 75%. When the battery is being used, the battery voltage steadily drops much faster than before, even with the charger plugged in. So the search for a replacement battery commenced. I found this place for making DIY Lithium battery packs, https://vruzend.com/. It looks pretty good and I like not needing to invest in a spot welder to make the connections. They sell all the parts needed for putting together batteries. They also have some good tutorials and technical information. I’ll wait to closer to the end of the month to see how expenses are doing and then order everything.
It took longer than expected to put the remaining 5 sensor pieces together but they are done and attached to the bottom of each foot. The wiring is complete up to the top of the leg. Next step is to remove each leg, solder in a connector, add the connector receiver on the sensor board and wire that back up to each leg controller.
The thing that took the longest was screwing the threaded rod into the sensor and then other end into the threaded support as the wires wrap around then threaded rod inside the lower tube and I have to be careful not to damage the wires if they start to wrap too tightly. I had to file the threaded rods along the middle of the rod as the wire insulation was getting damaged.
Today I finished up the wiring from the legs to the leg controllers. This required removing the remaining 5 legs. Here is a photo of the robot body sans legs.
This was a case of adding a new plug and then fishing the new wires from the main deck to the controller level. Luckily I installed a interior light to be able to see what I’m doing inside the main deck.
Here is the robot with all the legs reattached and ready to go
While I was at it, I didn’t like passing the safety ropes down under the leg supports, it wasn’t a good location and occasionally interferes with leg movements. So I replaced a couple of bolts on each side with longer bolts and a plastic ring so the rope can wrap around them and hold the robot from closer to the top.
Starting programming again tomorrow, first copy the latest code update into the individual controllers, test them, and hopefully start running everything under the master computer again.
One thing I’m going to try is coding the master computer using FastSpin. I understand that this compiles code into assembly vs interpreted so it runs faster. Since the Inverse Kinematics floating point equations take so much time to run, maybe this is what I need.
The other choice is to wait for the P2 to officially come out. I got one of the P2 Rev A evaluation boards but never got a chance to really dive into it. I understand they have a Rev B board out now and it seems that I can’t really use the new languages with the older board. I need to look into that further.
Got the leg controller software transferred and tested on the other 5 legs. I did find that the leg down is activating on the other 5 legs just a bit before the leg actually touches down. The original test leg did not exhibit this behavior so I’m trying to determine what is causing it to happen. I checked and the wires aren’t being pulled or stressed at the position but it is just a very momentary activation of the sensor.
To combat this I coded a short delay where the software checks the sensor 10 times separated by 25 msec intervals. Initial results are encouraging, the new test leg ran the leg down until the sensor was fully activated without over running the desired position.
I fixed a few other minor issues like giving default values for activation of the leg down sensor after I mis-typed a leg position and didn’t enter a valid value for the leg to stop at the floor. It kept going to the requested position, luckily I had the safety rope in place to prevent the robot from tipping over.
More testing coming tonight, have to update each leg controller again and re-test them.
I ordered parts to build a new DIY lithium battery (https://vruzend.com) today. As part of that process I went to the Parallax store to check the voltage range for the HB-25 motor controller when I discovered that they were discontinued! Since I don’t have any spares I shot off an email to Parallax and asked if they might have any extras still available as use as spares, they responded pretty quickly and they are checking around for extras for me.
After updating all the leg controllers I started up the master computer code and ran some simple leg movements to validate communication between master and legs. I wasn’t seeing some of the expected feedback data from the legs so I dove back into that portion of the code base. You know how it is when you haven’t looked at your code for a while, sometimes you start to wonder what in the world you were thinking when you wrote it? Well, I had several of those moments as I dug deeper into the master and leg communication software. I ended up re-visiting the leg feedback loop and didn’t like what I was seeing. The way the leg sent data back to the master was convoluted such that when the master requested a movement, the feedback from that move wasn’t seen by the master until after the next movement command. Not a good setup.
I still had unused cogs in the leg controller so I started up a dedicated loop that continuously outputs feedback (actual leg angles, current leg movement direction, motor finished status, and the leg down sensor output), 10 variables total, sent in 3 separate data groups. The loop sends the data back via a dedicated link on each controller to separate input pins on the master so there aren’t any packet collision issues. The master sequentially reads each input pin and assigns the incoming data to a local data array for use as needed. The master has its own dedicated cog reading the data so all it does is read and update the global data arrays which other parts of the program can use as needed.
Still testing out the new setup, it looks promising so far and is more flexible than the original setup.
As I was reviewing the code I also fixed some inconsistencies I found and added better notes, its amazing how code that was so obvious that it didn’t need notes can be so confusing a year later!
I want to get to the point again where I can get some routines programmed in that I can put together a video to show the robot’s operation instead if just talking about it!
In order to follow my previous code I ended up using paper and pencil to follow the code and the variables/buffers being used. I decided that I have just kept adding on new functions and shoehorning new capabilities into the code so it just kept getting more and more complex. It was time to dump the code and start more or less from scratch. I simplified the code from having 3 separate data packets to a single data packet that contains all the data which makes the code much simpler and easier to follow for the future. I tested the leg controller side of the changes and found errors I had been seeing occasionally are no longer showing up! The updated leg controller code has been uploaded to all the legs, now working on the master coding side of things again.
Here is a photo of the troubleshooting data I get when testing a leg controller. The top of the screen is the initial leg angle positioning and the leg down sensor is active. Below that is the leg command, starting with ‘$’. The 5 is a command for leg #5, the next 3 values are the requested movement angles for Femur, Tibia, and Coxa. Those values are angles expressed as an integer value so 900 is 90.0 degrees. The last number is either a 1 or 0, this tells whether or not to stop femur movement when the leg down sensor is activated. The next block is the actual movement, this shows the femur movement. There are several values indicating various PID values, the movement direction, speed, leg down actuator status, encoder value, and calculated femur angles. The end of the block shows the conditions that stop movement such as errors or reaching the goal position. It also shows some of the old feedback data. I can specify which leg motor to view so I spend a lot of time using this for tweaking the code.
I got my Lithium battery kit in the mail so I set out to build me a battery. I discovered I made an expensive mistake, I needed 28 batteries for the setup I wanted to make so I ordered 28 3.7v 3500 am-hr batteries. I missed reading the battery description and didn’t see that they come 2 batteries to the package, so now I have double the number of batteries that I need. Rather than send them back, I’ll just make up another battery for the robot or for some other project.
Anyway, the package came with all the little bits and pieces so I can build a battery. I got a charger for battery and a Battery Management System board to control charging so as to maximize battery life.
The battery kit uses plastic caps that fit over the top and bottom of a standard 18650 cell. Its a tight fit with the plastic top having a spring loaded contact inside connected to a threaded post. The plastic parts have dovetails on each side, 2 are male and the other 2 are female which allows the batteries to interlock on a grid pattern.
I wanted a 12v battery with 25 amp-hr capacity. So I put together a 4S8P confirmation. 4 cells are joined in series (3.7v per cell x 4. = 14.8v output) and 8 cells joined in parallel (3500ma per cell x 8 = 28 amp-hr). The Vruzend website has several very nice videos on how to design your battery and how to build it. That was the first time I did, re-watch all the videos!
Starting the build process I hooked together 8 positive caps and pressed the batteries into the plastic sleeve. Its a very tight fit but using a piece of plastic made it easier to get them done. After that, the negative caps were put on. This was a easily done and a small rubber mallet to seat the batteries was used also. The multimeter was used to verify I could read a voltage at each post indicating a good connection. Repeat this step 3 more times
Once the 4 battery sections were done, they were connected together using the dovetails. This was a little tricky but got everything lighted up and they slide together. They include some long barrel bolts that can be added to help keep the battery parts from moving if used in high vibration locations. These are the flat head screws located between some of the cells. After all that, its time to start making electrical connections. The kit comes with a number of nickel plated copper strips with holes that line up with the posts on each cell. These metal strips are laid down to give the proper series and parallel confirmation. This was the more nervous part of the build, making sure the strips were in the right places and not dropping one potentially causing a short. Small nuts are tightened to hold the metal strips in place.
Here is the top of the battery with the power output posts ready to have wires added. You can see the multimeter reading the expected output violate for the array.
I still have to install the BMS, need to watch that video again! Then add the output wires and charging connections. Finishing the battery up will include wrapping it in a thin foam and then use heat shrink to hold everything in place and prevent accidental shorting.
This battery will provide plenty of power for the robot. I can expand the capacity if needed just by adding some additional cells. This system is pretty easy to put together and get exactly the battery size you need. All the other methods I saw for building battery packs involved using a spot welder which is an investment I didn’t want to undertake. This is pretty flexible and the end product size isn’t that much larger than spot welded packs.
Finished up the battery build today. Added in the BMS board with all the balance wires going to the 4 battery sections. The output connection was made also. The BMS and wires are held down using Kapton tape.
Next I wrapped the entire battery in a thin rubber foam to protect it from vibration and accidental drops.
After the foam the large diameter heat shrink was added. I’m used to the small stuff, this is pretty wild heat shrink, very easy to use but shrinks quick with low heat from a heat gun. I didn’t make real pretty, need more practice time for pretty!
And here is the new 28 amp-hr battery in the battery tray. I haven’t weighted it yet but it’s much lighter than the gel cell and considerably smaller. It looks like I could add a second one this size without any changes to the area.
I need to setup the battery charging, on this BMS the charger connects through the output, some BMS have dedicated charging connections. It was too hard to hold and solder the wires for both the output and soldering on the BMS connection pad so I decided to make those connections externally. I also need to add a charging port to plug the charger into. Before that happens I had to try the battery out on the robot. Plugged it in, turned the key switch and the robot lit up and the computers all powered on. I measured 3.4 millivolts across the shunt so the battery was supplying 3.4 amps with everything on but no motors running. After turning it back off I took some measurements, came up with some ideas and will sleep on it before I commit to making any power system wiring changes.
I was looking at your battery wrapping, not sure, but you might have a heat build up problem.
Out of curiosity, how much does your battery pack weight? So, you have a 14.4V 28Ah battery back, what kind of voltage regulators will you be using?
Ray
I wrapped the battery using the instructions from the vendor website. The example batteries they were putting together were significantly larger than this one, so I should be ok. I can always put a temperature probe inside it to monitor the temperature if heat seems to become a problem. This is the first time I’ve done a battery pack so I have a lot to learn yet. The area where the pack is located isn’t a sealed up area, I set it up so there can be passive convection cooling through the battery and main levels.
Haven’t weighed the pack but it feels pretty light as compared to the old battery!
The power system uses a 12v to 5v DC to DC commercial regulator for powering the computers. I don’t remember the output current but it was more than adequate to supply all the anticipated computers and accessories I want. I might have more info on it back when I installed it if you want to read through some of the earlier entries in this thread. The motor side uses 12v DC brushed motors that are powered via 18 HB-25 motor controllers. The HB-25 is rated for higher voltages so no regulation needed for the motor power side. 12v motors won’t be measurably affected with the slight voltage increase, they will just run a bit faster.
When building future battery packs you could use the foam, or something else non-conductive, to shield the terminals you aren't working on when you are fitting the strips, to reduce the risk of accidental shorts.
Tonight I was playing around with the robot, setting up some simple movement routines when I took a break and was looking at adding a small digital voltmeter. I think something was wrong with the device as when I touched the wires to the positive and negative buses just to power it on, there was a large spark and the smell of smoke. I powered down and went looking for damages. Close inspection of the wiring didn’t reveal any discolored wires. I removed and inspected the 2 power relays, no sign of contact arcing. I did a test power up and the main power energized but when I flipped the motor power switch the battery voltage level dropped to just over 9 volts so I turned everything back off again. Seems I have some more in depth troubleshooting to do tomorrow. Its acting like there is a partial short somewhere so that could take some time to find.
Before this calamity things were going pretty well. I prettied up the switch panel using the laser cutter to cut the new one out. It turned out nicely but I found the key switch I used only allows the key to be removed when in the ON position. I replaced the old switch because the solder tabs on the switch had broken off making it difficult to get a good electrical connection.
I’m still working out how best to incorporate the new leg down sensors in the code. The simple task of telling all 6 legs to just touch the ground has taken on new complications. So I’m writing code, running it to see what moves the robot actually makes. This makes for a lot of false starts but there is progress.
Got into troubleshooting the electrical issue and determined it was located in the main power distribution for the motors. I removed all the fuses to the individual legs and there is a 2 volt drop between the battery and the fuse panel. Inserting any fuse causes voltage to drop to about 2 volts. To go further I needed access to the interior of the robot so all 6 legs were removed first.
Next was disconnecting all power connections and separating the battery level from the main level. Its been a while since the robot has been disassembled this far but now there is much easier access to the interior wiring which will make locating and fixing the problem easier.
Once I correct my electrical mistake I see several things that could be improved in the wiring layout to make it simpler to work on in the future. For one, I can’t remember why in the world all the power wiring from the battery is coming up the center of the robot and then fans out to the legs. Seems it would be much neater to bring the wires up along the sides.
I ended up needing to remove the plate over the battery compartment so I decided as long as that was off, I would go ahead and re-route the motor power wires from going up the middle of the deck to bring them up along the sides closer to their connection points. That will require drilling 6, 1” holes in the aluminum so the mill will be used for this process.
I did a lot of tracing out the wiring and still haven’t found the electrical fault. Its been more difficult than anticipated as there have been many changes and additions to the wiring so wires are heading every which way. Plus I found one connector that isn’t connecting securely and needs replacement. Based on this I decided to re-wire the 12v motor power distribution. I’m laying out the components and putting in dedicated +/- 12v busses and additional wiring distribution points for future additions. Got a new schematic drawn up, got some better wires to use (old wires were very stiff and hard to manipulate). I need a better mounting board for the components so have to figure how to mount that also.
Having a much smaller battery gives me additional space so there are several options on how to setup the wiring, just need to take my time and get it right.
Comments
Well, since @msrobots went all fan-boy, on @ersmith & FlexGUI, I'm following his lead.
I have a theory that "Eric" is actually a cybernetic organism... not one of us meat-machines... which would explain how I report a bug at 2 AM and 30 minutes later it's fixed. Either that or "Eric" is actually 8 guys in 4 different time zones. Either variation of this conspiracy theory is supported by the evidence.
So yeah. Sir Eric... it's time to stop being so durned humble and take a well-deserved bow! (And maybe release FlexGUI V4.1.1? heheh)
And while we're toasting our stand-outs, there are a bunch more bows that need to be taken: Chip, Ken, Cluso, JohnnyMac, Peter, OzProp, Rogloh... jeeze... I can easily list 30+ folks who move my Parallax world. I do hope to meet you all someday, buy you a drink, and go all geeky.
Hooked it up to a multimeter to see how much pressure is needed to activate, don’t have to press on it very hard for it to activate. Since this thin plastic would be on the bottom of the foot, it needs some protection that can take some abuse yet flexible enough to allow activation.
I found a 3/8” thick rubber sheet that when placed over the potentiometer still provided enough movement to activate the sensor. The sensor is open with no pressure and reads up to 10K depending on where the pressure point is on the sensor. At this point I don’t really care where the touch point would be, just need to know that it is touching.
Next step is to machine a test rig for one leg. I had some 1.5” x 1.5” aluminum bar laying around so I cut a 2.5” chunk off to build something with on the CNC mill.
The idea is to put a curve on one end that the potentiometer will be attached to. The curve is needed so no matter what angle the leg is to the ground, the potentiometer will still activate some value. A strip of the rubber will go over the potentiometer to protect it from direct contact with the ground. The other end of the block will be turned on a lathe to fit into the bottom tube on the leg. Testing determines any refinements to the design and the best way to attach the potentiometer (it has a sticky backing that should work OK) and the rubber strip. I could epoxy the rubber or see if screws are better. It all needs to be somewhat water resistant so nothing shorts out in the rain or walking through puddles. The last thing I need to figure out is how to set up the electrical connections to the potentiometer. The best way would be to run the potentiometer connector into the interior of the lower leg tube so there isn’t any exposed wiring down low on the leg, have to figure that one out.
Been busy on on the milling machine coming up with a new design of the leg foot for testing and finally got the CAD done and machined. Still need a few tweaks to the design but this will do for testing.
This is the initial test foot made out of a block of 1.5” x 1.5” aluminum. The rounded area fits into the lower leg tube extension, the end hole is threaded for the 1/4 - 20 thread rod that holds the lower leg assembly together. The flat part on the rounded end has a small slot for the potentiometer connector to slide through so that the connector is physically inside the lower leg extension.
This shows how the potentiometer will wrap around the outside curve of the foot.
This shows how the connector end of the potentiometer comes out along side the flat section on part that fits into the lower leg extension tube. It also shows the slot on the curve that connects the everything together.
I still have to cut the rubber protective sheet and figure out how to attach it to the curved section of the foot. It will probably need epoxy to make it stay in place. I can also look into using screws to hold it down. Another problem to figure out is how to keep the new foot from rotating since the flat part of the foot needs to always touch the floor to activate the potentiometer. The only thing holding it together is a section of threaded rod that is inside the lower leg extension tube. Because of this there is currently no means of preventing the foot from potentially rotating as the leg moves. So I will need some method of locking the position of the foot in place
Software-wise I need the code to read the potentiometer output and put the foot on the robot with new code to use the leg down activation as a way to know when the leg has touched down correctly. First off is coding for flat floors but I want to think about when the floor has variations in height like outdoors and for climbing stairs. Next posting should show the testing results.
Edit: this is the stuff https://www.zoro.com/3m-weatherstrip-adhesive-tube-500-oz-black-08008/i/G0605701/?gclid=EAIaIQobChMI_-fhs7WV5wIVyICfCh2zkgvbEAQYASABEgJpUfD_BwE
I don’t think this will be a problem as I mainly just need to know when the leg tip is touching a solid surface. I think the long response time is due to pin capacitance ramping down. Any ideas on how to shorten the time so it is faster?
I discovered that I misread the diameter of the leg tube extension so the test leg bottom I machined is too small a diameter for the leg tube. So its back to the CNC mill and machine up another test piece. I’ll put in some design changes I came up with already and hopefully see what works. This next one I may machine out of black Delrin, that will match the mostly black finish on the rest of the robot (I don’t have to anodize it either!).
It’s going slow, too many around the house and RV projects going on that are taking up my time! I didn’t realize that once you retire you actually have less time to do things...
Mike
These are the parts used, the large round piece is the actual ‘foot’. The smaller round piece is a cover. The flexible potentiometer is there along with a red protective rubber cover.
This photo shows how the potentiometer wraps around the outside of the foot with the connector placed inside the cavity in the foot. The lower leg attaches using a 1/4-20 all thread rod that screws into the foot and then into the knee portion of the leg. This way I don’t have to drill any holes in the round lower leg section to hold everything together. There are also holes in the foot for wires to the potentiometer to travel inside the hollow leg section out of sight.
This shows how a protective rubber cover will be attached over the potentiometer to protect it from the ground. The cover goes over the opening in the foot to keep out water.
The sensor is mounted so it will activate in all the normal leg stances from vertical to sticking out at a high angle. I went this route for the leg down sensor since I was unable to find any switches that would activate over such a wide span of input angles. I still have to route the wires through the other end of the leg and to the leg controller so theire will some more hole drilling for that.
Bob
Grrrrrrrr!
This is the Delrin foot with the flexible potentiometer attached. The potentiometer is connected to a 2 wire socket.
This shows the top of the foot with the cutout for the lower leg extension and the wires that go up into the extension. The center hole is threaded for a 1/4-20 threaded rod that pulls the foot and upper attachment pieces together. The connector is shown in the photo also
This is the other end of the lower leg extension. This shows the spot for the threaded rod to attach and the new hole drilled to pass the cable up through the extension. The fun part of threading this together is that the wire inside the leg extension will wrap itself around the threaded rod so there has to be enough slack to allow it to wrap as the parts are threaded together.
This is the foot with the protective rubber piece wrapped around the potentiometer. I used screws to hold the rubber in place for the time being. I will epoxy it down later but want to be able to access the potentiometer during testing. The side panel is also on the foot.
This shows the whole lower leg assembly put back together and ready to reattach to the leg.
Here is where I’ll be working tomorrow, wiring in the new sensor back up to the controller computer. Hopefully I’ll have time enough to do some coding to test it out.
The battery compartment is fairly roomy, I can put in a much larger battery if needed. I have been checking out lithium batteries around the 25 amp hour range, those are fairly pricy at this point. I might be better off building my own battery, I’ve seen several instructions on how various people have built batteries themselves, both wiring setups and battery management systems. I have some experience with lithium systems, I designed and put a 400 amp-hr battery in my RV that works pretty good. Lithium batteries are great but their are some crazy power capabilities that make working with them a serious matter.
Here are the power and sensor plug in boards for leg #5. Still have open slots for connectors.
Here all the motor power connectors (large white connectors at top of photo) plugged in. The bottom plugs are sensor power and signal connections. Its a tight fit to get everything plugged in while simultaneously holding a 26 pound leg steady. Once the sensors are plugged the leg is secured in place using 4 bolts. Thank goodness I decided early on to design everything to be modular so it would relatively easy to disassemble and reassemble.
Now the leg is attached and ready to do some testing under computer control.
I turned the key that turns on the main power, got the green light but my display panel that (Lascar PanelPilot SCD 24M) did not start up and show current battery voltage. Removed the panel and the ground wire had come off. It turned out that getting that wire back in the connector was harder than expected, loosening the connector with a screwdriver didn’t change the opening for the wire and trying to force the wire into the hole just turned the wire into a rats nest. I gave up for the night, tomorrow I’ll solder the end of the wire and see if that works better.
Got the power display working again so powered everything up successfully. I loaded the program for the test leg and ran some simple tests just make sure the leg down mechanism worked properly. Initially I used my hand to manually activate the sensor without moving the leg. Once I was confident that I was getting a good signal I programmed in manual leg movements. Then I tried to manually move the femur motor with no success. Manual operation at this point involves typing in a movement command into the PST terminal from the keyboard. Thinking I messed up the program, I loaded the master file for that leg, still no go. Finally I checked the code that extracts the movement data, that’s when I remembered that the command sequence was changed when I started using the master computer to transmit data to speed up transmission rates. Once I crossed this mental block and typed in the correct sequence, the manual entry worked perfectly. I added some better notes in the program for the future!
I modified the program to stop moving the leg downward once the sensor activated. This worked but I realized under some circumstances I needed the leg to stop moving once the leg touches down and other times the leg needs to be able to move even if the sensor is active (such as when the robot is raising itself up and the leg tips are stationary). My initial programming change is adding a new variable to the input command string. The command string consists of ‘$, leg number, femur angle, tibia angle, coxa angle, and 1 for stop on leg down sensor or 0 for ignore sensor’. The code changes are only on the femur as this is the only motor that lifts and lowers the leg.
I’ll play around with this a while and see if this sequence works out. For normal walking purposes the sensor indicates when the leg has touched down. If the robot is stationary and changing its height without the leg tip moving then the sensor is ignored.
Once I finish verifying the sensor works with the robot legs in different positions (I need the sensor to activate when the tibia has the leg at full extension) then time to machine 5 sensor housings just like it.
One of the things I found after returning from our last trip is that the robot sealed lead acid battery will only charge up to around 75%. When the battery is being used, the battery voltage steadily drops much faster than before, even with the charger plugged in. So the search for a replacement battery commenced. I found this place for making DIY Lithium battery packs, https://vruzend.com/. It looks pretty good and I like not needing to invest in a spot welder to make the connections. They sell all the parts needed for putting together batteries. They also have some good tutorials and technical information. I’ll wait to closer to the end of the month to see how expenses are doing and then order everything.
I really enjoy your posts here and your craftsmenship,
Mike
The thing that took the longest was screwing the threaded rod into the sensor and then other end into the threaded support as the wires wrap around then threaded rod inside the lower tube and I have to be careful not to damage the wires if they start to wrap too tightly. I had to file the threaded rods along the middle of the rod as the wire insulation was getting damaged.
Here you can see 3 of the attached sensors.
This was a case of adding a new plug and then fishing the new wires from the main deck to the controller level. Luckily I installed a interior light to be able to see what I’m doing inside the main deck.
Here is the robot with all the legs reattached and ready to go
While I was at it, I didn’t like passing the safety ropes down under the leg supports, it wasn’t a good location and occasionally interferes with leg movements. So I replaced a couple of bolts on each side with longer bolts and a plastic ring so the rope can wrap around them and hold the robot from closer to the top.
Starting programming again tomorrow, first copy the latest code update into the individual controllers, test them, and hopefully start running everything under the master computer again.
One thing I’m going to try is coding the master computer using FastSpin. I understand that this compiles code into assembly vs interpreted so it runs faster. Since the Inverse Kinematics floating point equations take so much time to run, maybe this is what I need.
The other choice is to wait for the P2 to officially come out. I got one of the P2 Rev A evaluation boards but never got a chance to really dive into it. I understand they have a Rev B board out now and it seems that I can’t really use the new languages with the older board. I need to look into that further.
To combat this I coded a short delay where the software checks the sensor 10 times separated by 25 msec intervals. Initial results are encouraging, the new test leg ran the leg down until the sensor was fully activated without over running the desired position.
I fixed a few other minor issues like giving default values for activation of the leg down sensor after I mis-typed a leg position and didn’t enter a valid value for the leg to stop at the floor. It kept going to the requested position, luckily I had the safety rope in place to prevent the robot from tipping over.
More testing coming tonight, have to update each leg controller again and re-test them.
I ordered parts to build a new DIY lithium battery (https://vruzend.com) today. As part of that process I went to the Parallax store to check the voltage range for the HB-25 motor controller when I discovered that they were discontinued! Since I don’t have any spares I shot off an email to Parallax and asked if they might have any extras still available as use as spares, they responded pretty quickly and they are checking around for extras for me.
I still had unused cogs in the leg controller so I started up a dedicated loop that continuously outputs feedback (actual leg angles, current leg movement direction, motor finished status, and the leg down sensor output), 10 variables total, sent in 3 separate data groups. The loop sends the data back via a dedicated link on each controller to separate input pins on the master so there aren’t any packet collision issues. The master sequentially reads each input pin and assigns the incoming data to a local data array for use as needed. The master has its own dedicated cog reading the data so all it does is read and update the global data arrays which other parts of the program can use as needed.
Still testing out the new setup, it looks promising so far and is more flexible than the original setup.
As I was reviewing the code I also fixed some inconsistencies I found and added better notes, its amazing how code that was so obvious that it didn’t need notes can be so confusing a year later!
I want to get to the point again where I can get some routines programmed in that I can put together a video to show the robot’s operation instead if just talking about it!
Bob
Here is a photo of the troubleshooting data I get when testing a leg controller. The top of the screen is the initial leg angle positioning and the leg down sensor is active. Below that is the leg command, starting with ‘$’. The 5 is a command for leg #5, the next 3 values are the requested movement angles for Femur, Tibia, and Coxa. Those values are angles expressed as an integer value so 900 is 90.0 degrees. The last number is either a 1 or 0, this tells whether or not to stop femur movement when the leg down sensor is activated. The next block is the actual movement, this shows the femur movement. There are several values indicating various PID values, the movement direction, speed, leg down actuator status, encoder value, and calculated femur angles. The end of the block shows the conditions that stop movement such as errors or reaching the goal position. It also shows some of the old feedback data. I can specify which leg motor to view so I spend a lot of time using this for tweaking the code.
Anyway, the package came with all the little bits and pieces so I can build a battery. I got a charger for battery and a Battery Management System board to control charging so as to maximize battery life.
The battery kit uses plastic caps that fit over the top and bottom of a standard 18650 cell. Its a tight fit with the plastic top having a spring loaded contact inside connected to a threaded post. The plastic parts have dovetails on each side, 2 are male and the other 2 are female which allows the batteries to interlock on a grid pattern.
I wanted a 12v battery with 25 amp-hr capacity. So I put together a 4S8P confirmation. 4 cells are joined in series (3.7v per cell x 4. = 14.8v output) and 8 cells joined in parallel (3500ma per cell x 8 = 28 amp-hr). The Vruzend website has several very nice videos on how to design your battery and how to build it. That was the first time I did, re-watch all the videos!
Starting the build process I hooked together 8 positive caps and pressed the batteries into the plastic sleeve. Its a very tight fit but using a piece of plastic made it easier to get them done. After that, the negative caps were put on. This was a easily done and a small rubber mallet to seat the batteries was used also. The multimeter was used to verify I could read a voltage at each post indicating a good connection. Repeat this step 3 more times
Once the 4 battery sections were done, they were connected together using the dovetails. This was a little tricky but got everything lighted up and they slide together. They include some long barrel bolts that can be added to help keep the battery parts from moving if used in high vibration locations. These are the flat head screws located between some of the cells. After all that, its time to start making electrical connections. The kit comes with a number of nickel plated copper strips with holes that line up with the posts on each cell. These metal strips are laid down to give the proper series and parallel confirmation. This was the more nervous part of the build, making sure the strips were in the right places and not dropping one potentially causing a short. Small nuts are tightened to hold the metal strips in place.
Here is the top of the battery with the power output posts ready to have wires added. You can see the multimeter reading the expected output violate for the array.
I still have to install the BMS, need to watch that video again! Then add the output wires and charging connections. Finishing the battery up will include wrapping it in a thin foam and then use heat shrink to hold everything in place and prevent accidental shorting.
This battery will provide plenty of power for the robot. I can expand the capacity if needed just by adding some additional cells. This system is pretty easy to put together and get exactly the battery size you need. All the other methods I saw for building battery packs involved using a spot welder which is an investment I didn’t want to undertake. This is pretty flexible and the end product size isn’t that much larger than spot welded packs.
Next I wrapped the entire battery in a thin rubber foam to protect it from vibration and accidental drops.
After the foam the large diameter heat shrink was added. I’m used to the small stuff, this is pretty wild heat shrink, very easy to use but shrinks quick with low heat from a heat gun. I didn’t make real pretty, need more practice time for pretty!
And here is the new 28 amp-hr battery in the battery tray. I haven’t weighted it yet but it’s much lighter than the gel cell and considerably smaller. It looks like I could add a second one this size without any changes to the area.
I need to setup the battery charging, on this BMS the charger connects through the output, some BMS have dedicated charging connections. It was too hard to hold and solder the wires for both the output and soldering on the BMS connection pad so I decided to make those connections externally. I also need to add a charging port to plug the charger into. Before that happens I had to try the battery out on the robot. Plugged it in, turned the key switch and the robot lit up and the computers all powered on. I measured 3.4 millivolts across the shunt so the battery was supplying 3.4 amps with everything on but no motors running. After turning it back off I took some measurements, came up with some ideas and will sleep on it before I commit to making any power system wiring changes.
Out of curiosity, how much does your battery pack weight? So, you have a 14.4V 28Ah battery back, what kind of voltage regulators will you be using?
Ray
Haven’t weighed the pack but it feels pretty light as compared to the old battery!
The power system uses a 12v to 5v DC to DC commercial regulator for powering the computers. I don’t remember the output current but it was more than adequate to supply all the anticipated computers and accessories I want. I might have more info on it back when I installed it if you want to read through some of the earlier entries in this thread. The motor side uses 12v DC brushed motors that are powered via 18 HB-25 motor controllers. The HB-25 is rated for higher voltages so no regulation needed for the motor power side. 12v motors won’t be measurably affected with the slight voltage increase, they will just run a bit faster.
Save your nerves for other things
Before this calamity things were going pretty well. I prettied up the switch panel using the laser cutter to cut the new one out. It turned out nicely but I found the key switch I used only allows the key to be removed when in the ON position. I replaced the old switch because the solder tabs on the switch had broken off making it difficult to get a good electrical connection.
I’m still working out how best to incorporate the new leg down sensors in the code. The simple task of telling all 6 legs to just touch the ground has taken on new complications. So I’m writing code, running it to see what moves the robot actually makes. This makes for a lot of false starts but there is progress.
Next was disconnecting all power connections and separating the battery level from the main level. Its been a while since the robot has been disassembled this far but now there is much easier access to the interior wiring which will make locating and fixing the problem easier.
Once I correct my electrical mistake I see several things that could be improved in the wiring layout to make it simpler to work on in the future. For one, I can’t remember why in the world all the power wiring from the battery is coming up the center of the robot and then fans out to the legs. Seems it would be much neater to bring the wires up along the sides.
Thank you for the pictures.
Mike
I did a lot of tracing out the wiring and still haven’t found the electrical fault. Its been more difficult than anticipated as there have been many changes and additions to the wiring so wires are heading every which way. Plus I found one connector that isn’t connecting securely and needs replacement. Based on this I decided to re-wire the 12v motor power distribution. I’m laying out the components and putting in dedicated +/- 12v busses and additional wiring distribution points for future additions. Got a new schematic drawn up, got some better wires to use (old wires were very stiff and hard to manipulate). I need a better mounting board for the components so have to figure how to mount that also.
Having a much smaller battery gives me additional space so there are several options on how to setup the wiring, just need to take my time and get it right.