Adeeb Robotics

Motion Controller API

REST API reference for the Adeeb Robotics Controller — axis control, group motion, conveyor tracking, container operations, and configuration.

Getting Started

Software Release Version: 0.0.6

To launch the Adeeb Robotics Controller, open a terminal and execute:

adeeb_robotics_controller <path_to_config_file>

The config_files folder contains example configuration files. For example:

adeeb_robotics_controller config_file/delta_config.yml

Next, open a separate terminal and run the desired Python motion script:

python3 <path_to_python_script>

Example motion scripts are available in the python_scripts folder. For instance:

python3 pack_expo_demo.py

Script and Configuration Pairing

  • pack_expo_demo.py and autorun.py should be used with delta_config.yml or demo_stand_config.yml
  • serial_dh_example.py is intended to be used with kuka_7_axis_config.yml

Configuration files define system settings including the robot type and workspace layout (conveyor and container positions for pick-and-place operations). The Python scripts handle motion control and I/O operations.

System Information

API RouteMethodDescriptionPayload
/get_sw_release_versionGETReturns the current software release versionString

Configuration

API RouteMethodDescriptionPayload
/set_configPOSTSets the configuration object in JSON formatConfig
/get_configGETReturns the current configuration in JSON formatN/A

Network and Initialization

Network Control

API RouteMethodDescriptionPayload
/init_networkPOSTInitiates network initialization requestN/A
/init_networkGETChecks network initialization responseCmdRspRslt

Axis Initialization

API RouteMethodDescriptionPayload
/init_axesPOSTInitiates axes initialization requestN/A
/init_axesGETChecks axes initialization responseCmdRspRslt

Operation Mode Control

API RouteMethodDescriptionPayload
/req_preopPOSTInitiates pre-operational mode requestN/A
/req_preopGETChecks pre-operational mode responseCmdRspRslt
/req_opPOSTInitiates operational mode requestN/A
/req_opGETChecks operational mode responseCmdRspRslt

Slave Management

API RouteMethodDescriptionPayload
/get_number_of_slavesPOSTInitiates slave count requestN/A
/get_number_of_slavesGETChecks slave count responseNumSlvsEcatData

Motion Control

All endpoints that have POST/GET pairs follow an asynchronous pattern where the operation is initiated with the POST endpoint and its completion can be checked with the GET endpoint.

Axis Control

API RouteMethodDescriptionPayload
/axis_servo_onPOSTInitiates servo on requestAxisData
/axis_servo_onGETChecks servo on responseAxisData
/axis_servo_offPOSTInitiates servo off requestAxisData
/axis_servo_offGETChecks servo off responseAxisData
/axis_move_posPOSTInitiates absolute position movement requestAxisMovePosData
/axis_move_posGETChecks absolute position movement responseAxisMovePosData
/axis_move_velPOSTInitiates velocity movement requestAxisMoveVelData
/axis_move_velGETChecks velocity movement responseAxisMoveVelData
/axis_move_relPOSTInitiates relative position movement requestAxisMoveRelData
/axis_move_relGETChecks relative position movement responseAxisMoveRelData
/axis_move_homePOSTInitiates axis home movement requestAxisData
/axis_move_homeGETChecks axis home movement responseAxisData
/axis_get_curr_posPOSTInitiates getting current position requestAxisCurrPosData
/axis_get_curr_posGETChecks getting current position responseAxisCurrPosData
/axis_write_dig_outPOSTAppend a digital write command to the axis motion queueAxisDigData
/axis_write_dig_outGETChecks if a digital write command was appendedAxisDigData
/axis_read_dig_inPOSTInitiates an immediate (not queued) digital read requestAxisDigData
/axis_read_dig_inGETChecks digital read responseAxisDigData
/axis_motion_donePOSTInitiates axis motion done requestAxisBoolData
/axis_motion_doneGETChecks axis motion done responseAxisBoolData
/axis_quick_stopPOSTInitiates axis quick stop requestAxisData
/axis_quick_stopGETChecks axis quick stop responseAxisData
/axis_clear_alarmsPOSTInitiates axis clear alarms requestAxisData
/axis_clear_alarmsGETChecks axis clear alarms responseAxisData
/axis_get_alarmsPOSTInitiates getting axis alarms requestAxisAlarmsData
/axis_get_alarmsGETChecks getting axis alarms responseAxisAlarmsData
/axis_zeroPOSTInitiates axis zero requestAxisData
/axis_zeroGETChecks axis zero responseAxisData
/axis_sleepPOSTInitiates axis sleep requestAxisSleepData
/axis_sleepGETChecks axis sleep responseAxisSleepData
/axis_set_spd_prcnPOSTInitiates setting axis speed requestAxisSpdPrcnData
/axis_set_spd_prcnGETGet setting axis speed responseAxisSpdPrcnData
/axis_get_spd_prcnPOSTInitiates getting axis speed requestAxisSpdPrcnData
/axis_get_spd_prcnGETChecks getting axis speed responseAxisSpdPrcnData

Group Control

API RouteMethodDescriptionPayload
/group_servo_onPOSTInitiates group servo on requestGroupData
/group_servo_onGETChecks group servo on responseGroupData
/group_servo_offPOSTInitiates group servo off requestGroupData
/group_servo_offGETChecks group servo off responseGroupData
/group_move_posPOSTInitiates group absolute position movement requestGroupMovePosData
/group_move_posGETChecks group absolute position movement responseGroupMovePosData
/group_move_relPOSTInitiates group relative position movement requestGroupMoveRelData
/group_move_relGETChecks group relative position movement responseGroupMoveRelData
/group_move_homePOSTInitiates group home movement requestGroupData
/group_move_homeGETChecks group home movement responseGroupData
/group_end_eff_engagePOSTInitiates group end effector engagement requestGroupData
/group_end_eff_engageGETChecks group end effector engagement responseGroupData
/group_end_eff_ejectPOSTInitiates group end effector eject requestGroupData
/group_end_eff_ejectGETChecks group end effector eject responseGroupData
/group_end_eff_clearPOSTInitiates group end effector clear requestGroupData
/group_end_eff_clearGETChecks group end effector clear responseGroupData
/group_get_bgn_posPOSTInitiates next motion queue begin position requestGroupBgnPosData
/group_get_bgn_posGETChecks next motion queue begin position responseGroupBgnPosData
/group_get_curr_posPOSTInitiates getting group current position requestGroupCurrPosData
/group_get_curr_posGETChecks getting group current position responseGroupCurrPosData
/group_write_dig_outPOSTAppend a digital write command to the group motion queueGroupDigData
/group_write_dig_outGETChecks if a digital write command was appendedGroupDigData
/group_motion_donePOSTInitiates group motion completion requestGroupBoolData
/group_motion_doneGETChecks group motion completion responseGroupBoolData
/group_quick_stopPOSTInitiates group quick stop requestGroupData
/group_quick_stopGETChecks group quick stop responseGroupData
/group_clear_alarmsPOSTInitiates group clear alarms requestGroupData
/group_clear_alarmsGETChecks group clear alarms responseGroupData
/group_get_alarmsPOSTInitiates group get alarms requestGroupAlarmsData
/group_get_alarmsGETChecks group get alarms responseGroupAlarmsData
/group_zeroPOSTInitiates group zero requestGroupData
/group_zeroGETChecks group zero responseGroupData
/group_sleepPOSTInitiates group sleep requestGroupSleepData
/group_sleepGETChecks group sleep responseGroupSleepData
/group_set_spd_prcnPOSTInitiates setting group move profile velocity, acceleration, and jerk as % of maxGroupSpdPrcnData
/group_set_spd_prcnGETChecks setting group move profile responseGroupSpdPrcnData
/group_get_spd_prcnPOSTInitiates getting group move profile velocity, acceleration, and jerk as % of maxGroupSpdPrcnData
/group_get_spd_prcnGETChecks getting group move profile responseGroupSpdPrcnData
/clear_alarmsPOSTInitiates clear all alarms requestMotnCmdData
/clear_alarmsGETChecks clear all alarms responseMotnCmdData
/emergency_stopPOSTInitiates emergency stop requestMotnCmdData
/emergency_stopGETChecks emergency stop responseMotnCmdData

