diff --git a/src/mc/include/mc/can_struct.h b/src/mc/include/mc/can_struct.h index 059c05c..ec7ecbb 100644 --- a/src/mc/include/mc/can_struct.h +++ b/src/mc/include/mc/can_struct.h @@ -4,6 +4,7 @@ #include #include #include +#include #include "can_driver.h" #pragma pack(push, 1) // 禁止结构体补齐,确保8字节紧密排列 @@ -24,7 +25,7 @@ union can_MCU_cmd_union // Byte 3: 开关信号状态 struct { - uint8_t cmd_status : 2; // BIT0-1: 命令状态(0空挡,1前进,2后退,3保留) + uint8_t cmd_status : 2; // BIT0-1: 命令状态(0空挡,1后退,2前进,3保留) uint8_t brake : 1; // BIT2: 刹车开关(1=开) uint8_t reserved_bit3 : 1; // BIT3: 保留 uint8_t reserved_bits47 : 4; // BIT4-7: 保留 @@ -84,7 +85,7 @@ struct can_MCU_cmd data.fields.can_enabled = en ? 1 : 0; } - // 设置档位 (0空挡,1前进,2后退,3保留) + // 设置档位 (0空挡,1后退,2前进,3保留) void setGear(uint8_t gear) { data.fields.switch_status.cmd_status = gear & 0x03; // 只保留低2位 @@ -113,6 +114,14 @@ struct can_MCU_cmd frame.dlc = 8; frame.ext = EXT_FLAG; frame.rtr = RTR_FLAG; + + std::cout << "MCU frame : "; + for (int i = 0; i < 8; ++i) + { + printf("0X%x ", frame.data[i]); + } + printf("\n"); + return frame; } }; diff --git a/src/mc/src/mc.cpp b/src/mc/src/mc.cpp index a62bbc2..49ae59c 100644 --- a/src/mc/src/mc.cpp +++ b/src/mc/src/mc.cpp @@ -15,27 +15,27 @@ CANDriver canctl; void mcCtrlCallback(const sweeperMsg::McCtrl::SharedPtr msg) { - std::cout << "\n 刹车: " << (msg->brake ? "已刹车" : "未刹车") - << "\n 挡位: "; - switch (msg->gear) - { - case 0: - std::cout << "空挡"; - break; - case 1: - std::cout << "前进挡"; - break; - case 2: - std::cout << "后退挡"; - break; - default: - std::cout << "未知挡位(" << static_cast(msg->gear) << ")"; - break; - } - std::cout << "\n 行走电机转速: " << static_cast(msg->rpm) << " RPM" - << "\n 轮端转向角度: " << msg->angle << "°" - << "\n 清扫状态: " << (msg->sweep ? "正在清扫" : "未清扫") - << std::endl; + // std::cout << "\n 刹车: " << (msg->brake ? "已刹车" : "未刹车") + // << "\n 挡位: "; + // switch (msg->gear) + // { + // case 0: + // std::cout << "空挡"; + // break; + // case 2: + // std::cout << "前进挡"; + // break; + // case 1: + // std::cout << "后退挡"; + // break; + // default: + // std::cout << "未知挡位(" << static_cast(msg->gear) << ")"; + // break; + // } + // std::cout << "\n 行走电机转速: " << static_cast(msg->rpm) << " RPM" + // << "\n 轮端转向角度: " << msg->angle << "°" + // << "\n 清扫状态: " << (msg->sweep ? "正在清扫" : "未清扫") + // << std::endl; control_cache.update(*msg); } diff --git a/src/radio_ctrl/src/radio_ctrl.cpp b/src/radio_ctrl/src/radio_ctrl.cpp index a977054..7513372 100644 --- a/src/radio_ctrl/src/radio_ctrl.cpp +++ b/src/radio_ctrl/src/radio_ctrl.cpp @@ -86,7 +86,7 @@ private: // 挡位选择 if (gear == 192) { - msg.gear = 1; // D挡 + msg.gear = 2; // D挡 } else if (gear == 992) { @@ -94,7 +94,7 @@ private: } else if (gear == 1792) { - msg.gear = 2; // R挡 + msg.gear = 1; // R挡 } // 油门 / 刹车逻辑 @@ -148,10 +148,10 @@ private: case 0: std::cout << "空挡"; break; - case 1: + case 2: std::cout << "前进挡"; break; - case 2: + case 1: std::cout << "后退挡"; break; default: diff --git a/src/sweeper_interfaces/msg/McCtrl.msg b/src/sweeper_interfaces/msg/McCtrl.msg index c539cf8..df4d98d 100644 --- a/src/sweeper_interfaces/msg/McCtrl.msg +++ b/src/sweeper_interfaces/msg/McCtrl.msg @@ -2,7 +2,7 @@ #mcu部分 uint8 brake #电磁刹指令 0开;1关 -uint8 gear #挡位 0空挡;1前进;2后退;3保留 +uint8 gear #挡位 0空挡;1后退;2前进;3保留 uint16 rpm #转速 量程:0-6000,对应实际电机转速0-6000rpm #eps部分