From 63954ab945b46ccbed42a0702e25134f4bb5f2ad Mon Sep 17 00:00:00 2001 From: CaiXiang <939387484@qq.com> Date: Mon, 17 Nov 2025 09:00:30 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=9F=AF=E8=92=82=E6=96=AF?= =?UTF-8?q?=E6=8E=A7=E5=88=B6=E5=99=A8=E4=BE=9D=E8=B5=96=E5=BC=95=E5=85=A5?= =?UTF-8?q?bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .claude/settings.local.json | 4 ++- examples/curtis_path_tracking_demo.cpp | 45 +++++++++++--------------- include/agv_model.h | 6 ++++ 3 files changed, 28 insertions(+), 27 deletions(-) diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 346d5ac..1657742 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -8,7 +8,9 @@ "Bash(test -f:*)", "Bash(mkdir:*)", "Bash(chmod:*)", - "Bash(./scripts/archive_bug_fix.sh:*)" + "Bash(./scripts/archive_bug_fix.sh:*)", + "Bash(cmake --build:*)", + "Bash(cmake:*)" ], "deny": [], "ask": [] diff --git a/examples/curtis_path_tracking_demo.cpp b/examples/curtis_path_tracking_demo.cpp index 508788d..f851412 100644 --- a/examples/curtis_path_tracking_demo.cpp +++ b/examples/curtis_path_tracking_demo.cpp @@ -29,29 +29,29 @@ using namespace std; /** - * @brief 路径点结构 + * @brief 简单路径点结构(用于演示) */ -struct PathPoint { +struct SimplePathPoint { double x; double y; double targetSpeed; ///< 目标速度百分比 - PathPoint(double x_, double y_, double speed_ = 30.0) + SimplePathPoint(double x_, double y_, double speed_ = 30.0) : x(x_), y(y_), targetSpeed(speed_) {} }; /** * @brief 生成矩形路径 */ -vector generateRectanglePath() { - vector path; +vector generateRectanglePath() { + vector path; // 5m x 3m 矩形 - path.push_back(PathPoint(0.0, 0.0, 30.0)); // 起点 - path.push_back(PathPoint(5.0, 0.0, 30.0)); // 直行5米 - path.push_back(PathPoint(5.0, 3.0, 25.0)); // 右转前进3米 - path.push_back(PathPoint(0.0, 3.0, 25.0)); // 左转前进5米 - path.push_back(PathPoint(0.0, 0.0, 20.0)); // 返回起点 + path.push_back(SimplePathPoint(0.0, 0.0, 30.0)); // 起点 + path.push_back(SimplePathPoint(5.0, 0.0, 30.0)); // 直行5米 + path.push_back(SimplePathPoint(5.0, 3.0, 25.0)); // 右转前进3米 + path.push_back(SimplePathPoint(0.0, 3.0, 25.0)); // 左转前进5米 + path.push_back(SimplePathPoint(0.0, 0.0, 20.0)); // 返回起点 return path; } @@ -59,14 +59,14 @@ vector generateRectanglePath() { /** * @brief 生成圆形路径 */ -vector generateCirclePath(double radius = 3.0, int points = 36) { - vector path; +vector generateCirclePath(double radius = 3.0, int points = 36) { + vector path; for (int i = 0; i <= points; i++) { double angle = 2.0 * M_PI * i / points; double x = radius * cos(angle); double y = radius * sin(angle); - path.push_back(PathPoint(x, y, 25.0)); + path.push_back(SimplePathPoint(x, y, 25.0)); } return path; @@ -76,7 +76,7 @@ vector generateCirclePath(double radius = 3.0, int points = 36) { * @brief 执行路径跟踪 */ bool executePathTracking(CurtisMotorController& curtis, - const vector& path, + const vector& path, AGVModel& agv, PathTracker& tracker) { if (path.empty()) { @@ -124,12 +124,7 @@ bool executePathTracking(CurtisMotorController& curtis, } // 获取 AGV 当前状态(这里使用模拟数据,实际应用中应从传感器获取) - State currentState; - currentState.x = agv.getState().x; - currentState.y = agv.getState().y; - currentState.theta = agv.getState().theta; - currentState.v = status.motorSpeed / 100.0; // 模拟速度 - currentState.omega = 0.0; + AGVModel::State currentState = agv.getState(); // 计算到目标点的距离 double dx = targetX - currentState.x; @@ -173,7 +168,7 @@ bool executePathTracking(CurtisMotorController& curtis, } // 更新 AGV 模型(模拟) - ControlInput control; + AGVModel::Control control; control.v = actualSpeed / 100.0; control.delta = steerAngleDeg * M_PI / 180.0; agv.update(control, 0.015); // 15ms @@ -219,16 +214,14 @@ int main() { // 创建 AGV 模型(用于模拟) AGVModel agv; - State initialState; + AGVModel::State initialState; initialState.x = 0.0; initialState.y = 0.0; initialState.theta = 0.0; - initialState.v = 0.0; - initialState.omega = 0.0; agv.setState(initialState); // 创建路径跟踪器 - PathTracker tracker; + PathTracker tracker(agv); // ============ 2. 连接 ============ cout << "\n步骤 2: 连接到 Curtis 控制器..." << endl; @@ -248,7 +241,7 @@ int main() { int choice; cin >> choice; - vector path; + vector path; if (choice == 1) { path = generateRectanglePath(); cout << "已选择: 矩形路径" << endl; diff --git a/include/agv_model.h b/include/agv_model.h index acde427..dd4546a 100644 --- a/include/agv_model.h +++ b/include/agv_model.h @@ -79,10 +79,16 @@ public: double getMaxVelocity() const { return max_velocity_; } double getMaxSteeringAngle() const { return max_steering_angle_; } + // 状态管理 + void setState(const State& state) { state_ = state; } + const State& getState() const { return state_; } + void update(const Control& control, double dt) { state_ = update(state_, control, dt); } + private: double wheelbase_; // 轮距 (m) double max_velocity_; // 最大速度 (m/s) double max_steering_angle_; // 最大转向角 (rad) + State state_; // 当前状态 }; #endif // AGV_MODEL_H