From f67d183d4702a8bf23a964df127451c5bde1e1e9 Mon Sep 17 00:00:00 2001 From: Ruixiang Du Date: Wed, 14 Jul 2021 09:20:37 +0800 Subject: [PATCH] removed tracer robot class, added rc state func for scout --- CMakeLists.txt | 2 +- demo/CMakeLists.txt | 1 + .../details/interface/scout_interface.hpp | 3 ++ .../ugv_sdk/details/robot_base/scout_base.hpp | 20 ++++--- include/ugv_sdk/mobile_robot/tracer_robot.hpp | 33 +----------- src/mobile_robot/tracer_robot.cpp | 52 ------------------- 6 files changed, 21 insertions(+), 90 deletions(-) delete mode 100644 src/mobile_robot/tracer_robot.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 7c1ca27..c01b2c3 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -88,7 +88,7 @@ add_library(${PROJECT_NAME} ######################## ## public interface to access robot src/mobile_robot/scout_robot.cpp - src/mobile_robot/tracer_robot.cpp + # src/mobile_robot/tracer_robot.cpp ######################## ## protocol v2 support src/protocol_v2/agilex_msg_parser_v2.c diff --git a/demo/CMakeLists.txt b/demo/CMakeLists.txt index 7c6a3f4..ba568fd 100755 --- a/demo/CMakeLists.txt +++ b/demo/CMakeLists.txt @@ -1,6 +1,7 @@ # demo add_subdirectory(scout_demo) add_subdirectory(tracer_demo) + # add_executable(app_hunter_demo hunter_demo/hunter_demo.cpp) # target_link_libraries(app_hunter_demo ugv_sdk) diff --git a/include/ugv_sdk/details/interface/scout_interface.hpp b/include/ugv_sdk/details/interface/scout_interface.hpp index ac003c1..798537d 100644 --- a/include/ugv_sdk/details/interface/scout_interface.hpp +++ b/include/ugv_sdk/details/interface/scout_interface.hpp @@ -37,6 +37,9 @@ struct ScoutInterface { // get robot state virtual ScoutState GetRobotState() = 0; + virtual RcStateMessage GetRcState(){ + // TODO + }; }; } // namespace westonrobot diff --git a/include/ugv_sdk/details/robot_base/scout_base.hpp b/include/ugv_sdk/details/robot_base/scout_base.hpp index 51f2890..822c509 100644 --- a/include/ugv_sdk/details/robot_base/scout_base.hpp +++ b/include/ugv_sdk/details/robot_base/scout_base.hpp @@ -52,20 +52,32 @@ class ScoutBase : public AgilexBase, public ScoutInterface { return scout_state_; } + RcStateMessage GetRcState() override {} + void ResetRobotState() override { - // TODO + std::lock_guard guard(rc_state_mutex_); } private: ScoutState scout_state_; + RcStateMessage rc_state_; + std::mutex rc_state_mutex_; void ParseCANFrame(can_frame *rx_frame) override { AgxMessage status_msg; if (AgilexBase::parser_.DecodeMessage(rx_frame, &status_msg)) { - UpdateScoutState(status_msg, scout_state_); + if (status_msg.type == AgxMsgRcState) + UpdateRcState(status_msg); + else + UpdateScoutState(status_msg, scout_state_); } } + void UpdateRcState(const AgxMessage &status_msg) { + std::lock_guard guard(rc_state_mutex_); + rc_state_ = status_msg.body.rc_state_msg; + } + void UpdateScoutState(const AgxMessage &status_msg, ScoutState &state) { std::lock_guard guard(AgilexBase::state_mutex_); switch (status_msg.type) { @@ -104,10 +116,6 @@ class ScoutBase : public AgilexBase, public ScoutInterface { status_msg.body.v1_actuator_state_msg; break; } - // case AgxMsgRcState: { - // state.rc_state = status_msg.body.rc_state_msg; - // break; - // } /* sensor feedback */ // case AgxMsgOdometry: { // // std::cout << "Odometer msg feedback received" << std::endl; diff --git a/include/ugv_sdk/mobile_robot/tracer_robot.hpp b/include/ugv_sdk/mobile_robot/tracer_robot.hpp index a1b40b3..72a419b 100644 --- a/include/ugv_sdk/mobile_robot/tracer_robot.hpp +++ b/include/ugv_sdk/mobile_robot/tracer_robot.hpp @@ -10,39 +10,10 @@ #ifndef TRACER_ROBOT_HPP #define TRACER_ROBOT_HPP -#include - -#include "ugv_sdk/details/interface/robot_interface.hpp" -#include "ugv_sdk/details/interface/tracer_interface.hpp" - -// #include "ugv_sdk/details/robot_base/tracer_base.hpp" +#include "ugv_sdk/details/robot_base/tracer_base.hpp" namespace westonrobot { -// using TracerRobot = TracerBaseV2(); -class TracerRobot : public RobotInterface, public TracerInterface { - public: - TracerRobot(); - ~TracerRobot(); - - void Connect(std::string can_name) override; - void Connect(std::string uart_name, uint32_t baudrate) override; - - void EnableCommandedMode() override; - - void SetMotionCommand(double linear_vel, double angular_vel) override; - void SetLightCommand(LightMode f_mode, uint8_t f_value) override; - void DisableLightControl() override; - - void ResetRobotState() override; - - ProtocolVersion GetProtocolVersion() override; - - // get robot state - TracerState GetRobotState() override; - - private: - RobotInterface* robot_; -}; +using TracerRobot = TracerBaseV2; } // namespace westonrobot #endif /* TRACER_ROBOT_HPP */ diff --git a/src/mobile_robot/tracer_robot.cpp b/src/mobile_robot/tracer_robot.cpp deleted file mode 100644 index 8e1d39f..0000000 --- a/src/mobile_robot/tracer_robot.cpp +++ /dev/null @@ -1,52 +0,0 @@ -/* - * tracer_robot.cpp - * - * Created on: Jul 13, 2021 22:13 - * Description: - * - * Copyright (c) 2021 Weston Robot Pte. Ltd. - */ - -#include "ugv_sdk/mobile_robot/tracer_robot.hpp" -#include "ugv_sdk/details/robot_base/tracer_base.hpp" - -namespace westonrobot { -TracerRobot::TracerRobot() { - robot_ = new TracerBaseV2(); -} - -TracerRobot::~TracerRobot() { - if (robot_) delete robot_; -} - -void TracerRobot::EnableCommandedMode() { robot_->EnableCommandedMode(); } - -void TracerRobot::Connect(std::string can_name) { robot_->Connect(can_name); } - -void TracerRobot::Connect(std::string uart_name, uint32_t baudrate) { - robot_->Connect(uart_name, baudrate); -} - -void TracerRobot::ResetRobotState() { robot_->ResetRobotState(); } - -ProtocolVersion TracerRobot::GetProtocolVersion() { - return robot_->GetProtocolVersion(); -} - -void TracerRobot::SetMotionCommand(double linear_vel, double angular_vel) { - auto tracer = dynamic_cast(robot_); - tracer->SetMotionCommand(linear_vel, angular_vel); -} - -void TracerRobot::DisableLightControl() { robot_->DisableLightControl(); } - -void TracerRobot::SetLightCommand(LightMode f_mode, uint8_t f_value) { - auto tracer = dynamic_cast(robot_); - tracer->SetLightCommand(f_mode, f_value); -} - -TracerState TracerRobot::GetRobotState() { - auto tracer = dynamic_cast(robot_); - return tracer->GetRobotState(); -} -} // namespace westonrobot \ No newline at end of file