|
@@ -231,7 +231,7 @@ void LidarScanController::processLaserScan(const LaserScanSharedPtr &input_msg)
|
|
|
// printf("debug %d\n", __LINE__);
|
|
// printf("debug %d\n", __LINE__);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-bool LidarScanController::processSegmentData(const LaserScanSharedPtr &msg,
|
|
|
|
|
|
|
+bool LidarScanController::processSegmentData(LaserScanSharedPtr msg,
|
|
|
int begin_index, int end_index)
|
|
int begin_index, int end_index)
|
|
|
{
|
|
{
|
|
|
// 转换到XY坐标系
|
|
// 转换到XY坐标系
|
|
@@ -409,6 +409,8 @@ void LidarScanController::procData(RechargeResult &result)
|
|
|
// 计算交点
|
|
// 计算交点
|
|
|
double x = (b2 - b1) / (k1 - k2);
|
|
double x = (b2 - b1) / (k1 - k2);
|
|
|
double y = k1 * x + b1;
|
|
double y = k1 * x + b1;
|
|
|
|
|
+ x = std::abs(x);
|
|
|
|
|
+ y = -1.0 * y;
|
|
|
|
|
|
|
|
// 更新中间点
|
|
// 更新中间点
|
|
|
result.middle_point = IndexPoint(x, y, 0);
|
|
result.middle_point = IndexPoint(x, y, 0);
|
|
@@ -487,7 +489,7 @@ void LidarScanController::controlRechargeMotion(const RechargeResult &result)
|
|
|
RCLCPP_DEBUG(node_->get_logger(), "控制参数 - dx: %.4f, dy: %.4f, k: %.4f", dx, dy, k);
|
|
RCLCPP_DEBUG(node_->get_logger(), "控制参数 - dx: %.4f, dy: %.4f, k: %.4f", dx, dy, k);
|
|
|
|
|
|
|
|
// 调整 dy
|
|
// 调整 dy
|
|
|
- dy = dy - 0.10;
|
|
|
|
|
|
|
+ dy = dy - param_.dy_diff;
|
|
|
RCLCPP_DEBUG(node_->get_logger(), "调整后 dy: %.4f", dy);
|
|
RCLCPP_DEBUG(node_->get_logger(), "调整后 dy: %.4f", dy);
|
|
|
|
|
|
|
|
// 计算偏航角误差
|
|
// 计算偏航角误差
|
|
@@ -696,7 +698,7 @@ void LidarScanController::controlRechargeMotion(const RechargeResult &result)
|
|
|
stopNavigation();
|
|
stopNavigation();
|
|
|
|
|
|
|
|
// 模拟检测到充电电压
|
|
// 模拟检测到充电电压
|
|
|
- setChargingVoltage(true);
|
|
|
|
|
|
|
+ // setChargingVoltage(true);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -793,7 +795,8 @@ void LidarScanController::filterScanModify2(LaserScanSharedPtr msg)
|
|
|
void LidarScanController::filterScanModify3(LaserScanSharedPtr msg)
|
|
void LidarScanController::filterScanModify3(LaserScanSharedPtr msg)
|
|
|
{
|
|
{
|
|
|
// 过滤强度
|
|
// 过滤强度
|
|
|
- for (size_t i = 0; i < msg->ranges.size(); i++)
|
|
|
|
|
|
|
+ int max_index = static_cast<int>(std::min(msg->ranges.size(), msg->intensities.size()));
|
|
|
|
|
+ for (size_t i = 0; i < max_index; i++)
|
|
|
{
|
|
{
|
|
|
// RCLCPP_WARN(node_->get_logger(), "索引[%zu]: 原始距离=%.3f, 原始强度=%.2f",
|
|
// RCLCPP_WARN(node_->get_logger(), "索引[%zu]: 原始距离=%.3f, 原始强度=%.2f",
|
|
|
// i, msg->ranges[i], msg->intensities[i]);
|
|
// i, msg->ranges[i], msg->intensities[i]);
|
|
@@ -1299,34 +1302,36 @@ void LidarScanController::publishFilteredScan(
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
LidarScanController::LaserScanSharedPtr LidarScanController::resetLaserData(
|
|
LidarScanController::LaserScanSharedPtr LidarScanController::resetLaserData(
|
|
|
- const LaserScanSharedPtr & input_msg,
|
|
|
|
|
|
|
+ LaserScanSharedPtr msg,
|
|
|
int b_index, int e_index)
|
|
int b_index, int e_index)
|
|
|
{
|
|
{
|
|
|
- LaserScanSharedPtr output_msg = std::make_shared<sensor_msgs::msg::LaserScan>();
|
|
|
|
|
- //拷貝input_msg 到 output_msg;
|
|
|
|
|
- output_msg->header = input_msg->header;
|
|
|
|
|
- output_msg->angle_min = input_msg->angle_min;
|
|
|
|
|
- output_msg->angle_max = input_msg->angle_max;
|
|
|
|
|
- output_msg->angle_increment = input_msg->angle_increment;
|
|
|
|
|
- output_msg->time_increment = input_msg->time_increment;
|
|
|
|
|
- output_msg->scan_time = input_msg->scan_time;
|
|
|
|
|
- output_msg->range_min = input_msg->range_min;
|
|
|
|
|
- output_msg->range_max = input_msg->range_max;
|
|
|
|
|
- output_msg->ranges = input_msg->ranges;
|
|
|
|
|
- output_msg->intensities = input_msg->intensities;
|
|
|
|
|
|
|
+ // LaserScanSharedPtr output_msg = std::make_shared<sensor_msgs::msg::LaserScan>();
|
|
|
|
|
+ // //拷貝input_msg 到 output_msg;
|
|
|
|
|
+ // output_msg->header = input_msg->header;
|
|
|
|
|
+ // output_msg->angle_min = input_msg->angle_min;
|
|
|
|
|
+ // output_msg->angle_max = input_msg->angle_max;
|
|
|
|
|
+ // output_msg->angle_increment = input_msg->angle_increment;
|
|
|
|
|
+ // output_msg->time_increment = input_msg->time_increment;
|
|
|
|
|
+ // output_msg->scan_time = input_msg->scan_time;
|
|
|
|
|
+ // output_msg->range_min = input_msg->range_min;
|
|
|
|
|
+ // output_msg->range_max = input_msg->range_max;
|
|
|
|
|
+ // output_msg->ranges = input_msg->ranges;
|
|
|
|
|
+ // output_msg->intensities = input_msg->intensities;
|
|
|
|
|
|
|
|
|
|
|
|
|
- auto& msg = output_msg;
|
|
|
|
|
|
|
+ // auto& msg = output_msg;
|
|
|
std::vector<float> filtered_ranges = msg->ranges;
|
|
std::vector<float> filtered_ranges = msg->ranges;
|
|
|
std::vector<float> intensities = msg->intensities;
|
|
std::vector<float> intensities = msg->intensities;
|
|
|
|
|
|
|
|
- for (int i = 0; i < b_index; i++)
|
|
|
|
|
|
|
+ int max_index = static_cast<int>(std::min(msg->ranges.size(), msg->intensities.size()));
|
|
|
|
|
+
|
|
|
|
|
+ for (int i = 0; i < b_index && i < max_index; i++)
|
|
|
{
|
|
{
|
|
|
filtered_ranges[i] = std::numeric_limits<float>::infinity();
|
|
filtered_ranges[i] = std::numeric_limits<float>::infinity();
|
|
|
intensities[i] = 0.0;
|
|
intensities[i] = 0.0;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- for (int i = e_index; i < static_cast<int>(msg->ranges.size()); i++)
|
|
|
|
|
|
|
+ for (int i = e_index; i < max_index; i++)
|
|
|
{
|
|
{
|
|
|
filtered_ranges[i] = std::numeric_limits<float>::infinity();
|
|
filtered_ranges[i] = std::numeric_limits<float>::infinity();
|
|
|
intensities[i] = 0.0;
|
|
intensities[i] = 0.0;
|