-
Notifications
You must be signed in to change notification settings - Fork 50
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
Potential use with Robotiq 3f? #39
Comments
^ This was me, I was using our shared lab account :) |
I'm not sure, but we'd welcome PRs if you do get it working. The idea behind this big PR: #34 Was to get this repo more in sync with another repo we've been working on and then having all the robotiq grippers in one place, and we would welcome the 3f gripper too we just don't have one physically. |
CC @kineticsystem thoughts/opinions? |
I'm planning to start by just in-place updating things from 2f to 3f, but I would like to contribute this back once I get that working. There seems to be quite a lot of abstraction/structure in the code that I don't immediately understand how to use. Would someone be able to explain briefly what the intention was and what the names mean? Why "factory" and why "default_*"? |
The idea is to have those two repo merged into one. The idea behind all those abstractions is testability. Each code layer can be tested in isolation without connecting to the hardware. This diagram may help you understand how all the abstractions are combined. When you see something that start by |
Unfortunately, testing a hardware interface in isolation is impossible because it is a concrete class. For this reason, I added a factory to create a driver and plug it into the hardware interface. We can mock the factory and make the hardware interface believe it is connected to hardware while it is not. The Default Driver returned by the Default Factory can also be used in isolation, without ROS, and in fact is used on its own inside some test executables in the If you need more information we can setup a meeting, I think it is easier to guide you through the code. |
One last thing. If you look at the diagram |
Thanks Giovanni! So when merged, Do you think merging the 2f and epick repos will happen in the next month or two? I will be working with this 3f code for a little while, so I could help get all three in the same repo. |
We could rename them or keep the same names and use the namespaces to distinguish them. They already live in different namespaces. I would like to have them merged sooner rather than later; I do not think it is a difficult task. If you follow the structure of this repo and reuse the classes for the serial communication, we can drop your code easily into the merged repo. Hopefully, the only code that will differ will be the driver, which is specific to your hardware. It is important that your code is as testable as the existing one. We already provided tests for the serial communication; you only have to test your hardware interface and driver and provide a CLI to test the actual hardware. If you would like me to drive through the code, let me know. |
Ok, I'll base mine of the epick one then. If someone makes a PR to merge epick into this repo then please tag me so I can see how it looks |
Here's my working draft, now based on the epick repo. |
Question for you all -- how do you think I should be support "modes" and "mode changing" in ros2 control? Do I need to write a custom "controller" that provides the ROS topics/services for setting and getting modes? I was also considering just putting that directly in the driver for simplicity. I don't think the standard controllers and state/command interfaces are useful for custom modes like the robotiq 3f gripper has. How would y'all do it? |
I haven't gotten to play with the 3f gripper nor am I familiar with it's custom modes but I'd probably discuss it with @MarqRazz and on roscontrol.slack.com |
Oh cool I didn't know there was such a thing -- does someone have to add me? I'm not sure how to join. |
@kineticsystem how did you support the modes and additional states (like vac pressure) on the e-pick gripper? Are they runtime configurable? |
Cross-posting here: https://discourse.ros.org/t/looking-for-feedback-on-design-on-ros2-control-interface-for-robotiq-3f-gripper/35122 I've got the driver working and now I'm just trying to figure out how to make it more usable and fit with ros2 control best practices. One thing I'm struggling with is creating an intuiting ROS API, since apparently one can only bind state/cmd to doubles? I used this in conjunction with the build in JointGroupPositionController, but this creates a very ugly command interface with Float64MultiArray which is really hard to understand. So instead I'm thinking I should probably write a custom controller which it seems is what the |
@MarqRazz The gripper has fondamentally two states, on and off. All the rest are parameters that are read during the initialization of the driver. @PeterMitrano
|
In the ePick driver I used the first 3 options, but for a personal object I'm using the 4th and not using a controller at all. |
I think having this on ROS Discourse might be more visible and useful to the community, so I'm responding to Giovanni's comment there :) |
I'm seeing that the serial library is running really slowly for me, like 15 milliseconds just to send one command which is like 8 bytes. @kineticsystem @MarqRazz have y'all tested or noticed anything like this? |
Actually what I'm seeing might just be that it takes the robotiq 15ms to respond with serial data... I wrote a little test with
|
I'm just going to ignore the slowness of the serial comms for now, it doesn't seem to actually cause any problems. So I think I'm ready to make a PR with my new driver for the 3f. I'd be adding the following packages:
I think I should wait to PR until the |
Hello! I'm wondering if I can use this to control our 3f grippers. I believe this is for the 2f, so I would expect to need to do some work to make it work for 3f but so far this is the best/closest thing I've found to a ROS2 driver for the robotiq 3f.
I have the datasheet so I could presumably make a new driver class for 3f? I'd also need a urdf, which I can probably copy from the ros1 repo. Any major hurdles/roadblocks that I'm missing?
Are contributions are welcome? If I get this working should I make a PR to add this? or should it be a separate repo?
The text was updated successfully, but these errors were encountered: