-
Notifications
You must be signed in to change notification settings - Fork 7
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
Implement Technosoft::stopRaw #120
Comments
This is a complex task. Extensive knowledge about the state model of the iPOS is required in order to transition to the fault state (which, if I remember correctly, commands motor stop) and back. See Section 5 in the iPOS user manual. |
Shouln't be too complex... The basic commands of the state machines of Section 4 and 5 are currently already implemented in TechnosoftIpos/ICanBusSharerImpl.cpp. Note that some transitions are performed via the same command, namely readyToSwitchOn == shutdown as far as I recall and documented. I would, however, block this issue by two tasks (please ref to other issues if they are already posted):
As a side note, I've posted #171 which, related to #162 could change many things in the long-run. Would have no problem in diving deeper into this after IROS deadline. :-) |
I mean, the TechnosoftIpos devices must be aware at any time of their internal driver state, thus some FSM solution looks mandatory. We do traverse the states ATM, but only upon initialization and shutdown, which is fairly straightforward. |
Oh, ok. Understood. |
From 5.1 CiA402 State machine and command coding (P091.063.iPOS.STO.UM.0117, 2017):
Quick Stop active state description:
5.3.5 Object 605Ah: Quick stop option code:
Default is 2. So, we need to configure object 605Ah to value 6 on initialization, and implement |
The Operation enabled to Quick stop transition seems instantaneous. I could either add a tiny delay or watch Status Word for state transitions, but it seems to work nice regardless of that. Adding a 1 ms delay ASWJ. Tested on both position and velocity control with the real robot. Have to update BasicCartesianControl at kinematics-dynamics; we'll no longer perform a control mode change, which was a workaround for the missing stop implementation. |
Added Done at 4e3ca34. |
The "halt" command in controlword seems to achieve the same result without the need for switching drive states back and forth. According to the user manual, this bit is usually related to the "position reached" bit in statusword, i.e. an active halt command signalizes that the drive has ended decelerating when said bit is set. In other words, |
For now, I'm giving up on the halt command. Even though it seems to fit better our purposes (a single write action that does not involve a state change), the need to reset this controlword is a major drawback. We could do this in two situations:
The current solution looks like this: yarp-devices/libraries/YarpPlugins/TechnosoftIpos/IPositionControlRawImpl.cpp Lines 253 to 254 in 9e65b22
Despite that double state change, the controller stops motion and is ready for processing the next target right after it leaves I wonder if the quick stop ramp is too aggressive (i.e. the deceleration rate is quite high). |
Idea: leave |
Yes, the |
Ready at ad3855e: yarp-devices/libraries/YarpPlugins/TechnosoftIpos/IPositionControlRawImpl.cpp Lines 250 to 255 in ad3855e
This changeset also spans to the API of
|
I decided to restrict |
CiA 402-2 in Table 26 – Transition events and actions states that "it is not recommended to support transition 16", i.e. from "Quick stop active" to "Operation enabled". |
Not implemented yet (click), thus we cannot issue a
set sto
/set stos
RPC command (which is relevant for safety reasons).Remember to remove this at kin-dyn when done (
BasicCartesianControl::stopControl
).The text was updated successfully, but these errors were encountered: