uss debug
This commit is contained in:
parent
58c05f5563
commit
65d9734daf
@ -21,8 +21,8 @@ class UssDriver
|
||||
|
||||
struct UssData
|
||||
{
|
||||
uint8_t distances[8]; // 8路超声波距离数据 (cm)
|
||||
uint8_t distances_calib[8]; // 8路校准后距离数据 (cm)
|
||||
uint8_t distances[8]; // 8路超声波原始距离数据 (cm)
|
||||
uint16_t distances_calib[8]; // 8路校准后距离数据 (cm)
|
||||
bool valid;
|
||||
};
|
||||
|
||||
|
||||
@ -6,7 +6,6 @@
|
||||
// Priority: 0x18, PGN: 0xEC00 (60416), Device ID: 0x57 (87)
|
||||
constexpr uint32_t USS_CAN_ID = 0x18EC0057;
|
||||
constexpr uint32_t USS_CAN_MASK = 0xFFFFFFFF; // 精确匹配
|
||||
|
||||
UssDriver::UssDriver() : print_debug_(false), initialized_(false)
|
||||
{
|
||||
// 初始化校准偏移
|
||||
@ -42,7 +41,7 @@ bool UssDriver::init(const std::string& can_interface)
|
||||
// 设置CAN过滤器,只接收超声波的CAN数据
|
||||
struct can_filter filter;
|
||||
filter.can_id = USS_CAN_ID | CAN_EFF_FLAG;
|
||||
filter.can_mask = CAN_EFF_MASK | CAN_EFF_FLAG;
|
||||
filter.can_mask = USS_CAN_MASK;
|
||||
std::vector<struct can_filter> filters;
|
||||
filters.push_back(filter);
|
||||
|
||||
@ -92,7 +91,7 @@ void UssDriver::setCalibration(int index, int offset)
|
||||
// 更新校准后的数据
|
||||
std::lock_guard<std::mutex> lock(data_mutex_);
|
||||
int calib_distance = static_cast<int>(uss_data_.distances[index]) + offset;
|
||||
uss_data_.distances_calib[index] = static_cast<uint8_t>(std::max(0, std::min(255, calib_distance)));
|
||||
uss_data_.distances_calib[index] = static_cast<uint16_t>(std::max(0, calib_distance));
|
||||
}
|
||||
}
|
||||
|
||||
@ -107,7 +106,7 @@ void UssDriver::setAllCalibrations(const int offsets[8])
|
||||
for (int i = 0; i < 8; i++)
|
||||
{
|
||||
int calib_distance = static_cast<int>(uss_data_.distances[i]) + calibration_offsets_[i];
|
||||
uss_data_.distances_calib[i] = static_cast<uint8_t>(std::max(0, std::min(255, calib_distance)));
|
||||
uss_data_.distances_calib[i] = static_cast<uint16_t>(std::max(0, calib_distance));
|
||||
}
|
||||
}
|
||||
|
||||
@ -135,7 +134,7 @@ void UssDriver::processCanFrame(const CANFrame& frame)
|
||||
uss_data_.distances[i] = frame.data[i];
|
||||
// 计算校准后的数据
|
||||
int calib_distance = static_cast<int>(frame.data[i]) + calibration_offsets_[i];
|
||||
uss_data_.distances_calib[i] = static_cast<uint8_t>(std::max(0, std::min(255, calib_distance)));
|
||||
uss_data_.distances_calib[i] = static_cast<uint16_t>(std::max(0, calib_distance));
|
||||
}
|
||||
|
||||
uss_data_.valid = true;
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
#include <string>
|
||||
|
||||
#include "rclcpp/rclcpp.hpp"
|
||||
#include "std_msgs/msg/int8_multi_array.hpp"
|
||||
#include "std_msgs/msg/u_int16_multi_array.hpp"
|
||||
#include "uss.h"
|
||||
|
||||
class UssNode : public rclcpp::Node
|
||||
@ -43,7 +43,7 @@ class UssNode : public rclcpp::Node
|
||||
RCLCPP_INFO(this->get_logger(), "Config loaded successfully");
|
||||
|
||||
// 创建发布者
|
||||
uss_publisher_ = this->create_publisher<std_msgs::msg::Int8MultiArray>("USS", 10);
|
||||
uss_publisher_ = this->create_publisher<std_msgs::msg::UInt16MultiArray>("USS", 10);
|
||||
|
||||
// 创建定时器,定期发布数据
|
||||
timer_ = this->create_wall_timer(std::chrono::milliseconds(1000 / publish_rate),
|
||||
@ -57,7 +57,7 @@ class UssNode : public rclcpp::Node
|
||||
private:
|
||||
void timer_callback()
|
||||
{
|
||||
auto message = std_msgs::msg::Int8MultiArray();
|
||||
auto message = std_msgs::msg::UInt16MultiArray();
|
||||
const UssDriver::UssData& uss_data = uss_driver_.getUssData();
|
||||
|
||||
if (uss_data.valid)
|
||||
@ -65,35 +65,25 @@ class UssNode : public rclcpp::Node
|
||||
message.data.clear();
|
||||
message.data.resize(8);
|
||||
|
||||
message.data[0] = static_cast<int8_t>(uss_data.distances_calib[0]);
|
||||
message.data[1] = static_cast<int8_t>(uss_data.distances_calib[1]);
|
||||
|
||||
message.data[2] = static_cast<int8_t>(uss_data.distances_calib[2]);
|
||||
message.data[3] = static_cast<int8_t>(uss_data.distances_calib[3]);
|
||||
message.data[4] = static_cast<int8_t>(uss_data.distances_calib[4]);
|
||||
message.data[5] = static_cast<int8_t>(uss_data.distances_calib[5]);
|
||||
message.data[6] = static_cast<int8_t>(uss_data.distances_calib[6]);
|
||||
|
||||
message.data[7] = static_cast<int8_t>(uss_data.distances_calib[2]);
|
||||
message.data[0] = uss_data.distances_calib[0];
|
||||
message.data[1] = uss_data.distances_calib[1];
|
||||
message.data[2] = uss_data.distances_calib[2];
|
||||
message.data[3] = uss_data.distances_calib[3];
|
||||
message.data[4] = uss_data.distances_calib[4];
|
||||
message.data[5] = uss_data.distances_calib[5];
|
||||
message.data[6] = uss_data.distances_calib[6];
|
||||
message.data[7] = uss_data.distances_calib[7];
|
||||
|
||||
// 发布消息
|
||||
uss_publisher_->publish(message);
|
||||
|
||||
// 调试打印
|
||||
RCLCPP_INFO(
|
||||
this->get_logger(),
|
||||
"USS 1~4: %d %d %d %d cm",
|
||||
static_cast<int8_t>(uss_data.distances_calib[0]),
|
||||
static_cast<int8_t>(uss_data.distances_calib[1]),
|
||||
static_cast<int8_t>(uss_data.distances_calib[2]),
|
||||
static_cast<int8_t>(uss_data.distances_calib[3]));
|
||||
RCLCPP_INFO(
|
||||
this->get_logger(),
|
||||
"USS 5~8: %d %d %d %d cm",
|
||||
static_cast<int8_t>(uss_data.distances_calib[4]),
|
||||
static_cast<int8_t>(uss_data.distances_calib[5]),
|
||||
static_cast<int8_t>(uss_data.distances_calib[6]),
|
||||
static_cast<int8_t>(uss_data.distances_calib[7]));
|
||||
RCLCPP_INFO(this->get_logger(), "USS 1~4: %d %d %d %d cm", static_cast<int>(uss_data.distances_calib[0]),
|
||||
static_cast<int>(uss_data.distances_calib[1]), static_cast<int>(uss_data.distances_calib[2]),
|
||||
static_cast<int>(uss_data.distances_calib[3]));
|
||||
RCLCPP_INFO(this->get_logger(), "USS 5~8: %d %d %d %d cm", static_cast<int>(uss_data.distances_calib[4]),
|
||||
static_cast<int>(uss_data.distances_calib[5]), static_cast<int>(uss_data.distances_calib[6]),
|
||||
static_cast<int>(uss_data.distances_calib[7]));
|
||||
RCLCPP_INFO(this->get_logger(), "==========================");
|
||||
}
|
||||
else
|
||||
@ -104,7 +94,7 @@ class UssNode : public rclcpp::Node
|
||||
|
||||
UssDriver uss_driver_;
|
||||
rclcpp::TimerBase::SharedPtr timer_;
|
||||
rclcpp::Publisher<std_msgs::msg::Int8MultiArray>::SharedPtr uss_publisher_;
|
||||
rclcpp::Publisher<std_msgs::msg::UInt16MultiArray>::SharedPtr uss_publisher_;
|
||||
};
|
||||
|
||||
int main(int argc, char** argv)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user