PoMoCo 1.0 and Servotor32 1.7 Firmware

Lots of changes! The new version are updated to the github, and available on the getting started page, as well as the respective product pages.

[size=150]PoMoCo 0.9 to 1.0 Changes:[/size]
1.) All moves now run out of the Moves folder.

Each move is a separate file that automatically imports all the necessary libraries. On startup, PoMoCo automatically recognizes the files in the move folders, and creates buttons for each of them. The moves are dynamically loaded when its button is pressed, meaning you don’t even need to restart PoMoCo when you modify the move!

In Short, the process for creating a move is now:
1.) Create a .py File in [PoMoCo main folder]/Moves/
2.) Write moves as detailed in the documentation
3.) Open PoMoCo
4.) Click the button matching the file name to run the move
5.) Update the move in the text editor, click the button again, and the updated move runs without restarted the program

2.) Frame rate fix
Changed from 50 FPS to 10FPS. This was causing a lot of slowdowns and hangups on OSX. This change has been confirmed on multiple OSX machines to solve hangups.

3.) Changing file locations
All support files that aren’t PoMoCo.py are now moved to [PoMoCo Main Folder]/PoMoCo/ to clean up the look of the software

4.) Baud Rate Change
Slowed down the Baud rate on the serial connection from 115200 to 9600 to correspond with the 1.7 Firmware Update

5.) Move Rate Change
Changed the number of servo updates per move per second from 40 to 5. This dramatically decreases the time it takes per move, especially with moves like walking

6.) Move Cleanup
We had a lot of moves in there we wrote either for trade shows or videos, or were still unfinished (like walking lean back). We fixed each move up, and they’re now all ready to go. We even added a couple (like Get Up).

[size=150]Servotor32 Fimware 1.5 to 1.7 changes[/size]
We shipped some board with an in-between 1.6 version. They are mostly the same, except for the change from 115200 to 9600 baud.

1.) Dramatically Reduced Shaking
A huge cause of shaking was conflicting interrupts. the delay() function in arduino, the ADC converter and the timer used for tone() all run interrupts in the background with the Arduino software by default. These interrupts messed with the tight timing necessary to keep all of the servos running stably. The servos still exhibit some jitter, especially the hip servos as they have a very heavy and long moment arm on them, but this is now entirely caused by the servos themselves, and now has nothing to do with the controller.

2.) Baud Rate Change
Slowed down the Baud rate on the serial connection changed from 115200 to 9600. At 115200, the controller was having to respond unreasonably fast. While the chip has a hardware serial buffer, it doesn’t have a hardware USB serial buffer. The rate of commands would cause some to be missed, caught half way, etc. The USB hardware interrupt was also over-riding the interrupt that sends the timing signals to the servos, causing really bad jittering while moving. At 9600 Baud, you still get 810 servo commands a second, or 25 per servo per second at full utilization, and the controller gets a while to breathe.

3.) Centering Fix
We accidentally had servos 0-3 set to +90 degrees instead of 0 degrees on bootup in Firmware 1.5. This has now been fixed.

Excellent news!

I’m looking forward to trying it out.

Hope you enjoy the holidays!

Thanks so much for the update.

My Hexy now moves MUCH more smoothly and deliberately and needs my help less to make those moves. I look forward to creating some moves of my own and seeing what the community comes up with.

Can’t wait to start trying to make him work with a remote soon too :slight_smile:

I’m happy to report similar results.

Much more reliable, shakes are minimal, though the walking pace could use a little more “umph”, I’m still very pleased.

I reset the bluetooth card to 9600 baud and updated the wiki to add a section on bluetooth.

Thank you Joe!

Update: I just loaded the new 1.7 firmware on the board, reinstalled the pyserial and ran the new PoMoCo software on my Mac. The hexy runs very smoothly now and I’ll be doing more testing soon. Thanks again!

I’m trying to install the firmware 1.7 on a MAC under Arduino 1.0.3, when I verify the code I get the following error:
Servotor32.ino: In function ‘void setup()’:
Servotor32:35: error: ‘DDRF’ was not declared in this scope
Servotor32:40: error: ‘Serial1’ was not declared in this scope
Servotor32.ino: In function ‘void callback()’:
Servotor32:92: error: ‘PORTF’ was not declared in this scope
Servotor32.ino: In function ‘void loop()’:
Servotor32:262: error: ‘TIMSK3’ was not declared in this scope
Servotor32:262: error: ‘TOIE3’ was not declared in this scope
Servotor32:263: error: ‘TIMSK4’ was not declared in this scope
Servotor32:263: error: ‘TOIE4’ was not declared in this scope
Servotor32:336: error: ‘Serial1’ was not declared in this scope

I w able to update to 1.5 with no problems.

Any thoughts?

That’s usually because the Arduino Leonardo isn’t selected under Tools > Boards. You probably have Arduino Uno selected instead.

Thanks, thought I did change it but alas.

How do you know what Firmware version the board has installed?

You can connect the board to your computer via USB and then in the serial monitor within Arduino you can type “V” and a version number should be returned.

arcbotics.com/products/servotor32/

wich is refferd by github.com/ArcBotics/Hexy/wiki/Servotor32 still lists only up to V1.5

Fixed that page, it now lists 1.7

Just curious, but is there a reason that “killAll” in PoMoCo is implemented as a loop sending “#nL” to all 32 servos rather than simply sending “K” and letting the Servotor firmware do it? Was “K” not implemented in older firmware versions, or is there a more subtle reason?

We didn’t have that command in the software at the time.