Conveyor Operations

API RouteMethodDescriptionPayload
/conv_set_spdPOSTInitiates setting conveyor speed requestConvSpdData
/conv_set_spdGETChecks setting conveyor speed responseConvSpdData
/group_conv_intercept_pickupPOSTInitiates conveyor intercept for pick-up requestGroupConvPickupData
/group_conv_intercept_pickupGETChecks conveyor intercept for pick-up responseGroupConvPickupData
/group_conv_intercept_dropoffPOSTInitiates conveyor intercept for drop-off requestGroupConvDropoffData
/group_conv_intercept_dropoffGETChecks conveyor intercept for drop-off responseGroupConvDropoffData
/group_conv_descendPOSTInitiates conveyor descend requestGroupConvData
/group_conv_descendGETChecks conveyor descend responseGroupConvData
/group_conv_track_pickupPOSTInitiates tracking conveyor pick-up requestGroupConvData
/group_conv_track_pickupGETChecks tracking conveyor pick-up responseGroupConvData
/group_conv_track_dropoffPOSTInitiates tracking conveyor drop-off requestGroupConvData
/group_conv_track_dropoffGETChecks tracking conveyor drop-off responseGroupConvData
/group_conv_ascendPOSTInitiates conveyor ascend requestGroupConvData
/group_conv_ascendGETChecks conveyor ascend responseGroupConvData
/group_conv_pickupPOSTInitiates group conveyor pickup requestGroupConvPickupData
/group_conv_pickupGETChecks group conveyor pickup responseGroupConvPickupData
/group_conv_dropoffPOSTInitiates group conveyor drop-off requestGroupConvDropoffData
/group_conv_dropoffGETChecks group conveyor drop-off responseGroupConvDropoffData

Container Operations

API RouteMethodDescriptionPayload
/group_cont_intercept_dropoffPOSTInitiates container intercept at drop-off requestGroupContDropoffData
/group_cont_intercept_dropoffGETChecks container intercept at drop-off responseGroupContDropoffData
/group_cont_intercept_pickupPOSTInitiates container intercept at pick-up requestGroupContPickupData
/group_cont_intercept_pickupGETChecks container intercept at pick-up responseGroupContPickupData
/group_cont_intercept_pickup_idxPOSTInitiates queuing a group move to position above indexed part in containerGroupContPickupIdxData
/group_cont_intercept_pickup_idxGETChecks response of queuing group move above indexed partGroupContPickupIdxData
/group_cont_descendPOSTInitiates container descend requestGroupContData
/group_cont_descendGETChecks container descend responseGroupContData
/group_cont_track_dropoffPOSTInitiates tracking container drop-off requestGroupContData
/group_cont_track_dropoffGETChecks tracking container drop-off responseGroupContData
/group_cont_track_pickupPOSTInitiates tracking container pick-up requestGroupContData
/group_cont_track_pickupGETChecks tracking container pick-up responseGroupContData
/group_cont_ascendPOSTInitiates container ascend requestGroupContData
/group_cont_ascendGETChecks container ascend responseGroupContData
/group_cont_dropoffPOSTInitiates container drop-off requestGroupContDropoffData
/group_cont_dropoffGETChecks container drop-off responseGroupContDropoffData
/group_cont_pickupPOSTInitiates container pick-up requestGroupContPickupData
/group_cont_pickupGETChecks container pick-up responseGroupContPickupData
/group_cont_pickup_idxPOSTInitiates container part pick-up using auto part indexingGroupContPickupIdxData
/group_cont_pickup_idxGETChecks container part pick-up using auto indexing responseGroupContPickupIdxData
/cont_set_emptyPOSTInitiates setting internal container part count to zeroContData
/cont_set_emptyGETChecks setting container part count to zero responseContData
/cont_set_fullPOSTInitiates setting internal container part count to fullContPartData
/cont_set_fullGETChecks setting container part count to full responseContPartData
/cont_not_emptyPOSTInitiates checking container is not emptyContBoolData
/cont_not_emptyGETChecks container is not empty responseContBoolData
/cont_not_fullPOSTInitiates checking container is not fullContPartBoolData
/cont_not_fullGETChecks container is not full responseContPartBoolData

