-
Notifications
You must be signed in to change notification settings - Fork 21
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
Support for FS100 controllers #227
Conversation
CI will fail as we currently have no release of M+ We'll deal with that later. Edit: and of course because of #212 (comment). |
This comment was marked as outdated.
This comment was marked as outdated.
1989c13
to
7f95156
Compare
Something to decide: the current work-around/hack mentioned in #19 (comment) only works for Agents running on little-endian machines. I expect that to be the typical setup for use with MotoROS2 (ie: That would not work for the FS100. Personally, I feel we could document this, but:
Given the fact the FS100 is a legacy platform at this point this may all be acceptable, but we need to decide how we want to approach this. |
Go to
I'm of this opinion. Just document the limitation and move on. There will be a limited set of users using MR2 on FS100 and a much smaller set of those using a bigendian cpu. |
@gavanderhoorn Beyond the potential endianness issue, what concerns do you have? Given the success of the previous testing, I'm not really sure why this is a 'draft' PR. My biggest concern is that we haven't validated on a non-dummy controller. I'm going to try to scrounge up one of the old educational carts. Now that the rebase is complete, I'm happy to test all topics/services again. Please provide a binary of the libmicroros. (I'll also validate the VS settings for building MR2.) |
I've located an FS100 with an arm. It should be here tomorrow afternoon. |
It's partly a draft because I haven't actually moved anything, neither real hw nor virtual. It also lacks documentation updates, and I still need to verify which parameters need to be set to which values. |
From my personal notes regarding the FS100: I don't think that S2C1402 Everything else should be covered by our existing setup-instructions. |
@gavanderhoorn |
that wouldn't work, as it has I'll build a fresh alpha. |
@ted-miller: here you go: |
I'll do some more thorough testing next week. But doing a quick test, I was able to get the robot to move with the point-queue service. Other quick notes:
|
👍
hm. Is this a known issue? I'm running
Probably due to the M-register for velocity feedback not being supported on FS100? At least that's what logged on my controller when it boots up MotoROS2.
I believe I've seen something similar, but wasn't sure whether it was caused by the fact I don't have any manipulator connected. |
No. The M+ manual says the API should work. But I looked at MR1 code and see that
Yup. That'll do it. I guess we need to convert |
I believe we have an open issue on the internal tracker (
I was confused by the comments in that issue as you also suggested changing to |
(Not sure if this note is a repost. I know I had something typed up, but I think I closed the window prematurely.) I made a small app that just polls For velocity: For effort: But it seems like there's a lot of fluctuation on multiple axes for even a very simple motion, such as jogging the S axis. Also, the resting-position seems unusual. If I jog S+ the value spikes. When motion is complete, the value settles around 15000. But then if I jog S- and stop, the value settles around -10000. I understand the sign inversion, but I don't get why the absolute value is significantly different. I tested a motion with the FJT script. The motion worked, but the final position was outside of tolerance on both axes that I moved by 0.012 rad. I'm wondering if this is related to the 'laggy' response I get when jogging. In the error message about the trajectory being outside tolerance, the joint names were non-ascii characters. motoros2/src/ActionServer_FJT.c Lines 571 to 573 in 7f95156
This has me questioning if something is overflowing an array. Or perhaps this isn't working properly. |
Hm. Sounds like something isn't working. re: velocities & torques: could this be rate-dependent? |
@ted-miller: I've added dd13f53 which (im)ports the MotoROS1 version of |
dd13f53
to
d4fb2fd
Compare
@ted-miller: I just remembered I haven't actually built this branch after I added d4fb2fd. |
@ted-miller wrote:
Should that be
Technically I believe we could use |
I was able to build this yesterday. Though, I did have to shrink Also, there were a bunch of annoying warnings about an unneeded
Technically, yes. But since the string pointer is the first entry in that structure, it should be ok. |
that should indeed not really be needed. I may be doing something 'different' when building it here. I'll take a look at my settings.
I don't remember anything about
technically, yes. But after I changed that when working on #233, the issues with |
@ted-miller: have you had any time to take a further look at this? |
No I haven't. |
@gavanderhoorn I have a Yaskawa Motoman SIA20F with an FS100 controller and can try to run this on my end. Could you help me with the necessary files and instructions on how to get started? |
Humble only for now.
Humble only for now.
Update use of constants and add conditionals to account for this.
So update relevant constants to account for this.
So gate it.
So introduce a custom implementation for FS100 and call that instead.
Gate it on controller platforms which are known to support it (similar to how we do this in MotoROS1).
Limit use to controller series known to have it and have FS100 just fail the function completely.
`mpFstat(..)` doesn't appear to work reliably, or at least not for files on USB sticks and SRAM drive (not sure about main FS). Use (a custom implementation of) `tell(..)` to determine actual file size and use it to override `stat::st_size`.
Previous conditional was too conservative. Add FS100 to supported controllers.
Otherwise the binary won't load, and this should still be sufficient for the maximum size of the goals we want/need to support.
It doesn't support the M-register approach, so make use of mpSvsGetvelTrqFb(..) instead.
Remove all other controllers + M+ `libmicroros` tuples.
f0bb782
to
da05b1c
Compare
@jfernandez37: I started work to try and reproduce what you've reported last week, but haven't been able so far. My FS100 isn't setup with physical hw, which may be why. I'll try some more ways to 'break' it. |
@jfernandez37: I'm starting to suspect the sleep/timer implementation on FS100 platforms (not the base OS, but MotoROS2's wrapper/use of it), but haven't been able to pin-point anything yet. Have you observed any more issues in the meantime? And thank you for testing the alpha. This is valuable. |
No, we haven't noticed any more issues with it. Thank you for your help. |
#296 fixes at least one case of "strange chars" in the debug log of the FS100 build I'm testing. |
Just to provide an update: @jfernandez37: due to the way my FS100 is configured I can't seem to reproduce the problem(s) you encountered. I've tried to break things by executing many different trajectories all over the (combined) joint position ranges of all joints without running into any issues so far. I've identified a couple of other issues with the port which we'll be addressing later, but we're going to need a different setup to debug. I believe @ted-miller may have an opportunity soon to assist. |
I have not been able to reproduce this issue either. Using a small 6-axis arm, I'm able to execute any trajectories repeatedly. I also tried reconfiguring as a 7-axis SIA (with a virtual arm). Still not able to cause this issue. It seems the problem is with the micro-ros agent. Please ensure that the latest humble docker image is being used. Other oddities:
|
@ted-miller wrote:
did you encounter any other issues while executing those trajectories? This was with actual HW right?
Just making sure (again? perhaps) @jfernandez37: you are running this on an Could (probably is) something else, but just to rule things out. One possible other cause of the error mentioned in #227 (comment) would be a buffer overflow (on the MR2 side) and/or memory corruption.
Yes, I remember running into this myself. I'm also unsure what causes that. I've considered it a red herring for now.
was this with
Also ran into this. Had to use the same work-around. thanks for testing. At this point I'll see if can create a heavily instrumented version of MotoROS2 which logs just about everything around the trajectory processing, re-ordering and execution queues. |
Yes. We are running the most recent version of the docker image and on an am64 laptop. |
Apologies, that was supposed to read |
I just checked the laptop that we have been using, and it has an Intel cpu |
that's ok. |
I got the "outside tolerance" failure that was mentioned previously. I think there's something "laggy" with the FS100. But the arm executed the motion just fine.
The 6 axis tests were with a physical arm. The 7 axis tests were dummy-mode.
Yes, DUMMY SERVO MODE was enabled when compiling MR2. |
I'm going to close this for now. As testing by @Sanchitkedia, @jfernandez37 and @ted-miller has shown, it needs some more work. As I don't have sufficient time to work on it right now, I'll close it -- temporarily -- to take it off the review queue. I'll re-open when I have something to update. @Sanchitkedia @jfernandez37: I'll still try and get an instrumented build together for you, and if you'd still be interested in it I'd still appreciate your help testing it with your SIA20 setup. I would understand if you'd migrated to other solutions by that time though. |
This is for #19 (and a resubmit of #226 from a branch here on the main repository).
A draft currently, but first steps towards FS100 support.