Skip to content
Snippets Groups Projects
Verified Commit 1cbd8313 authored by Christian Dreher's avatar Christian Dreher
Browse files

fix: Backwards compatible way of releasing SS2 in a less-safe manner

parent eff02153
No related branches found
No related tags found
No related merge requests found
Pipeline #20704 passed
Pipeline: RobotAPI

#20705

    ......@@ -185,8 +185,7 @@ namespace armarx
    {
    if (emergencyStopMasterPrx)
    {
    lastKnownEmergencyStopState = emergencyStopMasterPrx->trySetEmergencyStopState(
    EmergencyStopState::eEmergencyStopInactive);
    lastKnownEmergencyStopState = releaseSS2OnMaster();
    if (lastKnownEmergencyStopState == EmergencyStopState::eEmergencyStopActive)
    {
    ......@@ -213,8 +212,7 @@ namespace armarx
    case EmergencyStopState::eEmergencyStopActive:
    {
    // Only release SS2 if the state we received still is "Active". Fail otherwise.
    lastKnownEmergencyStopState = emergencyStopMasterPrx->trySetEmergencyStopState(
    EmergencyStopState::eEmergencyStopInactive);
    lastKnownEmergencyStopState = releaseSS2OnMaster();
    if (lastKnownEmergencyStopState == EmergencyStopState::eEmergencyStopActive)
    {
    ARMARX_INFO << "SS2 cannot be released since it was just activated.";
    ......@@ -235,6 +233,37 @@ namespace armarx
    return "EmergencyStopGuiWidget" + iceNameUUID;
    }
    EmergencyStopState
    EmergencyStopWidget::releaseSS2OnMaster() const
    {
    // If emergency stop master is not available, assume that SS2 is still active and cannot
    // be released.
    if (not emergencyStopMasterPrx)
    {
    return EmergencyStopState::eEmergencyStopActive;
    }
    try
    {
    return emergencyStopMasterPrx->trySetEmergencyStopState(
    EmergencyStopState::eEmergencyStopInactive);
    }
    // This catch is only required as long as the stable robot workspaces are using the old
    // interface. The changes for the new interface were done in July 2024. It can safely be
    // removed after a few months.
    catch (Ice::OperationNotExistException const&)
    {
    ARMARX_WARNING << "Cannot safely release SS2. This only happens if your ArmarX GUI "
    "is using a newer version of the emergency stop interface than the "
    "emergency stop master or the robot unit provides. Will use a less "
    "safe fallback interface method now.";
    emergencyStopMasterPrx->setEmergencyStopState(
    EmergencyStopState::eEmergencyStopInactive);
    return emergencyStopMasterPrx->getEmergencyStopState();
    }
    }
    void
    EmergencyStopWidget::setChecked(const EmergencyStopState state)
    {
    ......
    ......@@ -69,6 +69,9 @@ namespace armarx
    void onDisconnectComponent() override;
    std::string getDefaultName() const override;
    EmergencyStopState
    releaseSS2OnMaster() const;
    private slots:
    void setChecked(const EmergencyStopState);
    void updateEmergencyStopState();
    ......
    0% Loading or .
    You are about to add 0 people to the discussion. Proceed with caution.
    Finish editing this message first!
    Please register or to comment