add SetBrakeMode function

This commit is contained in:
zhoups
2021-07-29 18:06:01 +08:00
parent 740de6aeba
commit d519f158bb
10 changed files with 65 additions and 0 deletions

View File

@@ -240,6 +240,10 @@ typedef struct {
ControlMode mode; ControlMode mode;
} ControlModeConfigMessage; } ControlModeConfigMessage;
typedef struct {
BrakeMode mode;
} BrakeModeConfigMessage;
typedef struct { typedef struct {
bool set_as_neutral; bool set_as_neutral;
} SteerNeutralRequestMessage; } SteerNeutralRequestMessage;
@@ -295,6 +299,7 @@ typedef enum {
AgxMsgSteerNeutralRequest, AgxMsgSteerNeutralRequest,
AgxMsgSteerNeutralResponse, AgxMsgSteerNeutralResponse,
AgxMsgStateResetConfig, AgxMsgStateResetConfig,
AgxMsgBrakeModeConfig,
// V1-only messages // V1-only messages
AgxMsgMotionCommandV1, AgxMsgMotionCommandV1,
AgxMsgValueSetCommandV1, AgxMsgValueSetCommandV1,
@@ -333,6 +338,7 @@ typedef struct {
VersionRequestMessage version_request_msg; VersionRequestMessage version_request_msg;
VersionResponseMessage version_response_msg; VersionResponseMessage version_response_msg;
ControlModeConfigMessage control_mode_config_msg; ControlModeConfigMessage control_mode_config_msg;
BrakeModeConfigMessage brake_mode_config_msg;
SteerNeutralRequestMessage steer_neutral_request_msg; SteerNeutralRequestMessage steer_neutral_request_msg;
SteerNeutralResponseMessage steer_neutral_response_msg; SteerNeutralResponseMessage steer_neutral_response_msg;
StateResetConfigMessage state_reset_config_msg; StateResetConfigMessage state_reset_config_msg;

View File

@@ -41,6 +41,12 @@ typedef enum {
CONTROL_MODE_UART = 0x02 CONTROL_MODE_UART = 0x02
} ControlMode; } ControlMode;
typedef enum {
// CONTROL_MODE_STANDBY = 0x00,
BRAKE_MODE_UNLOCK = 0x00,
BRAKE_MODE_LOCK = 0x01
} BrakeMode;
typedef enum { typedef enum {
RC_SWITCH_UP = 0, RC_SWITCH_UP = 0,
RC_SWITCH_MIDDLE, RC_SWITCH_MIDDLE,

View File

@@ -39,6 +39,8 @@ struct HunterInterface {
virtual void SetMotionCommand(double linear_vel, double steering_angle) = 0; virtual void SetMotionCommand(double linear_vel, double steering_angle) = 0;
virtual void SetBrakeMode(BrakeMode mode) = 0;
// get robot state // get robot state
virtual HunterCoreState GetRobotState() = 0; virtual HunterCoreState GetRobotState() = 0;
virtual HunterActuatorState GetActuatorState() = 0; virtual HunterActuatorState GetActuatorState() = 0;

View File

@@ -93,6 +93,8 @@ class RobotCommonInterface {
"Only a derived version of this function with actual implementation " "Only a derived version of this function with actual implementation "
"is supposed to be used."); "is supposed to be used.");
}; };
virtual void EnableBrakeMode(BrakeMode mode){};
}; };
} // namespace westonrobot } // namespace westonrobot

View File

@@ -268,6 +268,17 @@ class AgilexBase : public RobotCommonInterface {
break; break;
} }
} }
void EnableBrakedMode(BrakeMode mode) {
// construct message
AgxMessage msg;
msg.type = AgxMsgBrakeModeConfig;
msg.body.brake_mode_config_msg.mode = mode;
// encode msg to can frame and send to bus
can_frame frame;
if (parser_.EncodeMessage(&msg, &frame)) can_->SendFrame(frame);
}
}; };
} // namespace westonrobot } // namespace westonrobot

View File

