diff --git a/.github/workflows/test_regression.yml b/.github/workflows/test_regression.yml index 24c06be7..893fae63 100644 --- a/.github/workflows/test_regression.yml +++ b/.github/workflows/test_regression.yml @@ -7,7 +7,7 @@ jobs: runs-on: ubuntu-22.04 steps: # git checkout the PR - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Install gcc run: sudo apt-get install -y gcc libc6-dev @@ -18,7 +18,7 @@ jobs: tests/test_regression.sh - name: Archive generated headers - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: dsdl_generated path: | diff --git a/flytrex/delcon/21000.StateReport.uavcan b/flytrex/delcon/21000.StateReport.uavcan new file mode 100644 index 00000000..def44db3 --- /dev/null +++ b/flytrex/delcon/21000.StateReport.uavcan @@ -0,0 +1,120 @@ +# DelCon (delivery controller) state report data +uint5 ACTIVE_MODE_INITIAL = 0 # INITIAL mode +uint5 ACTIVE_MODE_ENCODER_ALIGNMENT = 1 # ENCODER_ALIGNMENT mode +uint5 ACTIVE_MODE_WIRE_HOMING = 2 # WIRE_HOMING mode +uint5 ACTIVE_MODE_IDLE_EMPTY = 3 # IDLE_EMPTY mode +uint5 ACTIVE_MODE_DIRECT_OVERRIDE = 4 # DIRECT_OVERRIDE mode +uint5 ACTIVE_MODE_HALT = 5 # HALT mode +uint5 ACTIVE_MODE_GROUND_UNLOAD = 6 # GROUND_UNLOAD mode +uint5 ACTIVE_MODE_RESET = 7 # RESET mode +uint5 ACTIVE_MODE_PREPARE_FOR_PICKUP = 8 # PREPARE_FOR_PICKUP mode +uint5 ACTIVE_MODE_LIFT_PACKAGE = 9 # LIFT_PACKAGE mode +uint5 ACTIVE_MODE_IDLE_LOADED = 10 # IDLE_LOADED mode +uint5 ACTIVE_MODE_LANDING = 11 # LANDING mode +uint5 ACTIVE_MODE_PREPARE_FOR_DELIVERY = 12 # PREPARE_FOR_DELIVERY mode +uint5 ACTIVE_MODE_DELIVERY = 13 # DELIVERY mode +uint5 ACTIVE_MODE_RELEASE_WIRE = 14 # RELEASE_WIRE mode + +bool MODE_ERROR_NO_ERROR = 0 # No error +bool MODE_ERROR_ASSERT = 1 # There is an error + +bool MODE_STATUS_DONE = 0 # Operation finished +bool MODE_STATUS_IN_PROGRESS = 1 # Operation is in progress + +bool HAS_PACKAGE_FALSE = 0 # There is no package on the hook +bool HAS_PACKAGE_TRUE = 1 # There is a package on the hook + +bool NET_STAT_UP = 0 # The net is up +bool NET_STAT_DOWN = 1 # The net is down + +bool LOCK_STATE_UNLOCKED = 0 # The state of the lock is unlocked +bool LOCK_STATE_LOCKED = 1 # The state of the lock is locked + +bool ACK_OBSERVER_NO_FAULT = 0 +bool ACK_OBSERVER_FAULT = 1 + +bool REQ_EXEC_HOLD_EXEC = 0 # Execute the current action +bool REQ_EXEC_HOLD_HOLD = 1 # Stop the current action + +bool HOME_SWITCH_INACTIVE = 0 # Home switch inactive +bool HOME_SWITCH_ACTIVE = 1 # Home switch active + +bool SPOOL_DEENERGIZE = 0 # Deenergize the motor +bool SPOOL_ENERGIZE = 1 # Energize the motor + +bool ENCODER_UNRELIABLE = 0 +bool ENCODER_RELIABLE = 1 + +bool SPOOL_ENERGIZE_NOT_ALLOWED = 0 +bool SPOOL_ENERGIZE_ALLOWED = 1 + +bool SPOOL_TARGET_NOT_REACHED = 0 # Spool target wasn't reached +bool SPOOL_TARGET_REACHED = 1 # Spool target reached + +bool SPOOL_GO = 0 # Spool the wire +bool SPOOL_EMERGENCY_HOLD = 1 # Spool hold + +bool SPOOL_EXECUTING = 0 +bool SPOOL_HOLDING = 1 + +bool SPOOL_SHAFT_CONTROL = 0 +bool SPOOL_LOAD_CONTROL = 1 + +bool HOMING_INCOMPLETE = 0 # Wire homing is incomplete +bool HOMING_COMPLETE = 1 # Wire homing complete + +bool ALIGNMENT_INCOMPLETE = 0 # Encoder alignment is incomplete +bool ALIGNMENT_COMPLETE = 1 # Encoder alignment is complete + +uint5 active_mode # The current active mode +uint5 active_submode # The current active submode +bool mode_error # The error mode bit. If asserted then error_flags contains the current error map +bool mode_status # The current mode's status +uint32 error_flags # A bitmap of all the possible errors +uint16 motor_rpm # Motor revolutions per minute +bool has_package # A flag that indicates if a package is sensed on the wire +float32 instant_weight # The weight of the package in kg. Relevant when has_package = 1 +bool net_state # A flag that indicates the net status +bool lock_state # The state of the lock servo +uint32 mode_duration # Time in milliseconds in the current mode +float32 motor_temperature # The current temperature of the motor +float32 spool_input_max_lag # The distance (in meters) that the actual wire position is permitted to fall behind the target position before the controller triggers an error +float32 spool_input_max_lag_window # The maximum time (e.g., 0.5 seconds) the controller will wait for the spool to reach a commanded position +float32 spool_input_max_overshoot # The difference between the peak physical position reached by the spool and the final steady-state setpoint +float32 spool_input_max_overshoot_window # The time window which allows spool/unspool overshoot +float32 spool_input_min_speed # The lowest linear velocity at which the wire is permitted to travel while the system is in an active "run" state +float32 spool_input_min_speed_window # The maximum duration the system allows for the motor to reach or maintain its "Min Speed" threshold +bool spool_input_ack_observer_fault +float32 spool_input_load_acc # The rate of change of the angular velocity of the rotating spool drum (measured in rad/s^2) +float32 spool_input_load_dec # The rate at which the angular velocity of the spool drum decreases (measured in rad/s^2) +bool spool_input_req_shaft_ctrl_load +bool spool_input_req_exec_hold # A flag for executing/stopping the current action +uint8 spool_input_target_ext # The desired total length of cable to be deployed or unwound +bool spool_input_home_switch_activated # The endswitch which is triggered when the bobbin is in the house +float32 spool_input_max_force # The maximum allowable cable tension or linear pulling force the system can exert +float32 spool_input_min_force # The minimum amount of tension or pulling effort that must be maintained on the wire to ensure safe and reliable operation +float32 spool_input_max_torque # The software or hardware limit on the rotational twisting force the motor can apply to the spool shaft +float32 spool_input_min_torque # The lower threshold of rotational force that the motor is commanded or allowed to maintain +bool spool_input_energize # Energizing the motor +bool spool_input_encoder_reliable +bool spool_internal_energize_allowed # AND (spool_input_energize, spool_input_encoder_reliable) +float32 spool_internal_ext_setpoint # The target value for the length of wire that comes out from the trajectory generator +float32 spool_internal_ext_err # The difference between where the wire should be and where it actually is (spool_internal_ext_setpoint - spool_output_ext) +float32 spool_internal_shaft_setpoint # The target angular position for the motor's output shaft +float32 spool_internal_shaft_err # The difference between where the shaft should be and where it actually is (spool_internal_shaft_setpoint - spool_output_shaft_pos) +float32 spool_internal_quad_current_req # The value for the specific component of motor current that is responsible for generating torque +float32 spool_internal_quad_current_active_setpoint # The final, safety-filtered command for torque-producing current (Iq) that is actually sent to the motor's power electronics +float32 spool_output_trajectory_margin # The maximum allowable physical distance the system can deviate from its pre-planned motion path +bool spool_output_target_reached # A flag which indicates if the wire reached target +bool spool_output_go_emergency_hold # A flag which controls if the spooling enters emergency hold or continue with operation +bool spool_output_executing_holding # OR (spool_output_go_emergency_hold, spool_input_req_exec_hold) +bool spool_output_shaft_load_ctrl # AND(spool_input_req_shaft_ctrl_load, spool_output_homing_complete) +float32 spool_output_ext # The output wire extension in meters +float32 spool_output_shaft_pos # The output shaft position in radian +bool spool_output_homing_complete # "WIRE_HOMING" mode is complete +float32 spool_output_force # The real-time linear pulling effort currently being exerted by the cable (in N) +float32 spool_output_torque # The rotational twisting force currently being generated at the motor's output shaft (in Nm) +float32 spool_output_bobbin_speed # Bobbin speed, rad/s +float32 spool_output_load_speed # Load speed, m/s +float32 spool_output_total_energy_cntr # Total energy counter, J +bool spool_output_alignment_complete # Alignment complete flag \ No newline at end of file diff --git a/flytrex/delcon/21001.DirectOverride.uavcan b/flytrex/delcon/21001.DirectOverride.uavcan new file mode 100644 index 00000000..b501efb0 --- /dev/null +++ b/flytrex/delcon/21001.DirectOverride.uavcan @@ -0,0 +1,45 @@ +# DelCon (delivery controller) direct override data + +bool NET_STAT_UP = 0 # The net is up +bool NET_STAT_DOWN = 1 # The net is down + +bool LOCK_STATE_UNLOCKED = 0 # The state of the lock is unlocked +bool LOCK_STATE_LOCKED = 1 # The state of the lock is locked + +bool ACK_OBSERVER_NO_FAULT = 0 +bool ACK_OBSERVER_FAULT = 1 + +bool REQ_EXEC_HOLD_EXEC = 0 # Execute the current action +bool REQ_EXEC_HOLD_HOLD = 1 # Stop the current action + +bool HOME_SWITCH_INACTIVE = 0 # Home switch inactive +bool HOME_SWITCH_ACTIVE = 1 # Home switch active + +bool SPOOL_DEENERGIZE = 0 # Deenergize the motor +bool SPOOL_ENERGIZE = 1 # Energize the motor + +bool ENCODER_UNRELIABLE = 0 +bool ENCODER_RELIABLE = 1 + +uint8 node_id # The destination node ID +bool net_state # A flag that indicates the net status +bool lock_state # The state of the lock servo +float16 spool_input_max_lag # The distance (in meters) that the actual wire position is permitted to fall behind the target position before the controller triggers an error +float16 spool_input_max_lag_window # The maximum time (e.g., 0.5 seconds) the controller will wait for the spool to reach a commanded position +float16 spool_input_max_overshoot # The difference between the peak physical position reached by the spool and the final steady-state setpoint +float16 spool_input_max_overshoot_window # The time window which allows spool/unspool overshoot +float16 spool_input_min_speed # The lowest linear velocity at which the wire is permitted to travel while the system is in an active "run" state +float16 spool_input_min_speed_window # The maximum duration the system allows for the motor to reach or maintain its "Min Speed" threshold +bool spool_input_ack_observer_fault +float16 spool_input_load_acc # The rate of change of the angular velocity of the rotating spool drum (measured in rad/s^2) +float16 spool_input_load_dec # The rate at which the angular velocity of the spool drum decreases (measured in rad/s^2) +float16 spool_input_req_shaft_ctrl_load +bool spool_input_req_exec_hold # A flag for executing/stopping the current action +uint8 spool_input_target_ext # The desired total length of cable to be deployed or unwound +bool spool_input_home_switch_activated # The endswitch which is triggered when the bobbin is in the house +float16 spool_input_max_force # The maximum allowable cable tension or linear pulling force the system can exert +float16 spool_input_min_force # The minimum amount of tension or pulling effort that must be maintained on the wire to ensure safe and reliable operation +float16 spool_input_max_torque # The software or hardware limit on the rotational twisting force the motor can apply to the spool shaft +float16 spool_input_min_torque # The lower threshold of rotational force that the motor is commanded or allowed to maintain +bool spool_input_energize # Energizing the motor +bool spool_input_encoder_reliable \ No newline at end of file diff --git a/flytrex/delcon/21002.ParamSet.uavcan b/flytrex/delcon/21002.ParamSet.uavcan new file mode 100644 index 00000000..0b60ef6c --- /dev/null +++ b/flytrex/delcon/21002.ParamSet.uavcan @@ -0,0 +1,23 @@ +# DelCon (delivery controller) parameters set command + +uint4 OPERATION_RECALL = 0 # Read a ParamSet configuration from the spool controller +uint4 OPERATION_STORE = 1 # Store a ParamSet configuration to the spool controller +uint4 OPERATION_EXECUTE = 2 # Bypass the external flash and execute ParamSet values in the spool controller (the parameters aren't saved) +uint4 OPERATION_RESPONSE = 3 # A response that is sent from the node + +bool SPOOL_SHAFT_CONTROL = 0 +bool SPOOL_LOAD_CONTROL = 1 + +uint4 operation # The operation to perform +Error error # A returned error by the responder +uint16 param_id # The ParamSet ID number +bool load_not_shaft_control # false: shaft control (SPOOL_SHAFT_CONTROL); true: load control (SPOOL_LOAD_CONTROL) +float32 shaft_pos_rad # The shaft position in radian +float32 completion_time_s # The time to complete the setup +float32 min_torque_Nm # The lower threshold of rotational force that the motor is commanded or allowed to maintain +float32 max_torque_Nm # The software or hardware limit on the rotational twisting force the motor can apply to the spool shaft +float32 obs_tension_detector_min_torque_Nm # The lower threshold of rotational force that the motor is commanded or allowed to maintain +float32 obs_tension_detector_window_s # The time in seconds which obs_tension_detector_min_torque_Nm was observed +float32 obs_traj_deviation_pos_m # Maximum allowed positive deviation from the planned trajectory [m] +float32 obs_traj_deviation_neg_m # Maximum allowed negative deviation from the planned trajectory [m] +float32 obs_allowed_deviation_pos_window_s # Time window over which positive trajectory deviation is evaluated [s] \ No newline at end of file diff --git a/flytrex/delcon/21003.DesignConstantsSet.uavcan b/flytrex/delcon/21003.DesignConstantsSet.uavcan new file mode 100644 index 00000000..ca465fa3 --- /dev/null +++ b/flytrex/delcon/21003.DesignConstantsSet.uavcan @@ -0,0 +1,15 @@ +# DelCon (delivery controller) constants set + +uint4 OPERATION_RECALL = 0 # Read the constants configuration from the spool controller +uint4 OPERATION_STORE = 1 # Store the constants configuration to the spool controller +uint4 OPERATION_UNUSED = 2 # Currently unused value +uint4 OPERATION_RESPONSE = 3 # A response that is sent from the node + +uint4 operation # The operation to perform +Error error # A returned error by the responder +float32 wire_diameter # Diameter of the wire in meters +float32 barrel_diameter # The diameter of the barrel in meters +float32 spool_width # The width of the spool +float32 gearbox_ratio # Gearbox ratio +float32 wire_packing_efficiencies # Packing efficiency factor of the wound wire +float32 total_length_of_spooled_wire # The wire's total length in meters \ No newline at end of file diff --git a/flytrex/delcon/21010.WriteConfigFile.uavcan b/flytrex/delcon/21010.WriteConfigFile.uavcan new file mode 100644 index 00000000..09bb348a --- /dev/null +++ b/flytrex/delcon/21010.WriteConfigFile.uavcan @@ -0,0 +1,5 @@ +# DelCon (delivery controller) write configuration file (a broadcast message that is used for send/response) + +uint8 destination_node_id # The destination's node ID +Error error # A returned error by the responder +Path image_file_remote_path # The file to upload to the DelCon \ No newline at end of file diff --git a/flytrex/delcon/21011.ReadConfigFile.uavcan b/flytrex/delcon/21011.ReadConfigFile.uavcan new file mode 100644 index 00000000..a0e39abf --- /dev/null +++ b/flytrex/delcon/21011.ReadConfigFile.uavcan @@ -0,0 +1,4 @@ +# DelCon (delivery controller) read configuration file (a broadcast message that is used for send/response) + +uint8 destination_node_id # The destination's node ID +Error error # A returned error by the responder \ No newline at end of file diff --git a/flytrex/delcon/Error.uavcan b/flytrex/delcon/Error.uavcan new file mode 100644 index 00000000..e2e965dc --- /dev/null +++ b/flytrex/delcon/Error.uavcan @@ -0,0 +1,23 @@ +# +# Nested type. +# File operation & DelCon result code. +# +int16 STATUS_OK = 0 +int16 STATUS_UNKNOWN_ERROR = 32767 + +int16 STATUS_NOT_FOUND = 2 +int16 STATUS_IO_ERROR = 5 +int16 STATUS_ACCESS_DENIED = 13 +int16 STATUS_IS_DIRECTORY = 21 # I.e. attempt to read/write on a path that points to a directory +int16 STATUS_INVALID_VALUE = 22 # E.g. file name is not valid for the target file system +int16 STATUS_FILE_TOO_LARGE = 27 +int16 STATUS_OUT_OF_SPACE = 28 +int16 STATUS_NOT_IMPLEMENTED = 38 + +int16 STATUS_IDX_OUT_OF_BOUND = 40 # Param ID is out of bound + +int16 STATUS_BUSY = 50 # The DelCon is busy, so file write needs to be postpone +int16 STATUS_LOW_MEM = 51 # DelCon experiences low memory, so file write needs to be postpone +int16 STATUS_TIMEOUT = 52 # Timeout from previous file read request detected + +int16 value diff --git a/flytrex/delcon/Path.uavcan b/flytrex/delcon/Path.uavcan new file mode 100644 index 00000000..c9e2b75c --- /dev/null +++ b/flytrex/delcon/Path.uavcan @@ -0,0 +1,11 @@ +# +# Nested type. +# +# File system path in UTF8. +# +# The only valid separator is forward slash. +# + +uint8 SEPARATOR = '/' + +uint8[<=200] path diff --git a/flytrex/diagnostics/bms/21000.TCAData.uavcan b/flytrex/diagnostics/bms/22000.TCAData.uavcan similarity index 100% rename from flytrex/diagnostics/bms/21000.TCAData.uavcan rename to flytrex/diagnostics/bms/22000.TCAData.uavcan