-
Notifications
You must be signed in to change notification settings - Fork 3
Add speed getter and acceleration getter and setter functions #82
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
Hi @metanav ☕ 👋 I am highly interested in what you describe you intend to do over in #81 . There already exists this draft PR #76 which provides a partial ROS2 driver for the Braccio++ written by me. You are kindly invited to extend it to make your application work. As for the APIs: You'd be welcome to add an additional API which allows configuring speed on a rad/s basis. The specification of the motors containing max. torque etc. are to be found here (section Tech Specs). |
Hi @aentinger, I have seen the PR you mentioned and already borrowed few things from it. I have implemented joint_states publisher and follow_joint_trajectory action server (to receive goals) using ROS2/microROS successfully. I am able to receive goals from the RViz via MoveIt2 at the carrier board MCU (Nano RP2040 connect). The issue is the arm pose/movement is not accurate due to the wrong constraints defined in the Braccio++ URDF. Also, to apply the goal trajectory points to the Braccio++ joints requires velocity and acceleration to move it as intended. Right now I am converting velocity to time using the similar calculation as you mentioned. I will try to implement the missing APIs but I need the Servos datasheet. |
The "datasheet" of the servos can be found via link in last line of my comment above. Sorry, I fixed the link. It should be obvious now. |
Thanks @aentinger! I found the speed/torque limits via the link. |
Please consider adding your working example via PR to this repository 🙏 |
Hi @metanav 👋 You are going to like the changes in #88 . It's now possible to configured the desired angular velocity via |
Thanks @aentinger! I will test them soon. Few questions:
|
No, there are still position set-points. You can merely define the angular velocity from one position set-point to the next.
It's true. However, you should not be directly using
No. But there's a thread that periodically "pings" all servos via the
If you are in that deep already, surely you know how to add an method for reading this register? 😉 |
I've tested it on the hardware and the joints move with the set velocity value. We may need to extend this API call, though. In the follow_joint_trajectory message from ROS may have different velocities (rad/s) for the joints at a specific trajectory point. Example Joint Trajectory:
I am thinking how can we implement and achieve the velocity at each position. |
HI @aentinger, The smaller Servo motors (gripper/wrist roll) move extremely slow in the comparision of other servo motors using the Example to reproduce:
|
I imagine this to be because the internal control loop is different than for other servos (since the hardware is also different)? Have you tried with setting a higher angular velocity? I imagine it would be helpful to set a angular velocity per joint, instead one shared between all joints ... of course I gather you'd rather like to directly feed velocity instead of position as a input parameter. If so, can you prepare a PR for extending the API in that way? |
By Increasing the velocity by 8 times |
Just curious, how's your PR on this issue doing? |
Hi, @aentinger. Sorry for the long delay on this issue. It took a considerable time to fully comprehend ROS2/MoveIt2. Now I am working on applying the motion planning path trajectories to the joints. Below is one of the real-time trajectories segment.
if we could set run time by calculating it from velocities and acceleration using the formula: Applying run times and corresponding positions as a block would be better. Also, we should take care of the joint whose position is not changing in the trajectory at every point in time. The current
Or, using struct:
|
To keep the existing API, there is another way by overloading the
|
I'm open to discuss this. Maybe you can prepare an PR with a possible API? |
One thing I wanted to clarify with the Smart Servo TX packet structure. Do we always need to send all 6 joint positions or can we send them selectively? Arduino_Braccio_plusplus/src/lib/motors/SmartServo.cpp Lines 258 to 276 in 3c9371e
I could not find any datasheet online for the SR312 or SR418D servos. In my code, I am handling the gripper and "base to wrist-roll" kinematic chain separately. The |
If you want all joints to act upon a new set-point at the same point in time then you need to send all six positions at once. Alternately you can update the servos individually but they will start moving towards the set-point as soon as their target position is updated. There are no datasheets besides the motor specs listed here. |
How can I achieve these:
Also, the speed() method parameter is time (ms ?) not the speed (rad/s).
The text was updated successfully, but these errors were encountered: