Files
lzwc-terminal-unitreeGo2/include/custom_robot.hpp
Sucan126 4a06204645 feat(trajectory): Implement dynamic trajectory control in CustomRobot
- Added methods for trajectory control: trajControl, startTraj, and stopTraj.
- Integrated trajectory control into command processing for starting and stopping dynamic trajectories.
- Introduced a recurrent thread for continuous trajectory updates at a frequency of 50Hz.
- Initialized trajectory control state management with atomic flags.
2025-09-23 18:55:31 +08:00

72 lines
2.4 KiB
C++

#pragma once
#include "controller.hpp"
#include "config.hpp"
#include "logger.hpp"
#include "mqtt.hpp"
#include "navigation.hpp"
#include "mqtt_client.hpp"
#include "recharge.hpp"
// #include "low_controller.hpp"
#include <memory>
#include <atomic>
#include <string>
#include <vector>
#include <nlohmann/json.hpp>
#include <unitree/robot/go2/robot_state/robot_state_client.hpp>
#include <unitree/common/thread/recurrent_thread.hpp>
namespace custom {
class CustomRobot {
public:
explicit CustomRobot();
~CustomRobot();
bool initialize();
bool start();
Controller* getController() const { return controller_.get(); }
Navigation* getNavigation() const { return navigation_.get(); }
bool GetServiceList(std::vector<unitree::robot::go2::ServiceState>& serviceList);
bool SwitchService(const std::string& serviceName, bool enable);
bool SetReportFreq(int32_t interval, int32_t duration);
bool initializeMqtt();
void onMqttMessage(const std::string& topic, const std::string& payload);
void onMqttConnection(bool connected);
void processCmd(const nlohmann::json& message);
bool processOacCmd(const std::string& cmd, const nlohmann::json& message);
bool processSportCmd(const std::string& cmd, const nlohmann::json& message);
bool processRscCmd(const std::string& cmd, const nlohmann::json& message);
bool processNavCmd(const std::string& cmd, const nlohmann::json& message);
bool processMscCmd(const std::string& cmd, const nlohmann::json& message);
bool processLowCmd(const std::string& cmd, const nlohmann::json& message);
bool processRechargeCmd(const std::string& cmd, const nlohmann::json& message);
void printServiceList(const std::vector<unitree::robot::go2::ServiceState>& serviceList, int filterStatus = -1);
void trajControl();
bool startTraj();
void stopTraj();
private:
std::string generateRandomClientId() const;
std::unique_ptr<Controller> controller_;
// std::unique_ptr<LowController> low_controller_;
std::unique_ptr<Navigation> navigation_;
std::unique_ptr<unitree::robot::go2::RobotStateClient> rsc_;
std::unique_ptr<MqttClient> mqttClient_;
std::unique_ptr<Recharge> recharge_;
CustomConfig config_;
std::atomic<bool> running_;
std::atomic<bool> initialized_;
unitree::common::ThreadPtr traj_th_;
std::atomic<bool> traj_running_;
};
} // namespace custom