Low-Level Control

CoE (CANopen over EtherCAT) Operations

API RouteMethodDescriptionPayload
/coe_wr_u8POST/GETU8 write operationCoeU8Data
/coe_wr_u16POST/GETU16 write operationCoeU16Data
/coe_wr_u32POST/GETU32 write operationCoeU32Data
/coe_rd_u8POST/GETU8 read operationCoeU8Data
/coe_rd_u16POST/GETU16 read operationCoeU16Data
/coe_rd_u32POST/GETU32 read operationCoeU32Data

CiA 402 Operations

API RouteMethodDescriptionPayload
/set_cia402_op_modePOSTInitiates CiA 402 operation mode setting requestCia402OpModeData
/set_cia402_op_modeGETChecks CiA 402 operation mode setting responseCia402OpModeData

Configuration File Reference

Ethernet

FieldTypeDescription
interface_nameStringEthernet interface name
prioritize_usr_space_eth_drvBooleanIf true, prioritize obtaining slave configuration from ESI file; otherwise use slave EEPROM SSI data

EtherCAT

FieldTypeDescriptionUnit
esi_file_pathStringESI file pathN/A
prioritize_esi_configBooleanPrioritize ESI file over slave EEPROM SSI dataN/A
cycle_timeu32EtherCAT cycle time, only multiples of 250μs supportedμs
shift_timeu32DC master frame send to sync0 offset% of cycle_time
rx_frame_timeoutu32Receive frame timeout (Linux and macOS only)μs

Axes (Single Axis)

FieldTypeDescriptionUnit
enco_offsti32Encoder offsetEncoder ticks
gear_ratiof64Gear ratioN/A
slv_idxuintSlave index (zero-indexed position in network)N/A
min_posf64Minimum angular position of rotational motorDegrees
max_posf64Maximum angular position of rotational motorDegrees

Groups

FieldTypeDescriptionUnit
axs_idx_vecuint vector (4)Axes indicesN/A
posf64 vector (6)Robot frame position relative to world framemm, mm, mm, deg, deg, deg
world_limits_typeWorldLimitTypeWorld limit enumN/A
group_typeGroupTypeGroup type enumN/A
end_effEndEffConfigEnd effector digital output configurationN/A

World Limit: CylindricalZConfig

FieldTypeUnit
z_minf64mm
z_maxf64mm
r_xy_maxf64mm

Group Type: DeltaConfig

FieldTypeUnit
base_radiusf64mm
base_offsetf64mm
upper_arm_lengthf64mm
lower_arm_lengthf64mm
platform_offsetf64mm
platform_radiusf64mm
motor_anglesf64 vector (3)degrees
upper_arm_massf64kg
lower_arm_massf64kg
lower_plate_massf64kg
upper_arm_cm_radiusf64mm
upper_arm_cm_inertiaf64kg·mm²

Group Type: SerialDHConfig

FieldTypeUnit
thetavector (7)degrees
avector (7)degrees
dvector (7)degrees
alphavector (7)degrees
joint_typevector (7)N/A

Cameras

FieldTypeDescriptionUnit
idStringCamera ID numberN/A
exposure_timef64Camera exposure timeμs
pixel_sizef64Camera pixel sizeμm
focal_lengthf64Lens focal lengthmm
posf64 vector (6)Camera frame position relative to world framemm, mm, mm, deg, deg, deg

Conveyors

FieldTypeDescriptionUnit
widthf64Conveyor widthmm
lengthf64Conveyor lengthmm
cam_idx_vecuint vectorCameras used for tracking objects on this conveyorN/A
posf64 vector (6)Conveyor frame position relative to world framemm, mm, mm, deg, deg, deg
descend_distf64Descend/ascend distance in Z direction during pickupmm
end_eff_delayf64End effector delay to fully engages

Parts

