diff --git a/kuka_external_control_sdk/krc_setup/iiqka_os2/Program/RSI/rsi_gpio_example.src b/kuka_external_control_sdk/krc_setup/iiqka_os2/Program/RSI/rsi_gpio_example.src
deleted file mode 100644
index 1f33770..0000000
--- a/kuka_external_control_sdk/krc_setup/iiqka_os2/Program/RSI/rsi_gpio_example.src
+++ /dev/null
@@ -1,74 +0,0 @@
-&ACCESS RVP
-DEF rsi_gpio_example()
- ; =============================================
- ; Copyright 2025 KUKA Hungaria Kft.
- ;
- ; Licensed under the Apache License, Version 2.0 (the "License");
- ; you may not use this file except in compliance with the License.
- ; You may obtain a copy of the License at
- ;
- ; http://www.apache.org/licenses/LICENSE-2.0
- ;
- ; Unless required by applicable law or agreed to in writing, software
- ; distributed under the License is distributed on an "AS IS" BASIS,
- ; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ; See the License for the specific language governing permissions and
- ; limitations under the License.
- ; =============================================
-
- ; =============================================
- ;
- ; ROS INDUSTRIAL: KUKA RSI HW INTERFACE
- ; Realtime UDP data exchange with
- ; kuka_rsi_driver using GPIO
- ;
- ; =============================================
-
- ; Declaration of KRL variables
- DECL INT ret ; Return value for RSI commands
-
- ;FOLD INI
- ;FOLD BASISTECH INI
- BAS (#INITMOV,0 )
- ;ENDFOLD (BASISTECH INI)
- ;FOLD USER INI
- ;Make your modifications here
- ;ENDFOLD (USER INI)
- ;ENDFOLD (INI)
-
- ; Move to start position
- PTP $AXIS_ACT_MEAS
-
- ; Create RSI Context
- ret = RSI_LOAD("rsi_gpio_joint_pos")
- IF (ret <> RSIOK) THEN
- HALT
- ENDIF
-
- ; Set AxisCorr parameters to allow full range of motion
- ROS_SetAxisCorrLimits("rsi_gpio_joint_pos")
-
- ; Activate RSI Context
- ret = RSI_ACTIVATE("rsi_gpio_joint_pos")
- IF (ret <> RSIOK) THEN
- HALT
- ENDIF
-
- ; Start RSI execution
- ret = RSI_PROCESS_ON(#ABSOLUTE)
- IF (ret <> RSIOK) THEN
- HALT
- ENDIF
-
- ; Sensor guided movement
- RSI_MOVECORR()
-
- ; Turn off RSI
- ret = RSI_PROCESS_OFF()
- IF (ret <> RSIOK) THEN
- HALT
- ENDIF
-
- PTP $AXIS_ACT_MEAS
-
-END
diff --git a/kuka_external_control_sdk/krc_setup/iiqka_os2/Program/RSI/rsi_joint_pos.dat b/kuka_external_control_sdk/krc_setup/iiqka_os2/Program/RSI/rsi_joint_pos.dat
new file mode 100644
index 0000000..393fde4
--- /dev/null
+++ b/kuka_external_control_sdk/krc_setup/iiqka_os2/Program/RSI/rsi_joint_pos.dat
@@ -0,0 +1,5 @@
+&ACCESS R
+DEFDAT rsi_joint_pos PUBLIC
+ CONST CHAR CONTEXT_NAME[64]
+ CONTEXT_NAME[] = "rsi_joint_pos"
+ENDDAT
diff --git a/kuka_external_control_sdk/krc_setup/iiqka_os2/Program/RSI/rsi_joint_pos.src b/kuka_external_control_sdk/krc_setup/iiqka_os2/Program/RSI/rsi_joint_pos.src
index 383fa48..773b86d 100644
--- a/kuka_external_control_sdk/krc_setup/iiqka_os2/Program/RSI/rsi_joint_pos.src
+++ b/kuka_external_control_sdk/krc_setup/iiqka_os2/Program/RSI/rsi_joint_pos.src
@@ -42,16 +42,16 @@ DEF rsi_joint_pos()
PTP $AXIS_ACT_MEAS
; Create RSI Context
- ret = RSI_LOAD("rsi_joint_pos")
+ ret = RSI_LOAD(CONTEXT_NAME)
IF (ret <> RSIOK) THEN
HALT
ENDIF
; Set AxisCorr parameters to allow full range of motion
- ROS_SetAxisCorrLimits("rsi_joint_pos")
+ ROS_SetAxisCorrLimits(CONTEXT_NAME)
; Activate RSI Context
- ret = RSI_ACTIVATE("rsi_joint_pos")
+ ret = RSI_ACTIVATE(CONTEXT_NAME)
IF (ret <> RSIOK) THEN
HALT
ENDIF
diff --git a/kuka_external_control_sdk/krc_setup/iiqka_os2/RobotSensorInterface/Context/rsi_ext_axis_example.rsix b/kuka_external_control_sdk/krc_setup/iiqka_os2/RobotSensorInterface/Context/rsi_ext_axis_example.rsix
new file mode 100644
index 0000000..584c29e
--- /dev/null
+++ b/kuka_external_control_sdk/krc_setup/iiqka_os2/RobotSensorInterface/Context/rsi_ext_axis_example.rsix
@@ -0,0 +1,2629 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tooltip_COMMENT
+
+
+
+
+
+ Tooltip_FunctionBlockInput
+
+
+
+
+
+ Tooltip_FunctionBlockInOrder
+
+
+
+
+ Tooltip_FunctionBlockOutput
+
+
+
+
+
+ Tooltip_FunctionBlockOutOrder
+
+
+
+
+
+
+ Tooltip_ANIN
+
+
+
+
+
+ Tooltip_ANIN_Index
+
+
+
+
+ Tooltip_DIGIN
+
+
+
+
+
+
+ Remarks_DIGIN_Index
+ Tooltip_DIGIN_Index
+
+
+
+ Tooltip_DIGIN_DataType
+
+ Bit
+ Byte
+ UByte
+ Int16
+ UInt16
+ Int32
+ UInt32
+ Float
+
+
+
+
+
+ Tooltip_ANOUT
+
+
+
+
+
+ Tooltip_ANOUT_Index
+
+
+
+
+ Tooltip_DIGOUT
+
+
+
+
+
+
+ Remarks_DIGOUT_Index
+ Tooltip_DIGOUT_Index
+
+
+
+ Tooltip_DIGOUT_DataType
+
+ Bit
+ Byte
+ UByte
+ Int16
+ UInt16
+ Int32
+ UInt32
+ Float
+
+
+
+
+
+
+ Tooltip_ETHERNET
+ Summary_ETHERNET
+
+
+
+
+
+
+
+
+
+ Tooltip_ETHERNET_ConfigFile
+
+
+ Tooltip_ETHERNET_Timeout
+
+
+ Tooltip_ETHERNET_Flag
+
+
+
+ Remarks_ETHERNET_Precision
+ Tooltip_ETHERNET_Precision
+
+
+
+
+
+ Tooltip_INPUT
+
+
+
+
+
+ Tooltip_INPUT_Index
+
+
+ Tooltip_INPUT_DataType
+
+ Bit
+ Byte
+ UByte
+ Int16
+ UInt16
+ Int32
+ UInt32
+ Float
+
+
+
+
+
+ Tooltip_MAP2ANOUT
+
+
+ Tooltip_MAP2ANOUT_In1
+
+
+
+
+ Tooltip_MAP2ANOUT_Index
+
+
+
+
+ Tooltip_MAP2DIGOUT
+
+
+
+
+
+
+ Remarks_MAP2DIGOUT_Index
+ Tooltip_MAP2DIGOUT_Index
+
+
+
+ Tooltip_MAP2DIGOUT_DataType
+
+ Bit
+ Byte
+ Int16
+
+
+
+
+
+ Tooltip_MAP2SEN_PINT
+
+
+ Tooltip_MAP2SEN_PINT_In1
+
+
+
+
+
+ Remark_SenPint_SenPrea_Index
+ Tooltip_MAP2SEN_PINT_Index
+
+
+
+
+
+ Tooltip_MAP2SEN_PREA
+
+
+ Tooltip_MAP2SEN_PREA_In1
+
+
+
+
+
+ Remark_SenPint_SenPrea_Index
+ Tooltip_MAP2SEN_PREA_Index
+
+
+
+
+
+ Tooltip_MONITOR
+
+
+
+
+
+
+ Tooltip_OUTPUT
+
+
+ Tooltip_OUTPUT_Port
+
+
+
+
+ Tooltip_OUTPUT_Index
+
+
+ Tooltip_OUTPUT_DataType
+
+ Bit
+ Byte
+ UByte
+ Int16
+ UInt16
+ Int32
+ UInt32
+ Float
+
+
+
+
+
+ Tooltip_RESETDIGOUT
+
+
+
+
+
+ Tooltip_RESETDIGOUT_Index
+
+
+
+
+ Tooltip_SEN_PINT
+
+
+
+
+
+
+ Remark_SenPint_SenPrea_Index
+ Tooltip_SEN_PINT_Index
+
+
+
+
+
+ Tooltip_SEN_PREA
+
+
+
+
+
+
+ Remark_SenPint_SenPrea_Index
+ Tooltip_SEN_PREA_Index
+
+
+
+
+
+ Tooltip_SETDIGOUT
+
+
+
+
+
+ Tooltip_SETDIGOUT_Index
+
+
+
+
+
+ Remarks_Message
+ Summary_Message
+
+
+
+ Summary_Message_Set
+
+
+
+ Remarks_Message_Parameter
+ Summary_Message_Parameter1
+
+
+
+
+ Remarks_Message_Parameter
+ Summary_Message_Parameter2
+
+
+
+
+ Remarks_Message_Parameter
+ Summary_Message_Parameter3
+
+
+
+
+
+
+ Remarks_Message_Type
+ Summary_Message_Type
+
+
+ Info
+ State
+
+
+
+
+ Example_Message_Text
+ Remarks_Message_Text
+ Summary_Message_Text
+
+
+
+
+
+
+
+
+ Tooltip_AND
+ Summary_AND
+
+
+
+
+
+
+
+
+
+
+
+ Tooltip_BAND
+
+
+
+
+
+
+
+
+
+ Tooltip_BAND_DefVal
+
+
+
+
+ Tooltip_BCOMPL
+
+
+
+
+
+
+
+
+ Tooltip_BOR
+
+
+
+
+
+
+
+
+
+ Tooltip_BOR_DefVal
+
+
+
+
+ Tooltip_NOT
+
+
+
+
+
+
+
+
+ Tooltip_OR
+
+
+
+
+
+
+
+
+
+
+ Tooltip_SIGNALSWITCH
+
+
+ Tooltip_SIGNALSWITCH_Ctrl
+
+
+
+
+
+
+
+
+
+
+
+ Remarks_XOR
+ Tooltip_XOR
+
+
+
+
+
+
+
+
+
+
+
+
+ Remarks_RS
+ Tooltip_RS
+
+
+
+ Tooltip_RS_Set
+
+
+ Tooltip_RS_Reset
+
+
+
+
+
+
+
+
+ Remarks_SR
+ Tooltip_SR
+
+
+
+ Tooltip_SR_Set
+
+
+ Tooltip_SR_Reset
+
+
+
+
+
+
+
+ Tooltip_SIGNALSELECTOR
+
+
+ Tooltip_SIGNALSELECTOR_Ctrl
+
+
+
+
+
+
+
+
+
+ Tooltip_SIGNALSELECTOR_Default
+
+
+
+
+
+
+ Tooltip_ABS
+
+
+ Tooltip_ABS_In1
+
+
+
+
+
+
+
+ Tooltip_ACOS
+
+
+ Tooltip_ACOS_In1
+
+
+
+
+
+
+
+ Tooltip_ASIN
+
+
+ Tooltip_ASIN_In1
+
+
+
+
+
+
+
+ Tooltip_ATAN
+
+
+
+
+
+
+
+
+ Tooltip_ATAN2
+
+
+
+
+
+
+
+
+
+ Tooltip_CEIL
+
+
+
+
+
+
+
+
+ Tooltip_COS
+
+
+ Tooltip_COS_In1
+
+
+
+
+
+
+
+ Tooltip_Division
+
+
+ Tooltip_Division_Dividend
+
+
+ Tooltip_Division_Divisor
+
+
+
+
+
+
+
+ Tooltip_EQUAL
+
+
+
+
+
+
+
+
+
+ Tooltip_EQUAL_CompVal
+
+
+ Tooltip_EQUAL_Tolerance
+
+
+
+
+ Tooltip_EXP
+
+
+ Tooltip_EXP_In1
+
+
+
+
+
+
+
+ Tooltip_FLOOR
+
+
+
+
+
+
+
+
+ Tooltip_GREATER
+
+
+
+
+
+
+
+
+
+ Tooltip_GREATER_CompVal
+
+
+
+ Remarks_GREATER_Hysteresis
+ Tooltip_GREATER_Hysteresis
+
+
+
+
+
+ Tooltip_LESS
+
+
+
+
+
+
+
+
+
+ Tooltip_LESS_CompVal
+
+
+
+ Remarks_LESS_Hysteresis
+ Tooltip_LESS_Hysteresis
+
+
+
+
+
+ Tooltip_LIMIT
+
+
+
+
+
+
+
+
+ Tooltip_LIMIT_LowerLimit
+
+
+ Tooltip_LIMIT_UpperLimit
+
+
+
+
+ Tooltip_LOG
+
+
+
+
+
+
+
+
+ Tooltip_MINMAX
+
+
+
+
+
+
+
+
+
+
+
+ Tooltip_MULTI
+
+
+
+
+
+
+
+
+
+ Tooltip_NORM
+
+
+
+
+
+
+
+
+
+
+ Tooltip_POW
+
+
+ Tooltip_POW_In1
+
+
+
+
+
+
+
+ Tooltip_POW_Exp
+
+
+
+
+ Tooltip_ROUND
+
+
+
+
+
+
+
+
+ Tooltip_ROUND_nDig
+
+
+
+
+ Tooltip_SIN
+
+
+ Tooltip_SIN_In1
+
+
+
+
+
+
+
+ Tooltip_SUB
+
+
+ Tooltip_SUB_Minu
+
+
+ Tooltip_SUB_Sub1
+
+
+
+
+
+
+
+ Tooltip_SUB_Value
+
+
+
+
+ Tooltip_SUM
+
+
+
+
+
+
+
+
+
+ Tooltip_SUM_Value
+
+
+
+
+ Tooltip_TAN
+
+
+ Tooltip_TAN_In1
+
+
+
+
+
+
+
+
+ Remarks_TRAFO_ROBFRAME
+ Tooltip_TRAFO_ROBFRAME
+
+
+
+ Tooltip_TRAFO_ROBFRAME_In1
+
+
+ Tooltip_TRAFO_ROBFRAME_In2
+
+
+ Tooltip_TRAFO_ROBFRAME_In3
+
+
+
+
+
+
+
+
+
+ Tooltip_TRAFO_ROBFRAME_Type
+
+ RotTrans
+ OnlyRot
+ EulerAngles
+
+
+
+ Tooltip_TRAFO_ROBFRAME_Source
+
+ World
+ Base
+ RobRoot
+ Tool
+ TTS
+
+
+
+ Tooltip_TRAFO_ROBFRAME_Target
+
+ World
+ Base
+ RobRoot
+ Tool
+ TTS
+
+
+
+
+
+ Tooltip_TRAFO_USERFRAME
+
+
+
+
+
+
+
+
+
+
+
+
+ Tooltip_TRAFO_USERFRAME_Type
+
+ RotTrans
+ OnlyRot
+ EulerAngles
+
+
+
+ Tooltip_TRAFO_USERFRAME_FraX
+
+
+ Tooltip_TRAFO_USERFRAME_FraY
+
+
+ Tooltip_TRAFO_USERFRAME_FraZ
+
+
+ Tooltip_TRAFO_USERFRAME_FraA
+
+
+ Tooltip_TRAFO_USERFRAME_FraB
+
+
+ Tooltip_TRAFO_USERFRAME_FraC
+
+
+
+
+ Tooltip_SUMUP
+
+
+
+
+
+
+
+
+
+
+
+ Remarks_AXISCORR
+ Tooltip_AXISCORR
+
+
+
+ Tooltip_AXISCORR_CorrA1
+
+
+ Tooltip_AXISCORR_CorrA2
+
+
+ Tooltip_AXISCORR_CorrA3
+
+
+ Tooltip_AXISCORR_CorrA4
+
+
+ Tooltip_AXISCORR_CorrA5
+
+
+ Tooltip_AXISCORR_CorrA6
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tooltip_AXISCORR_LowerLimA1
+
+
+ Tooltip_AXISCORR_LowerLimA2
+
+
+ Tooltip_AXISCORR_LowerLimA3
+
+
+ Tooltip_AXISCORR_LowerLimA4
+
+
+ Tooltip_AXISCORR_LowerLimA5
+
+
+ Tooltip_AXISCORR_LowerLimA6
+
+
+ Tooltip_AXISCORR_UpperLimA1
+
+
+ Tooltip_AXISCORR_UpperLimA2
+
+
+ Tooltip_AXISCORR_UpperLimA3
+
+
+ Tooltip_AXISCORR_UpperLimA4
+
+
+ Tooltip_AXISCORR_UpperLimA5
+
+
+ Tooltip_AXISCORR_UpperLimA6
+
+
+
+
+
+ Remarks_AXISCORREXT
+ Tooltip_AXISCORREXT
+
+
+
+ Tooltip_AXISCORREXT_CorrE1
+
+
+ Tooltip_AXISCORREXT_CorrE2
+
+
+ Tooltip_AXISCORREXT_CorrE3
+
+
+ Tooltip_AXISCORREXT_CorrE4
+
+
+ Tooltip_AXISCORREXT_CorrE5
+
+
+ Tooltip_AXISCORREXT_CorrE6
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tooltip_AXISCORREXT_LowerLimE1
+
+
+ Tooltip_AXISCORREXT_LowerLimE2
+
+
+ Tooltip_AXISCORREXT_LowerLimE3
+
+
+ Tooltip_AXISCORREXT_LowerLimE4
+
+
+ Tooltip_AXISCORREXT_LowerLimE5
+
+
+ Tooltip_AXISCORREXT_LowerLimE6
+
+
+ Tooltip_AXISCORREXT_UpperLimE1
+
+
+ Tooltip_AXISCORREXT_UpperLimE2
+
+
+ Tooltip_AXISCORREXT_UpperLimE3
+
+
+ Tooltip_AXISCORREXT_UpperLimE4
+
+
+ Tooltip_AXISCORREXT_UpperLimE5
+
+
+ Tooltip_AXISCORREXT_UpperLimE6
+
+
+
+
+ Tooltip_AXISCORRMON
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tooltip_AXISCORRMON_MaxA1
+
+
+ Tooltip_AXISCORRMON_MaxA2
+
+
+ Tooltip_AXISCORRMON_MaxA3
+
+
+ Tooltip_AXISCORRMON_MaxA4
+
+
+ Tooltip_AXISCORRMON_MaxA5
+
+
+ Tooltip_AXISCORRMON_MaxA6
+
+
+ Tooltip_AXISCORRMON_MaxE1
+
+
+ Tooltip_AXISCORRMON_MaxE2
+
+
+ Tooltip_AXISCORRMON_MaxE3
+
+
+ Tooltip_AXISCORRMON_MaxE4
+
+
+ Tooltip_AXISCORRMON_MaxE5
+
+
+ Tooltip_AXISCORRMON_MaxE6
+
+
+
+
+ Tooltip_MAP2OV_PRO
+
+
+
+ Remarks_MAP2OV_PRO_In1
+ Tooltip_MAP2OV_PRO_In1
+
+
+
+
+
+
+ Remarks_POSCORR
+ Tooltip_POSCORR
+
+
+
+ Tooltip_POSCORR_CorrX
+
+
+ Tooltip_POSCORR_CorrY
+
+
+ Tooltip_POSCORR_CorrZ
+
+
+ Tooltip_POSCORR_CorrA
+
+
+ Tooltip_POSCORR_CorrB
+
+
+ Tooltip_POSCORR_CorrC
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tooltip_POSCORR_LowerLimX
+
+
+ Tooltip_POSCORR_LowerLimY
+
+
+ Tooltip_POSCORR_LowerLimZ
+
+
+ Tooltip_POSCORR_UpperLimX
+
+
+ Tooltip_POSCORR_UpperLimY
+
+
+ Tooltip_POSCORR_UpperLimZ
+
+
+ Tooltip_POSCORR_MaxRotAngle
+
+
+ Tooltip_POSCORR_LastCorrStat
+
+
+ Tooltip_POSCORR_LastCorrX
+
+
+ Tooltip_POSCORR_LastCorrY
+
+
+ Tooltip_POSCORR_LastCorrZ
+
+
+ Tooltip_POSCORR_LastCorrA
+
+
+ Tooltip_POSCORR_LastCorrB
+
+
+ Tooltip_POSCORR_LastCorrC
+
+
+ Tooltip_POSCORR_RefCorrSys
+
+ World
+ Base
+ RobRoot
+ Tool
+ TTS
+
+
+
+
+
+ Tooltip_POSCORRMON
+
+
+
+
+
+
+
+
+
+
+
+ Remark_ParamNoChangeDuringRuntime
+ Tooltip_POSCORRMON_MaxTrans
+
+
+
+
+ Remark_ParamNoChangeDuringRuntime
+ Tooltip_POSCORRMON_MaxRotAngle
+
+
+
+
+
+
+ Remarks_STOP
+ Tooltip_STOP
+
+
+
+
+
+
+ Tooltip_STOP_Mode
+
+ InfoMessage
+ PathNormal
+ Velocity
+ PathFast
+ ExitMoveCorr
+
+
+
+
+ Remarks_STOP_Channel
+ Tooltip_STOP_Channel
+
+
+
+
+
+
+ Remarks_STOPROBOT
+ Tooltip_STOPROBOT
+
+
+
+
+
+
+
+ Remarks_STOPROBOT_Mode
+ Tooltip_STOPROBOT_Mode
+
+
+ Brake
+ BrakeF
+ BrakeFF
+
+
+
+
+
+
+ Remarks_EXITMOVECORR
+ Tooltip_EXITMOVECORR
+
+
+
+
+
+
+
+
+ Tooltip_AXISACT
+
+
+
+
+
+
+
+
+
+
+
+ Remarks_AXISACT_Type
+ Tooltip_POSACT_AXISACT_Type
+
+
+
+ Measured
+ IPO
+ IPO_FLT
+ CF
+
+
+
+
+
+ Tooltip_AXISACTEXT
+
+
+
+
+
+
+
+
+
+
+
+ Remarks_AXISACT_Type
+ Tooltip_POSACT_AXISACT_Type
+
+
+
+ Measured
+ IPO
+ IPO_FLT
+ CF
+
+
+
+
+
+ Tooltip_GEARTORQUE
+
+
+
+
+
+
+
+
+
+
+ Tooltip_GEARTORQUE_TorqueSource
+
+ Measured
+ Setpoint
+
+
+
+ Tooltip_GEARTORQUE_LocationOnJoint
+
+ Gear
+ Drive
+
+
+
+
+
+ Tooltip_GEARTORQUEEXT
+
+
+
+
+
+
+
+
+
+
+ Tooltip_GEARTORQUE_TorqueSource
+
+ Measured
+ Setpoint
+
+
+
+ Tooltip_GEARTORQUE_LocationOnJoint
+
+ Gear
+ Drive
+
+
+
+
+
+ Tooltip_MOTORCURRENT
+
+
+
+
+
+
+
+
+
+
+ Tooltip_MOTORCURRENTEXT
+
+
+
+
+
+
+
+
+
+
+ Tooltip_OV_PRO
+
+
+
+
+
+ Tooltip_POSACT
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Remarks_POSACT_Type
+ Tooltip_POSACT_AXISACT_Type
+
+
+
+ Measured
+ IPO
+ IPO_FLT
+ CF
+
+
+
+
+
+ Tooltip_STATUS
+
+
+
+
+
+
+ Remarks_STATUS_Type
+ Tooltip_STATUS_Type
+
+
+ IPO_State
+ ProState_S
+ ProState_R
+ Pro_Mode_S
+ Pro_Mode_R
+ Mode_Op
+ IPO_Mode
+ IPO_Mode_C
+ Sensor
+
+
+
+
+
+
+
+ Tooltip_D
+
+
+
+
+
+
+
+
+ Tooltip_D_KD
+
+
+
+
+ Tooltip_DELAY
+
+
+
+
+
+
+
+
+ Tooltip_DELAY_DelayTime
+
+
+
+
+ Tooltip_GENCTRL
+
+
+
+
+
+
+
+
+ Tooltip_GENCTRL_Reset
+
+
+ Tooltip_GENCTRL_B0
+
+
+ Tooltip_GENCTRL_A1
+
+
+ Tooltip_GENCTRL_B1
+
+
+ Tooltip_GENCTRL_A2
+
+
+ Tooltip_GENCTRL_B2
+
+
+ Tooltip_GENCTRL_A3
+
+
+ Tooltip_GENCTRL_B3
+
+
+ Tooltip_GENCTRL_A4
+
+
+ Tooltip_GENCTRL_B4
+
+
+ Tooltip_GENCTRL_A5
+
+
+ Tooltip_GENCTRL_B5
+
+
+ Tooltip_GENCTRL_A6
+
+
+ Tooltip_GENCTRL_B6
+
+
+ Tooltip_GENCTRL_A7
+
+
+ Tooltip_GENCTRL_B7
+
+
+ Tooltip_GENCTRL_A8
+
+
+ Tooltip_GENCTRL_B8
+
+
+
+
+ Tooltip_I
+
+
+ Tooltip_I_In1
+
+
+
+
+
+
+
+ Tooltip_I_Reset
+
+
+ Tooltip_I_TI
+
+
+ Tooltip_I_Type
+
+ Always
+ OnCorrActive
+
+
+
+ Tooltip_I_LowerLimit
+
+
+ Tooltip_I_UpperLimit
+
+
+
+
+ Tooltip_IIRFILTER
+
+
+ Tooltip_IIRFILTER_In1
+
+
+
+
+
+
+
+ Tooltip_IIRFILTER_Reset
+
+
+ Tooltip_IIRFILTER_Type
+
+ Lowpass
+ Highpass
+
+
+
+ Tooltip_IIRFILTER_Name
+
+ Bessel
+ Butterworth
+ Tschebyscheff_0_5db
+ Tschebyscheff_1db
+ Tschebyscheff_2db
+ Tschebyscheff_3db
+
+
+
+ Tooltip_IIRFILTER_Order
+
+ O2
+ O4
+ O6
+ O8
+ O10
+
+
+
+
+ Remarks_IIRFILTER_Cutoff
+ Tooltip_IIRFILTER_Cuttoff
+
+
+
+
+
+ Tooltip_P
+
+
+
+
+
+
+
+
+ Tooltip_P_KR
+
+
+
+
+ Tooltip_PD
+
+
+
+
+
+
+
+
+ Tooltip_PD_KR
+
+
+ Tooltip_PD_TV
+
+
+
+
+ Tooltip_PID
+
+
+
+
+
+
+
+
+ Tooltip_PID_Reset
+
+
+ Tooltip_PID_KR
+
+
+
+ Remarks_PID_TN
+ Tooltip_PID_TN
+
+
+
+ Tooltip_PID_TV
+
+
+
+ Remarks_PID_LimLow
+ Tooltip_PID_LimLow
+
+
+
+
+ Remarks_PID_LimUpp
+ Tooltip_PID_LimUpp
+
+
+
+
+
+ Tooltip_PT1
+
+
+
+
+
+
+
+
+ Tooltip_PT1_KR
+
+
+ Tooltip_PT1_T1
+
+
+
+
+ Tooltip_PT2
+
+
+
+
+
+
+
+
+ Tooltip_PT2_KR
+
+
+ Tooltip_PT2_T1
+
+
+ Tooltip_PT2_T2
+
+
+
+
+
+ Remarks_SOURCE
+ Tooltip_SOURCE_2
+ Tooltip_SOURCE
+
+
+
+
+
+
+
+
+ Remarks_SOURCE_Type
+ Tooltip_SOURCE_Type
+
+
+ Const
+ Sin
+ Cos
+ Square
+ Sawtooth
+
+
+
+ Tooltip_SOURCE_Offset
+
+
+
+ Remarks_SOURCE_Amplitude
+ Tooltip_SOURCE_Amplitude
+
+
+
+
+ Remarks_SOURCE_Period
+ Tooltip_SOURCE_Period
+
+
+
+
+
+ Tooltip_TIMER
+
+
+ Tooltip_TIMER_Ctrl
+
+
+ Tooltip_TIMER_InReset
+
+
+
+
+
+
+
+ Tooltip_TIMER_Reset
+
+
+ Tooltip_TIMER_Time
+
+
+
+
+ Tooltip_Constant
+
+
+
+
+
+ Tooltip_Constant_Value
+
+
+
+
+
+ Remarks_SINE
+ Summary_SINE
+
+
+
+
+
+ Remarks_PeriodicSignalBase_Active
+ Summary_PeriodicSignalBase_Active
+
+
+
+
+ Remarks_PeriodicSignalBase_Reset
+ Summary_PeriodicSignalBase_Reset
+
+
+
+
+ Remarks_PeriodicSignalBase_InAmp
+ Summary_PeriodicSignalBase_Amp
+
+
+
+
+ Remarks_PeriodicSignalBase_InFreq
+ Summary_PeriodicSignalBase_Freq
+
+
+
+
+
+
+
+
+ Summary_PeriodicSignalBase_Amp
+
+
+
+ Remarks_PeriodicSignalBase_ParamFreq
+ Summary_PeriodicSignalBase_Freq
+
+
+
+
+ Remarks_PeriodicSignalBase_Phase
+ Summary_PeriodicSignalBase_Phase
+
+
+
+ Summary_PeriodicSignalBase_Offset
+
+
+
+
+
+ Remarks_COSINE
+ Summary_COSINE
+
+
+
+
+
+ Remarks_PeriodicSignalBase_Active
+ Summary_PeriodicSignalBase_Active
+
+
+
+
+ Remarks_PeriodicSignalBase_Reset
+ Summary_PeriodicSignalBase_Reset
+
+
+
+
+ Remarks_PeriodicSignalBase_InAmp
+ Summary_PeriodicSignalBase_Amp
+
+
+
+
+ Remarks_PeriodicSignalBase_InFreq
+ Summary_PeriodicSignalBase_Freq
+
+
+
+
+
+
+
+
+ Summary_PeriodicSignalBase_Amp
+
+
+
+ Remarks_PeriodicSignalBase_ParamFreq
+ Summary_PeriodicSignalBase_Freq
+
+
+
+
+ Remarks_PeriodicSignalBase_Phase
+ Summary_PeriodicSignalBase_Phase
+
+
+
+ Summary_PeriodicSignalBase_Offset
+
+
+
+
+
+ Remarks_SAWTOOTH
+ Summary_SAWTOOTH
+
+
+
+
+
+ Remarks_PeriodicSignalBase_Active
+ Summary_PeriodicSignalBase_Active
+
+
+
+
+ Remarks_PeriodicSignalBase_Reset
+ Summary_PeriodicSignalBase_Reset
+
+
+
+
+ Remarks_PeriodicSignalBase_InAmp
+ Summary_PeriodicSignalBase_Amp
+
+
+
+
+ Remarks_PeriodicSignalBase_InFreq
+ Summary_PeriodicSignalBase_Freq
+
+
+
+
+
+
+
+
+ Summary_PeriodicSignalBase_Amp
+
+
+
+ Remarks_PeriodicSignalBase_ParamFreq
+ Summary_PeriodicSignalBase_Freq
+
+
+
+
+ Remarks_PeriodicSignalBase_Phase
+ Summary_PeriodicSignalBase_Phase
+
+
+
+ Summary_PeriodicSignalBase_Offset
+
+
+
+
+
+ Remarks_TRIANGLE
+ Summary_TRIANGLE
+
+
+
+
+
+ Remarks_PeriodicSignalBase_Active
+ Summary_PeriodicSignalBase_Active
+
+
+
+
+ Remarks_PeriodicSignalBase_Reset
+ Summary_PeriodicSignalBase_Reset
+
+
+
+
+ Remarks_PeriodicSignalBase_InAmp
+ Summary_PeriodicSignalBase_Amp
+
+
+
+
+ Remarks_PeriodicSignalBase_InFreq
+ Summary_PeriodicSignalBase_Freq
+
+
+
+
+
+
+
+
+ Summary_PeriodicSignalBase_Amp
+
+
+
+ Remarks_PeriodicSignalBase_ParamFreq
+ Summary_PeriodicSignalBase_Freq
+
+
+
+
+ Remarks_PeriodicSignalBase_Phase
+ Summary_PeriodicSignalBase_Phase
+
+
+
+ Summary_PeriodicSignalBase_Offset
+
+
+
+
+
+ Remarks_RECTANGLE
+ Summary_RECTANGLE
+
+
+
+
+
+ Remarks_PeriodicSignalBase_Active
+ Summary_PeriodicSignalBase_Active
+
+
+
+
+ Remarks_PeriodicSignalBase_Reset
+ Summary_PeriodicSignalBase_Reset
+
+
+
+
+ Remarks_PeriodicSignalBase_InAmp
+ Summary_PeriodicSignalBase_Amp
+
+
+
+
+ Remarks_PeriodicSignalBase_InFreq
+ Summary_PeriodicSignalBase_Freq
+
+
+
+
+
+
+
+
+ Summary_PeriodicSignalBase_Amp
+
+
+
+ Remarks_PeriodicSignalBase_ParamFreq
+ Summary_PeriodicSignalBase_Freq
+
+
+
+
+ Remarks_PeriodicSignalBase_Phase
+ Summary_PeriodicSignalBase_Phase
+
+
+
+ Summary_PeriodicSignalBase_Offset
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/kuka_external_control_sdk/krc_setup/iiqka_os2/RobotSensorInterface/Context/rsi_joint_pos.rsix b/kuka_external_control_sdk/krc_setup/iiqka_os2/RobotSensorInterface/Context/rsi_joint_pos.rsix
index 0a9ac54..efe38e6 100644
--- a/kuka_external_control_sdk/krc_setup/iiqka_os2/RobotSensorInterface/Context/rsi_joint_pos.rsix
+++ b/kuka_external_control_sdk/krc_setup/iiqka_os2/RobotSensorInterface/Context/rsi_joint_pos.rsix
@@ -1,10 +1,18 @@
-
+
+
+
+
+
+
+
+
+
@@ -61,6 +69,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -2479,6 +2508,14 @@
+
+
+
+
+
+
+
+
@@ -2486,19 +2523,19 @@
-
+
-
+
-
-
-
-
-
-
+
+
+
+
+
+
@@ -2515,7 +2552,7 @@
-
+
@@ -2525,5 +2562,7 @@
+
+
\ No newline at end of file
diff --git a/kuka_external_control_sdk/krc_setup/iiqka_os2/RobotSensorInterface/Ethernet configuration/rsi_ethernet.xml b/kuka_external_control_sdk/krc_setup/iiqka_os2/RobotSensorInterface/Ethernet configuration/rsi_ethernet.xml
old mode 100755
new mode 100644
index 1419696..cb57451
--- a/kuka_external_control_sdk/krc_setup/iiqka_os2/RobotSensorInterface/Ethernet configuration/rsi_ethernet.xml
+++ b/kuka_external_control_sdk/krc_setup/iiqka_os2/RobotSensorInterface/Ethernet configuration/rsi_ethernet.xml
@@ -10,7 +10,13 @@
-
+
+
+
+
+
+
+
@@ -21,6 +27,12 @@
+
+
+
+
+
+
diff --git a/kuka_external_control_sdk/kss/include/kuka/external-control-sdk/kss/message_builder.h b/kuka_external_control_sdk/kss/include/kuka/external-control-sdk/kss/message_builder.h
old mode 100755
new mode 100644
index 905e772..c9b0d3f
--- a/kuka_external_control_sdk/kss/include/kuka/external-control-sdk/kss/message_builder.h
+++ b/kuka_external_control_sdk/kss/include/kuka/external-control-sdk/kss/message_builder.h
@@ -63,6 +63,7 @@ class MotionState : public BaseMotionState {
const std::string kAttributeSuffix = "\"/>";
const std::string kJointPositionsPrefix = "";
+
const std::string kJointPositionsPrefix = " joint_position_attribute_prefixes_;
const std::string kDoubleAttributeFormat =
@@ -123,6 +134,8 @@ class ControlSignal : public BaseControlSignal {
const std::string kAttributeSuffix = "/>";
const std::string kStopNodePrefix = "";
const std::string kStopNodeSuffix = "";
+ const std::string kExtJointPositionsPrefix = " ext_joint_position_attribute_prefixes_;
const std::string kGpioPrefix = "= len) {
@@ -82,6 +88,31 @@ void MotionState::CreateFromXML(const char *incoming_xml) {
next_value_idx += endptr - &incoming_xml[next_value_idx];
next_value_idx += kAttributeSuffix.length();
+
+ // External axes
+ // this -1 is to account for that there is no " before the fist attribute
+ next_value_idx += kExtJointPositionsPrefix.length() - 1;
+
+ for (int i = 0; i < kFixSixAxes; ++i) {
+ std::size_t dbl_length = 0;
+ next_value_idx += 6; // length of prefix + 1, e.g. " E1=\""
+
+ if (next_value_idx < len) {
+ if(i < (dof_-num_of_non_ext_axes_)) {
+ measured_positions_[i] =
+ std::stod(&incoming_xml[next_value_idx], &dbl_length);
+ } else {
+ std::stod(&incoming_xml[next_value_idx], &dbl_length);
+ }
+ } else {
+ throw std::invalid_argument(
+ "Received XML is not valid for the given degree of freedom");
+ }
+ next_value_idx += dbl_length; // length of the parsed double
+ }
+ next_value_idx += kAttributeSuffix.length();
+
+ // GPIO
if (!gpioAttributePrefix.empty()) {
next_value_idx += kGpioPrefix.length() - 1;
}
@@ -130,14 +161,21 @@ ControlSignal::CreateXMLString(int last_ipoc, bool stop_control) {
std::memset(xml_string_, 0, sizeof(xml_string_));
AppendToXMLString(kMessagePrefix);
+ // Non-external axes
AppendToXMLString(kJointPositionsPrefix);
- for (int i = 0; i < dof_; ++i) {
+ for (int i = 0; i < kFixSixAxes; ++i) {
char double_buffer[kPrecision + 3 + 1 + 1 +
1]; // Precision + Digits + Comma + Null + Minus sign
AppendToXMLString(joint_position_attribute_prefixes_[i]);
+ // Index of Ax in all joint position values,
+ // WARNING - this whole parsing only works if all configured external axes
+ // are before the non-external axes in the link chain
+ short a_index = (dof_ - num_of_non_ext_axes_) + i;
+ // Only update values for configured axes
+ double a_value = (i < num_of_non_ext_axes_) ? (joint_position_values_[a_index] - initial_positions_[a_index]) : 0.0;
int ret = std::snprintf(
double_buffer, sizeof(double_buffer), kDoubleAttributeFormat.data(),
- (joint_position_values_[i] - initial_positions_[i]) * (180 / M_PI));
+ a_value * (180 / M_PI));
if (ret <= 0) {
return std::nullopt;
}
@@ -145,11 +183,35 @@ ControlSignal::CreateXMLString(int last_ipoc, bool stop_control) {
AppendToXMLString(double_buffer);
AppendToXMLString("\"");
}
-
AppendToXMLString(kAttributeSuffix);
+
+ // Stop
AppendToXMLString(kStopNodePrefix);
AppendToXMLString(stop_control ? "1" : "0");
AppendToXMLString(kStopNodeSuffix);
+
+ // External axes
+ AppendToXMLString(kExtJointPositionsPrefix);
+ for (int i = 0; i < kFixSixAxes; ++i) {
+ char double_buffer[kPrecision + 3 + 1 + 1 +
+ 1]; // Precision + Digits + Comma + Null + Minus sign
+ AppendToXMLString(ext_joint_position_attribute_prefixes_[i]);
+ // Only update values for configured axes
+ double e_value = i < (dof_ - num_of_non_ext_axes_) ? (joint_position_values_[i] - initial_positions_[i]) : 0.0;
+
+ int ret = std::snprintf(
+ double_buffer, sizeof(double_buffer), kDoubleAttributeFormat.data(),
+ e_value);
+ if (ret <= 0) {
+ return std::nullopt;
+ }
+
+ AppendToXMLString(double_buffer);
+ AppendToXMLString("\"");
+ }
+ AppendToXMLString(kAttributeSuffix);
+
+ // GPIO
if (!gpioAttributePrefix.empty()) {
AppendToXMLString(kGpioPrefix);
}