Ball Screw Robotic Leg Homing

Hey Guys!

This is my first post in the forums so feel free to provide constructive criticism on my post.

Myself and 3 others are building a robotic dog for our senior project. We have a BLDC attached to a pulley that is attached to a ball screw (essentially a BLDC driven linear actuator). We plan to have limit switches at the ends of the ball screw as indicators for the lower/upper limits.

I am aware that @WetMelon has developed a homing sequence and that i will have to flash the firmware. From what I found on the forums, it seems that it would be best to use an Arduino’s digital pins to read the limit switches.

In our current design we have the NVIDIA Jetson Nano controlling the motors in Python and would like to connect the Arduino via USB. My questions are: With the Arduino and Nano communicating, what would the homing sequence process look like? What form of data should we be sending to the Nano and how do we use that data?

Any help would be great!

P.S. Will post pictures as the project continues.

Kristian, I have a similar setup with a robotic CNC Gantry mounted on a rover. Instead of limit switches I use the current reading from the odrive to find the ends of the ball screw. I send the odrive a command to advance the ball screw in a search step 5-15mm, whatever step feels safe. Then I read the current from the odrive using the “f motor” ascii command but I’m sure there’s equivalent for a direct USB connection if that’s what you have. When the joint runs to the full extension it runs into the wall of the Gantry and tries to increase the current, I watch for that current increase as quickly as possible, 50ms or less polling, and store that position as a joint end when I see the current jump, reverse by one search step and start moving the other way to get all ends of my Gantry.

1 Like

You can wire the limit-switches directly into the GPIO pins on the ODrive when you have the correct firmware flashed. Using as arduino inbetween will only slow things down.

1 Like