FieldTypeDescriptionUnit
widthf64Width of the partmm
lengthf64Length of the partmm
heightf64Height of the partmm
massf64Mass of the partkg
inertia_zzf64Inertia about center of mass in Z directionkg·mm²
labelString"", "alphabetic", "alphanumeric", or "text" — used to detect if 180° rotation is neededN/A
max_linear_errorf64Percentage of acceptable error in width or length when identifying partsN/A

Cycles

FieldTypeDescriptionUnit
grp_idxuintGroup indexN/A
cnv_idxuintConveyor indexN/A
cnt_idxuintContainer indexN/A
prt_idxuintPart indexN/A
prcnu8Speed precisionN/A
cnv_pickup_timeoutf64How long a conveyor intercept or pickup call keeps attempting to find a parts
cnv_spdf64Conveyor speedmm/s
cycle_typeEnumCnvToCnt or CntToCnvN/A
start_signalDigSignalDigital input signal for cycle to startN/A
done_signalDigSignalDigital output signal when cycle is doneN/A

Diagram Quantities

SymbolDescription
φᵢLeg angle
θᵢJoint angle
rᵦBase radius
OᵦBase offset
lᵦBase leg length
lₚPlatform leg length
OₚPlatform offset
rₚPlatform radius

Appendix A: Payload Details

Network Payloads

PayloadFieldsDescriptionType
CmdRspRsltdoneRequest responseBoolean

Slave Management Payloads

PayloadFieldsDescriptionType
NumSlvsEcatDatanum_slavesNumber of slavesuint
rsltError code (see Appendix B)u16
doneRequest responseBoolean

Axis Payloads

PayloadKey FieldsDescription
AxisDataaxs_idx, rslt, doneBase axis payload
AxisCurrPosDataaxs_idx, curr_pos, rslt, doneCurrent position (mm or deg)
AxisMovePosDataaxs_idx, end_pos, rslt, doneAbsolute position target (mm or deg)
AxisMoveVelDataaxs_idx, end_vel, rslt, doneVelocity target (mm/s or deg/s)
AxisMoveRelDataaxs_idx, rel_pos, rslt, doneRelative position (mm or deg)
AxisDigDataaxs_idx, bit_off, val, rslt, doneDigital I/O
AxisBoolDataaxs_idx, val, rslt, doneBoolean value
AxisAlarmsDataaxs_idx, alarms, rslt, doneAlarm vector
AxisSleepDataaxs_idx, t_tot, rslt, doneSleep duration (s)
AxisSpdPrcnDataaxs_idx, prcn, rslt, doneSpeed precision

Group Payloads

PayloadKey FieldsDescription
GroupDatagrp_idx, rslt, doneBase group payload
GroupMovePosDatagrp_idx, end_pos, coord_type, rslt, doneAbsolute position (Joint or World)
GroupMoveRelDatagrp_idx, rel_pos, coord_type, rslt, doneRelative position (Joint or World)
GroupDigDatagrp_idx, axs_idx, bit_off, val, rslt, doneDigital I/O
GroupBoolDatagrp_idx, val, rslt, doneBoolean value
GroupBgnPosDatagrp_idx, coord_type, bgn_pos, rslt, doneBegin position
GroupCurrPosDatagrp_idx, joint_pos, world_pos, rslt, doneCurrent position (joint and world)
GroupAlarmsDatagrp_idx, alarms, rslt, doneAlarm vector
GroupSleepDatagrp_idx, t_tot, rslt, doneSleep duration
GroupSpdPrcnDatagrp_idx, prcn, rslt, doneSpeed precision
MotnCmdDatarslt, doneMotion command response

Conveyor Payloads

PayloadKey FieldsDescription
ConvSpdDatacnv_idx, cnv_spd, rslt, doneConveyor speed (m/s)
GroupConvInterceptDatagrp_idx, cnv_idx, prt_idx, label, drop_rz, found, rslt, doneConveyor intercept
GroupConvDatagrp_idx, cnv_idx, coord_type, rslt, doneGeneral conveyor operation
GroupConvPickupDatagrp_idx, cnv_idx, prt_idx, label, drop_rz, rslt, doneConveyor pickup
GroupConvDropoffDatagrp_idx, cnv_idx, prt_idx, rslt, doneConveyor drop-off