@@ -36,6 +36,7 @@ class HunterBase : public AgilexBase<ParserType>, public HunterInterface {
angular_vel); angular_vel);
} }
// get robot state // get robot state
HunterCoreState GetRobotState() override { HunterCoreState GetRobotState() override {
auto state = AgilexBase<ParserType>::GetRobotCoreStateMsgGroup(); auto state = AgilexBase<ParserType>::GetRobotCoreStateMsgGroup();
@@ -60,6 +61,10 @@ class HunterBase : public AgilexBase<ParserType>, public HunterInterface {
} }
return hunter_actuator; return hunter_actuator;
} }
void SetBrakeMode(BrakeMode mode) override{
AgilexBase<ParserType>::EnableBrakeMode(mode);
}
}; };
} // namespace westonrobot } // namespace westonrobot

View File

@@ -25,6 +25,8 @@ class HunterRobot : public RobotCommonInterface, public HunterInterface {
void EnableCommandedMode() override; void EnableCommandedMode() override;
void SetBrakeMode(BrakeMode mode) override;
void SetMotionCommand(double linear_vel, double angular_vel) override; void SetMotionCommand(double linear_vel, double angular_vel) override;
void ResetRobotState() override; void ResetRobotState() override;

View File

@@ -38,6 +38,11 @@ void HunterRobot::SetMotionCommand(double linear_vel, double angular_vel) {
hunter->SetMotionCommand(linear_vel, angular_vel); hunter->SetMotionCommand(linear_vel, angular_vel);
} }
void HunterRobot::SetBrakeMode(BrakeMode mode) {
auto hunter = dynamic_cast<HunterInterface*>(robot_);
hunter->SetBrakeMode(mode);
}
HunterCoreState HunterRobot::GetRobotState() { HunterCoreState HunterRobot::GetRobotState() {
auto hunter = dynamic_cast<HunterInterface*>(robot_); auto hunter = dynamic_cast<HunterInterface*>(robot_);
return hunter->GetRobotState(); return hunter->GetRobotState();

View File

@@ -563,6 +563,21 @@ bool EncodeCanFrameV2(const AgxMessage *msg, struct can_frame *tx_frame) {
memcpy(tx_frame->data, (uint8_t *)(&frame), tx_frame->can_dlc); memcpy(tx_frame->data, (uint8_t *)(&frame), tx_frame->can_dlc);
break; break;
} }
case AgxMsgBrakeModeConfig: {
tx_frame->can_id = CAN_MSG_BRAKING_COMMAND_ID;
tx_frame->can_dlc = 8;
BrakeModeConfigFrame frame;
frame.mode = msg->body.control_mode_config_msg.mode;
frame.reserved0 = 0;
frame.reserved1 = 0;
frame.reserved2 = 0;
frame.reserved3 = 0;
frame.reserved4 = 0;
frame.reserved5 = 0;
frame.reserved6 = 0;
memcpy(tx_frame->data, (uint8_t *)(&frame), tx_frame->can_dlc);
break;
}
case AgxMsgSteerNeutralRequest: { case AgxMsgSteerNeutralRequest: {
tx_frame->can_id = CAN_MSG_STEER_NEUTRAL_REQUEST_ID; tx_frame->can_id = CAN_MSG_STEER_NEUTRAL_REQUEST_ID;
tx_frame->can_dlc = 8; tx_frame->can_dlc = 8;

View File

@@ -360,6 +360,17 @@ typedef struct {
uint8_t reserved6; uint8_t reserved6;
} ControlModeConfigFrame; } ControlModeConfigFrame;
typedef struct {
uint8_t mode;
uint8_t reserved0;
uint8_t reserved1;
uint8_t reserved2;
uint8_t reserved3;
uint8_t reserved4;
uint8_t reserved5;
uint8_t reserved6;
} BrakeModeConfigFrame;
typedef struct { typedef struct {
uint8_t set_as_neutral; uint8_t set_as_neutral;
uint8_t reserved0; uint8_t reserved0;