-
Notifications
You must be signed in to change notification settings - Fork 122
PreciseFlex Arm Driver #619
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
base: main
Are you sure you want to change the base?
Conversation
49a6770 to
159fd78
Compare
bffeb24 to
a1d61b7
Compare
… the Backend abstractmethods
…unndant method, chenge default ip address, change test_get_base assertion to tuple, add sleep to test_set_power
…lidation - Updated get_signal to correctly parse response and return signal value. - Modified get_location_z_clearance to return z_world as a boolean. - Enhanced set_location_z_clearance to convert z_world to an integer for command. - Improved get_location_config and set_location_config to handle bit mask configurations with validation checks.
…refactor speed handling and location management
…onfiguration tests
- Add has_rail: bool = False parameter to __init__ for both backends
- Override move_j() to conditionally include/exclude rail joint in moveJ command
- Override set_joint_angles() to conditionally include/exclude rail in locAngles command
- Fix convert_to_joint_space() to properly map all 6 wherej output values
The moveJ command format differs based on rail configuration:
- WITHOUT rail: moveJ {profile} {base} {shoulder} {elbow} {wrist} {gripper}
- WITH rail: moveJ {profile} {rail} {base} {shoulder} {elbow} {wrist} {gripper}
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- move_to(list) now directly creates PreciseFlexJointCoords from canonical 6-element list - Previously called convert_to_joint_space() which was designed for wherej output parsing - Input list format: [rail, base, shoulder, elbow, wrist, gripper] - For has_rail=False robots, rail is expected to be 0.0 at position 0 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
- Fix elbow orientation int<->enum mapping (1=RIGHT, 2=LEFT per GPL spec) - Add GPL_Single flag (0x1000) to restrict wrist to ±180° range - Fix rotation.y typo to rotation.roll in set_location_xyz - Fix attach() call to pass robot index parameter 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
|
|
also in PLR we now always have joints lists be in the format |
|
when gripping a plate using the reason is probably that it tries to close too far, as the gripper closes all the way when I run it without a plate. strangely, two questions:
|
|
re my second question: I get the following error when attempting any command after the crash: when I attach, I get this: I have to power cycle by physically powering off and on the robot. |
turns out, it pulls information not from the |
|
I havent run into this error with the pick plate before. But it maybe that the speed in your profile is too fast. So that may need to be lowered in the speed profile because some joints may not be able to keep up. The other part is I add in a setting to keep the wrist between +/- 180° to prevent some wild spinning of the wrist. It's a bitwise setting called GPL_Single flag (0x1000) in commit a332ab5 I think this including this would be useful because the wrist can get a little wild sometimes... but it may be the cause of this problem. I'd check the profile setting first though. I think the pick always just runs on profile 1. |
|
I think the reason is our end effector has prongs, which makes the default width different than yours. It is my first time using |
|
If setup(), which has the hp 1 and attach 1 isn't working, it may have gotten hung up with the GPL code running on the system. Go to the web application, I think its 192.168.0.1. Then select admin button and then click the top option in the side panel... I think it maybe be pendant or operator or similar. And in there I think you need to stop the GPL program that's loaded then need to load it again. I think there's a stop button and then you need to load it again. (You can also do this from Brooks' GDS app, if you have that) I dont have my laptop or the bot right now... so this is from memory. And a bad memory too. |
c1cc8af to
e6c6593
Compare
|
we are mostly ready I think! I just wrote a small tutorial showing how to do the basic things one thing still to discuss:
I will do the resource modeling (ie picking up resources instead of "pick up from coordinate") in a future PR. |
|
The only reason I can think of for keeping those functions is to have all endpoints of the TCS API exposed in python in case there is a difference and a user is specifically looking for one of them. But I think its probably just better to remove them in favor of a non-ambiguous API. Brooks' TCS GPL code is open source if a user wants to explore things more. There's a few things not exposed through the TCS interface. An example is the Kinematic Solve function for cartesian <-> joint conversions. It exists on the robot, but isn't exposed through the TCS program that ships with the robot. This is where Brooks' has a lot of their software - Guidance Development Studio (GDS), TCP Command Server (TCS), etc: |
Untested Driver
This adds:
Docs haven't been updated yet.
There's a warning included in the PreciseFlexBackend docstring that it's untested.