mirror of
https://github.com/westonrobot/ugv_sdk
synced 2023-04-08 06:32:14 +08:00
@@ -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;
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user