diff --git a/include/ugv_sdk/details/interface/tracer_interface.hpp b/include/ugv_sdk/details/interface/tracer_interface.hpp index debf6ca..8edfdb4 100644 --- a/include/ugv_sdk/details/interface/tracer_interface.hpp +++ b/include/ugv_sdk/details/interface/tracer_interface.hpp @@ -15,18 +15,17 @@ #include "ugv_sdk/details/interface/agilex_message.h" namespace westonrobot { -struct TracerState { - // system state +struct TracerCoreState { SystemStateMessage system_state; MotionStateMessage motion_state; LightStateMessage light_state; + RcStateMessage rc_state; +}; +struct TracerActuatorState { // actuator state - // - for v2 robots only - ActuatorHSStateMessage actuator_hs_state[4]; - ActuatorLSStateMessage actuator_ls_state[4]; - // - for v1 robots only - ActuatorStateMessageV1 actuator_state[4]; + ActuatorHSStateMessage actuator_hs_state[2]; + ActuatorLSStateMessage actuator_ls_state[2]; }; struct TracerInterface { @@ -36,7 +35,8 @@ struct TracerInterface { virtual void SetLightCommand(LightMode f_mode, uint8_t f_value) = 0; // get robot state - virtual TracerState GetRobotState() = 0; + virtual TracerCoreState GetRobotState() = 0; + virtual TracerActuatorState GetActuatorState() = 0; }; } // namespace westonrobot diff --git a/include/ugv_sdk/details/robot_base/tracer_base.hpp b/include/ugv_sdk/details/robot_base/tracer_base.hpp index 72d6af2..7dd2221 100644 --- a/include/ugv_sdk/details/robot_base/tracer_base.hpp +++ b/include/ugv_sdk/details/robot_base/tracer_base.hpp @@ -29,10 +29,9 @@ class TracerBaseV2 : public AgilexBase, // set up connection void Connect(std::string can_name) override { - AgilexBase::ConnectPort( - can_name, - std::bind(&TracerBaseV2::ParseCANFrame, this, std::placeholders::_1)); + AgilexBase::Connect(can_name); } + void Connect(std::string uart_name, uint32_t baudrate) override { // TODO } @@ -49,9 +48,26 @@ class TracerBaseV2 : public AgilexBase, } // get robot state - TracerState GetRobotState() override { - // std::lock_guard - // guard(AgilexBase::state_mutex_); return tracer_state_; + TracerCoreState GetRobotState() override { + auto state = AgilexBase::GetRobotCoreStateMsgGroup(); + + TracerCoreState tracer_state; + tracer_state.system_state = state.system_state; + tracer_state.motion_state = state.motion_state; + tracer_state.light_state = state.light_state; + tracer_state.rc_state = state.rc_state; + return tracer_state; + } + + TracerActuatorState GetActuatorState() override { + auto actuator = AgilexBase::GetActuatorStateMsgGroup(); + + TracerActuatorState tracer_actuator; + for (int i = 0; i < 2; ++i) { + tracer_actuator.actuator_hs_state[i] = actuator.actuator_hs_state[i]; + tracer_actuator.actuator_ls_state[i] = actuator.actuator_ls_state[i]; + } + return tracer_actuator; } void ResetRobotState() override {