I like RoboDK because it is Python based and I LOVE Python.
Anyway. I gave up on the project for a while because I got sick of the USB connection reliability being sucky, and crashy.
Then I put on my big boy pants on, and started modifying the firmware to use UART with custom short commands and 921600 baudrate.
After a long time of working. I got it and I developed a simple GUI to control it.
Now that I have a GUI, I can calibrate all joints and home them using the AWESOME hard stop homing. see here: https://youtu.be/nYdeXFth3EI
Then I figured I add a “park” position function that allows me to park the robot before I click IDLE and close. See here: https://youtu.be/tBGBzsRpWfc
On to the issues and where I need ideas and help.
I can use RoboDK to program a path, see here: https://youtu.be/0HJygEd8gEE
The simulation sends to my python script a list of joint angles, see here: https://youtu.be/kXAtio8DXW0
The issue as I described it is basically I would like to know the best way to drive the robot to implement the programmed path. I can get all the path joint angles and convert them to “encoder counts”, and I got it to save to a file, then get the file and extract ALL the path joint angles from it. My issue is not that. It is, what is the best or correct way to send these value to the ODrives and have them run the robot to depict this path.
I am currently using position control and trajectory control, using a modified Razor’s Edge firmware. So I am using the.
axis*.controller.input_pos = value followed by axis*.controller.update_pos()
This utilizes the trap_traj velocity, accel and decel. But it is not as easy as sending those counts to the ODrive.
If I just send the counts to each joint and run them, the motion looks like this: https://youtu.be/2A2Qs4Drmso
Trajectory planning is quit complex as you need to consider the dynamic loads on each individual joint like inertia, acceleration, torque etc.
What I think could help your path planning is to calculate the acceleration of each individual DOF meaning each joint has a different acceleration than the other. I am not sure if you already considered this but it might be a start?
You can take a look at this for more details (chapter 9): academia.edu/39668978/MODERN_ROBOTICS_MECHANICS_PLANNING_AND_CONTROL_Modern_Robotics_Mechanics_Planning_and_Control_c
@uniquenospacesshort Thank you,
Currently, all joints have been programmed to have the same accel and decel in the trap_traj settings with respect to their reduction ratio.
That being said. I believe that velocity, accel and decel should not be fixed and should depend on the counts that each joint will be traveling.
But then again its a learning curve.
Don’t use the Trajectory Planner for this, it’s not designed to synchronize the axes. My recommendation is to also parse the joint velocities with your program and send both input_pos and input_vel for each joint. In other words, with UART, p <axis> <pos> <vel>. If you can convert acceleration to current, then send the current also.
Not sure how you manage the robot to playback the motion profile. But as you said, it seems the set position is passing through much more quickly than the hardware reaction. Here just give some key point idea for you to have a check if it matches what you’ve done.
check the max speed, acceleration setting in your trajectory generator and make sure they could be achieved based on your motor setting;
generate the motion profile with timestamps (calculated into joint angle position);
do interpolation calculation for the motion profile based on the time stamp of which time the controller sending out the position to ODrive board;
@Jamil84
You’re welcome. Yes, this script for fusion360 works great. You need to convert those ascii stl files to binary stl files afterward though. Otherwise, MoveIt won’t be able to load them. I had to learn this the hard way…
This one worked for me: https://www.meshconvert.com/en.html
I am working on sharing my project. Unfortunately, I’m quite busy at the moment.
Did you find out what’s the best way to execute the trajectory (i.e. when you have a set of joint angles, what is the best way to make the robot follow the path smoothly)?