Container Payloads

PayloadKey FieldsDescription
GroupContDropoffDatagrp_idx, cnt_idx, prt_idx, rslt, doneContainer drop-off
GroupContPickupDatagrp_idx, cnt_idx, prt_idx, drop_rz, rslt, doneContainer pickup
GroupContPickupIdxDatagrp_idx, cnt_idx, prt_idx, drop_rz, i_idx, j_idx, k_idx, rslt, doneIndexed container pickup
GroupContDatagrp_idx, cnt_idx, rslt, doneGeneral container operation
ContDatacnt_idx, rslt, doneContainer state
ContPartDatacnt_idx, prt_idx, rslt, doneContainer part
ContBoolDatacnt_idx, val, rslt, doneContainer boolean check
ContPartBoolDatacnt_idx, prt_idx, val, rslt, doneContainer part boolean check

Low-Level Payloads

PayloadKey FieldsDescription
CoeU8Dataslv_idx, index, sub_index, val, rslt, doneCoE 8-bit operation
CoeU16Dataslv_idx, index, sub_index, val, rslt, doneCoE 16-bit operation
CoeU32Dataslv_idx, index, sub_index, val, rslt, doneCoE 32-bit operation
Cia402OpModeDataslv_idx, op_mode, rslt, doneCiA 402 operation mode

Appendix B: Motion Result Error Codes

ValueDescription
0x0000Success
0x1001Initialization axes network error
0x1002Invalid axis index
0x1003Invalid group index
0x1004Invalid conveyor index
0x1005Invalid container index
0x1006Invalid part index
0x1007Invalid digital I/O bit offset
0x1008Axis index not in group
0x1009Motion commanded while not servoed on
0x100AJoint position limits reached
0x100BJoint velocity limits reached
0x100CJoint torque limits reached
0x100DWorld position limits reached
0x100EWorld velocity limits reached
0x100FWorld torque limits reached
0x1010Small or zero length trajectory append dropped
0x1011Servo off commanded while motion running
0x1012Axis and group command trajectory attempting to move the same axis
0x1013Conveyor part not found
0x1014Conveyor speed not initialized
0x1015Conveyor speed exceeds group speed — robot cannot catch up with or track the conveyor
0x1016Conveyor intercept solution did not converge (often due to conveyor running too fast relative to robot)
0x1017Conveyor vertical trajectory failed — max X vel/acc required during move exceeded
0x1018Move append while an alarm present
0x1019Move append while a velocity move is running
0x101AMove append joint trajectory to a world trajectory on a group with non-unique inverse kinematics is not allowed
0x101BQuick stop append trajectory failed — quick stop already running
0x101CMotion command mismatch
0x101DForward kinematics unreachable
0x101EInverse kinematics non-convergent
0x101FInverse kinematics unreachable
0x1020Inverse kinematics singularity
0x1021No end effector config available
0x1022Container was being filled with one part type, then switched to another before full
0x1023Drop-off with auto fill was made while container is already full
0x1024Pickup with auto empty was made while container is already empty
0x1025Container fill index invalid
0x1026Speed percent cannot be zero
0x1027Emergency stop pressed
0x1FFFUnspecified motion error

Appendix C: ECAT Result Error Codes

ValueDescription
0x0000Success
0x0001Invalid slave index
0x0002Uninitialized slave index
0x0003Uninitialized station address
0x0004Working counter not incremented
0x0005Frame receive timeout
0x0006Frame command mismatch
0x0007ESI file not found
0x0008SM data cat section not found in SSI
0x0009Register response mismatch
0x000ASSI maximum byte length reached
0x000BMax retries reached while polling CoE SM1 response mbox ready status
0x000CCoE mbox emergency
0x000DCoE mbox abort code
0x000ECiA operational mode maximum retries reached
0x000FEtherCAT command mismatch

Need the original PDF?

Available on the downloads page.

Go to Downloads