diff --git a/include/ugv_sdk/details/interface/ranger_interface.hpp b/include/ugv_sdk/details/interface/ranger_interface.hpp index 6153487..ee81442 100644 --- a/include/ugv_sdk/details/interface/ranger_interface.hpp +++ b/include/ugv_sdk/details/interface/ranger_interface.hpp @@ -39,7 +39,7 @@ struct RangerActuatorState { ///////////////////////////////////////////////////////////////////////// struct RangerInterface { - virtual void Connect(std::string dev_name) = 0; + virtual bool Connect(std::string dev_name) = 0; // robot control virtual void SetMotionMode(uint8_t mode) = 0; diff --git a/include/ugv_sdk/details/interface/robot_common_interface.hpp b/include/ugv_sdk/details/interface/robot_common_interface.hpp index 05dfaab..4b3dc39 100644 --- a/include/ugv_sdk/details/interface/robot_common_interface.hpp +++ b/include/ugv_sdk/details/interface/robot_common_interface.hpp @@ -50,7 +50,7 @@ class RobotCommonInterface { virtual void EnableCommandedMode() = 0; // functions to be implemented by each robot class - virtual void Connect(std::string can_name) = 0; + virtual bool Connect(std::string can_name) = 0; virtual void ResetRobotState() = 0; diff --git a/include/ugv_sdk/details/robot_base/agilex_base.hpp b/include/ugv_sdk/details/robot_base/agilex_base.hpp index b5bbeb6..893fe4a 100644 --- a/include/ugv_sdk/details/robot_base/agilex_base.hpp +++ b/include/ugv_sdk/details/robot_base/agilex_base.hpp @@ -39,9 +39,10 @@ class AgilexBase : public RobotCommonInterface { AgilexBase(const AgilexBase &hunter) = delete; AgilexBase &operator=(const AgilexBase &hunter) = delete; - void Connect(std::string can_name) override { - ConnectPort(can_name, std::bind(&AgilexBase::ParseCANFrame, - this, std::placeholders::_1)); + bool Connect(std::string can_name) override { + return ConnectPort(can_name, + std::bind(&AgilexBase::ParseCANFrame, this, + std::placeholders::_1)); } // switch to commanded mode @@ -173,11 +174,11 @@ class AgilexBase : public RobotCommonInterface { // connect to roboot from CAN or serial using CANFrameRxCallback = AsyncCAN::ReceiveCallback; - void ConnectPort(std::string dev_name, CANFrameRxCallback cb) { + bool ConnectPort(std::string dev_name, CANFrameRxCallback cb) { can_ = std::make_shared(dev_name); can_->SetReceiveCallback(cb); - can_->StartListening(); - can_connected_ = true; + can_connected_ = can_->StartListening(); + return can_connected_; } void DisconnectPort() { diff --git a/include/ugv_sdk/details/robot_base/bunker_base.hpp b/include/ugv_sdk/details/robot_base/bunker_base.hpp index 5912e24..e0120ef 100644 --- a/include/ugv_sdk/details/robot_base/bunker_base.hpp +++ b/include/ugv_sdk/details/robot_base/bunker_base.hpp @@ -26,8 +26,8 @@ class BunkerBase : public AgilexBase, public BunkerInterface { ~BunkerBase() = default; // set up connection - void Connect(std::string can_name) override { - AgilexBase::Connect(can_name); + bool Connect(std::string can_name) override { + return AgilexBase::Connect(can_name); } // robot control diff --git a/include/ugv_sdk/details/robot_base/hunter_base.hpp b/include/ugv_sdk/details/robot_base/hunter_base.hpp index b33ea7c..4e83793 100644 --- a/include/ugv_sdk/details/robot_base/hunter_base.hpp +++ b/include/ugv_sdk/details/robot_base/hunter_base.hpp @@ -26,8 +26,8 @@ class HunterBase : public AgilexBase, public HunterInterface { ~HunterBase() = default; // set up connection - void Connect(std::string can_name) override { - AgilexBase::Connect(can_name); + bool Connect(std::string can_name) override { + return AgilexBase::Connect(can_name); } // robot control diff --git a/include/ugv_sdk/details/robot_base/ranger_base.hpp b/include/ugv_sdk/details/robot_base/ranger_base.hpp index f918c91..36d3ead 100644 --- a/include/ugv_sdk/details/robot_base/ranger_base.hpp +++ b/include/ugv_sdk/details/robot_base/ranger_base.hpp @@ -27,9 +27,10 @@ class RangerBase : public AgilexBase, public RangerInterface { ~RangerBase() = default; // set up connection - void Connect(std::string dev_name) override { - AgilexBase::ConnectPort(dev_name, std::bind(&RangerBase::ParseCANFrame, - this, std::placeholders::_1)); + bool Connect(std::string dev_name) override { + return AgilexBase::ConnectPort( + dev_name, + std::bind(&RangerBase::ParseCANFrame, this, std::placeholders::_1)); } // robot control diff --git a/include/ugv_sdk/details/robot_base/scout_base.hpp b/include/ugv_sdk/details/robot_base/scout_base.hpp index 8d4598b..571bc5b 100644 --- a/include/ugv_sdk/details/robot_base/scout_base.hpp +++ b/include/ugv_sdk/details/robot_base/scout_base.hpp @@ -26,8 +26,8 @@ class ScoutBase : public AgilexBase, public ScoutInterface { ~ScoutBase() = default; // set up connection - void Connect(std::string can_name) override { - AgilexBase::Connect(can_name); + bool Connect(std::string can_name) override { + return AgilexBase::Connect(can_name); } void Connect(std::string uart_name, uint32_t baudrate) override { diff --git a/include/ugv_sdk/details/robot_base/tracer_base.hpp b/include/ugv_sdk/details/robot_base/tracer_base.hpp index 8139268..707e84c 100644 --- a/include/ugv_sdk/details/robot_base/tracer_base.hpp +++ b/include/ugv_sdk/details/robot_base/tracer_base.hpp @@ -28,8 +28,8 @@ class TracerBaseV2 : public AgilexBase, ~TracerBaseV2() = default; // set up connection - void Connect(std::string can_name) override { - AgilexBase::Connect(can_name); + bool Connect(std::string can_name) override { + return AgilexBase::Connect(can_name); } void Connect(std::string uart_name, uint32_t baudrate) override { diff --git a/include/ugv_sdk/mobile_robot/bunker_robot.hpp b/include/ugv_sdk/mobile_robot/bunker_robot.hpp index 2f189c7..8fb10f6 100644 --- a/include/ugv_sdk/mobile_robot/bunker_robot.hpp +++ b/include/ugv_sdk/mobile_robot/bunker_robot.hpp @@ -21,7 +21,7 @@ class BunkerRobot : public RobotCommonInterface, public BunkerInterface { BunkerRobot(ProtocolVersion protocol = ProtocolVersion::AGX_V2); ~BunkerRobot(); - void Connect(std::string can_name) override; + bool Connect(std::string can_name) override; void EnableCommandedMode() override; diff --git a/include/ugv_sdk/mobile_robot/hunter_robot.hpp b/include/ugv_sdk/mobile_robot/hunter_robot.hpp index 6e5eb85..c7057ff 100644 --- a/include/ugv_sdk/mobile_robot/hunter_robot.hpp +++ b/include/ugv_sdk/mobile_robot/hunter_robot.hpp @@ -21,7 +21,7 @@ class HunterRobot : public RobotCommonInterface, public HunterInterface { HunterRobot(ProtocolVersion protocol = ProtocolVersion::AGX_V2); ~HunterRobot(); - void Connect(std::string can_name) override; + bool Connect(std::string can_name) override; void EnableCommandedMode() override; diff --git a/include/ugv_sdk/mobile_robot/scout_robot.hpp b/include/ugv_sdk/mobile_robot/scout_robot.hpp index 155e710..ce77279 100644 --- a/include/ugv_sdk/mobile_robot/scout_robot.hpp +++ b/include/ugv_sdk/mobile_robot/scout_robot.hpp @@ -22,7 +22,7 @@ class ScoutRobot : public RobotCommonInterface, public ScoutInterface { bool is_mini_model = false); virtual ~ScoutRobot(); - void Connect(std::string can_name) override; + bool Connect(std::string can_name) override; void Connect(std::string uart_name, uint32_t baudrate) override; void EnableCommandedMode() override; diff --git a/sample/CMakeLists.txt b/sample/CMakeLists.txt deleted file mode 100644 index f3253eb..0000000 --- a/sample/CMakeLists.txt +++ /dev/null @@ -1,8 +0,0 @@ -cmake_minimum_required(VERSION 3.10.2) -project(sdk_sample) - -find_package(ugv_sdk REQUIRED) -find_package(Threads REQUIRED) - -add_executable(app_tracer_demo tracer_demo.cpp) -target_link_libraries(app_tracer_demo PRIVATE ugv_sdk Threads::Threads) \ No newline at end of file diff --git a/sample/tracer_demo.cpp b/sample/tracer_demo.cpp deleted file mode 100644 index 982ac23..0000000 --- a/sample/tracer_demo.cpp +++ /dev/null @@ -1,99 +0,0 @@ -/* - * demo_tracer_can.cpp - * - * Created on: Jun 12, 2019 05:03 - * Description: - * - * Copyright (c) 2019 Ruixiang Du (rdu) - */ - -#include "ugv_sdk/tracer_base.hpp" - -using namespace westonrobot; - -int main(int argc, char **argv) { - std::string device_name; - - if (argc == 2) { - device_name = {argv[1]}; - std::cout << "Specified CAN: " << device_name << std::endl; - } else { - std::cout << "Usage: app_tracer_demo " << std::endl - << "Example 1: ./app_tracer_demo can0" << std::endl; - return -1; - } - - TracerBaseV2 tracer; - tracer.Connect(device_name); - - tracer.EnableCommandedMode(); - // tracer.DisableTimeout(); - - // light control - std::cout << "Light: const off" << std::endl; - tracer.SetLightCommand({CONST_OFF, 0}); - // usleep(50000); - sleep(3); - std::cout << "Light: const on" << std::endl; - tracer.SetLightCommand({CONST_ON, 0}); - // usleep(50000); - sleep(3); - std::cout << "Light: breath" << std::endl; - tracer.SetLightCommand({BREATH, 0}); - // usleep(50000); - sleep(8); - std::cout << "Light: custom 90-80" << std::endl; - tracer.SetLightCommand({CUSTOM, 90}); - // usleep(50000); - sleep(3); - std::cout << "Light: diabled cmd control" << std::endl; - tracer.SetLightCommand(TracerLightCmd()); - - int count = 0; - while (true) { - // motion control - if (count < 5) { - std::cout << "Motor: 0.2, 0.0" << std::endl; - tracer.SetMotionCommand(0.2, 0.0); - } else if (count < 10) { - std::cout << "Motor: 0.8, 0.3" << std::endl; - tracer.SetMotionCommand(0.8, 0.3); - } else if (count < 15) { - std::cout << "Motor: 1.5, 0.5" << std::endl; - tracer.SetMotionCommand(1.5, 0.5); - } else if (count < 20) { - std::cout << "Motor: 1.0, 0.3" << std::endl; - tracer.SetMotionCommand(1.0, 0.3); - } else if (count < 25) { - std::cout << "Motor: 0.0, 0.0" << std::endl; - tracer.SetMotionCommand(0.0, 0.0); - } else if (count < 30) { - std::cout << "Motor: -0.5, -0.3" << std::endl; - tracer.SetMotionCommand(-0.5, -0.3); - } else if (count < 35) { - std::cout << "Motor: -1.0, -0.5" << std::endl; - tracer.SetMotionCommand(-1.0, -0.5); - } else if (count < 40) { - std::cout << "Motor: 0.0, 0.0," << std::endl; - tracer.SetMotionCommand(0.0, 0.0); - } - // tracer.SetMotionCommand(0.8, 0.8); - - auto state = tracer.GetTracerState(); - std::cout << "-------------------------------" << std::endl; - std::cout << "count: " << count << std::endl; - std::cout << "control mode: " << static_cast(state.system_state.control_mode) - << " , vehicle state: " << static_cast(state.system_state.vehicle_state) - << std::endl; - std::cout << "battery voltage: " << state.system_state.battery_voltage << std::endl; - std::cout << "velocity (linear, angular): " << state.motion_state.linear_velocity << ", " - << state.motion_state.angular_velocity << std::endl; - std::cout << "-------------------------------" << std::endl; - - // usleep(20000); - sleep(1); - ++count; - } - - return 0; -} \ No newline at end of file diff --git a/src/mobile_robot/bunker_robot.cpp b/src/mobile_robot/bunker_robot.cpp index 481cb9a..68836b1 100644 --- a/src/mobile_robot/bunker_robot.cpp +++ b/src/mobile_robot/bunker_robot.cpp @@ -25,7 +25,9 @@ BunkerRobot::~BunkerRobot() { void BunkerRobot::EnableCommandedMode() { robot_->EnableCommandedMode(); } -void BunkerRobot::Connect(std::string can_name) { robot_->Connect(can_name); } +bool BunkerRobot::Connect(std::string can_name) { + return robot_->Connect(can_name); +} void BunkerRobot::ResetRobotState() { robot_->ResetRobotState(); } diff --git a/src/mobile_robot/hunter_robot.cpp b/src/mobile_robot/hunter_robot.cpp index 36749c4..8626afe 100644 --- a/src/mobile_robot/hunter_robot.cpp +++ b/src/mobile_robot/hunter_robot.cpp @@ -25,7 +25,9 @@ HunterRobot::~HunterRobot() { void HunterRobot::EnableCommandedMode() { robot_->EnableCommandedMode(); } -void HunterRobot::Connect(std::string can_name) { robot_->Connect(can_name); } +bool HunterRobot::Connect(std::string can_name) { + return robot_->Connect(can_name); +} void HunterRobot::ResetRobotState() { robot_->ResetRobotState(); } diff --git a/src/mobile_robot/scout_robot.cpp b/src/mobile_robot/scout_robot.cpp index c8e9710..81e7016 100644 --- a/src/mobile_robot/scout_robot.cpp +++ b/src/mobile_robot/scout_robot.cpp @@ -33,7 +33,9 @@ ScoutRobot::~ScoutRobot() { void ScoutRobot::EnableCommandedMode() { robot_->EnableCommandedMode(); } -void ScoutRobot::Connect(std::string can_name) { robot_->Connect(can_name); } +bool ScoutRobot::Connect(std::string can_name) { + return robot_->Connect(can_name); +} void ScoutRobot::Connect(std::string uart_name, uint32_t baudrate) { // robot_->Connect(uart_name, baudrate);