show the front line

本文介绍了一种使用cat、head、tail及sed命令组合来查看文件指定行数的方法,具体为显示文件的前10行或者第5到第10行的内容。

cat filename | head -n 10

or tail

 

sed -n '5,10p' filename :show 5-10 lines

“#include "wall_detection.h" // 全局变量定义 tf2_ros::Buffer* tfBuffer = nullptr; ros::Publisher pointcloud_pub; ros::Publisher lines_pub; ros::Publisher normals_pub; ros::Publisher nearest_point_pub; ros::Publisher tf_points_pub; ros::Publisher min_distance_pub; ros::Publisher nearest_distance_pub; //最近距离 // ros::Publisher left_front_nearest_distance_pub; // 左前侧垂直距离 ros::Publisher right_front_nearest_distance_pub; // 右前侧垂直距离 ros::Publisher left_back_nearest_distance_pub; // 左后侧垂直距离 ros::Publisher right_back_nearest_distance_pub; // 右后侧垂直距离 ros::Publisher foot_points_pub;//垂足 // bool isLeftWall(const DetectedLine& wall) { // 计算墙面中点Y坐标,大于0视为左侧墙面 return (wall.start.y + wall.end.y) / 2.0 > 0; } geometry_msgs::Point left_front_ref, left_back_ref; geometry_msgs::Point right_front_ref, right_back_ref; std::string choose_wall ; bool getPointParameters(ros::NodeHandle& nh) { // 为每个点的每个分量设置默认值 double left_front_default_x = 0.0, left_front_default_y = 0.0, left_front_default_z = 0.0; double left_back_default_x = 0.0, left_back_default_y = 0.0, left_back_default_z = 0.0; double right_front_default_x = 0.0, right_front_default_y = 0.0, right_front_default_z = 0.0; double right_back_default_x = 0.0, right_back_default_y = 0.0, right_back_default_z = 0.0; std::string inital_choose = "all"; // 获取左前点参数 nh.param<double>("left_front_ref_x", left_front_ref.x, left_front_default_x); nh.param<double>("left_front_ref_y", left_front_ref.y, left_front_default_y); nh.param<double>("left_front_ref_z", left_front_ref.z, left_front_default_z); // 获取左后点参数 nh.param<double>("left_back_ref_x", left_back_ref.x, left_back_default_x); nh.param<double>("left_back_ref_y", left_back_ref.y, left_back_default_y); nh.param<double>("left_back_ref_z", left_back_ref.z, left_back_default_z); // 获取右前点参数 nh.param<double>("right_front_ref_x", right_front_ref.x, right_front_default_x); nh.param<double>("right_front_ref_y", right_front_ref.y, right_front_default_y); nh.param<double>("right_front_ref_z", right_front_ref.z, right_front_default_z); // 获取右后点参数 nh.param<double>("right_back_ref_x", right_back_ref.x, right_back_default_x); nh.param<double>("right_back_ref_y", right_back_ref.y, right_back_default_y); nh.param<double>("right_back_ref_z", right_back_ref.z, right_back_default_z); nh.param<std::string>("choose_wall",choose_wall, "inital_choose"); // 打印获取的值 ROS_INFO("Left Front Ref: (%.2f, %.2f, %.2f)", left_front_ref.x, left_front_ref.y, left_front_ref.z); ROS_INFO("Left Back Ref: (%.2f, %.2f, %.2f)", left_back_ref.x, left_back_ref.y, left_back_ref.z); ROS_INFO("Right Front Ref: (%.2f, %.2f, %.2f)", right_front_ref.x, right_front_ref.y, right_front_ref.z); ROS_INFO("Right Back Ref: (%.2f, %.2f, %.2f)", right_back_ref.x, right_back_ref.y, right_back_ref.z); ROS_INFO("Choose_wall_type: %s", choose_wall.c_str()); return true; } void setupStaticTFs() { static tf2_ros::StaticTransformBroadcaster static_broadcaster; // 位于激光雷达左前方的tf坐标 geometry_msgs::TransformStamped left_tf; //left_tf.header.stamp = ros::Time::now(); left_tf.header.stamp = ros::Time(0); left_tf.header.frame_id = "base_footprint"; left_tf.child_frame_id = "laser_left_front"; left_tf.transform.translation.x = left_front_ref.x; left_tf.transform.translation.y = left_front_ref.y; left_tf.transform.translation.z = left_front_ref.z; left_tf.transform.rotation.x = 0.0; left_tf.transform.rotation.y = 0.0; left_tf.transform.rotation.z = 0.0; left_tf.transform.rotation.w = 1.0; // 位于激光雷达右前方的tf坐标 geometry_msgs::TransformStamped right_tf; //right_tf.header.stamp = ros::Time::now(); right_tf.header.stamp = ros::Time(0); right_tf.header.frame_id = "base_footprint"; right_tf.child_frame_id = "laser_right_front"; right_tf.transform.translation.x = right_front_ref.x; right_tf.transform.translation.y = right_front_ref.y; right_tf.transform.translation.z = right_front_ref.z; right_tf.transform.rotation.x = 0.0; right_tf.transform.rotation.y = 0.0; right_tf.transform.rotation.z = 0.0; right_tf.transform.rotation.w = 1.0; //左后方TF坐标 geometry_msgs::TransformStamped left_back_tf; //left_back_tf.header.stamp = ros::Time::now(); left_back_tf.header.stamp = ros::Time(0); left_back_tf.header.frame_id = "base_footprint"; left_back_tf.child_frame_id = "laser_left_back"; left_back_tf.transform.translation.x = left_back_ref.x; left_back_tf.transform.translation.y = left_back_ref.y; left_back_tf.transform.translation.z = left_back_ref.z; left_back_tf.transform.rotation.x = 0.0; left_back_tf.transform.rotation.y = 0.0; left_back_tf.transform.rotation.z = 0.0; left_back_tf.transform.rotation.w = 1.0; // 右后方TF坐标 geometry_msgs::TransformStamped right_back_tf; //right_back_tf.header.stamp = ros::Time::now(); right_back_tf.header.stamp = ros::Time(0); right_back_tf.header.frame_id = "base_footprint"; right_back_tf.child_frame_id = "laser_right_back"; right_back_tf.transform.translation.x = right_back_ref.x; right_back_tf.transform.translation.y = right_back_ref.y; right_back_tf.transform.translation.z = right_back_ref.z; right_back_tf.transform.rotation.x = 0.0; right_back_tf.transform.rotation.y = 0.0; right_back_tf.transform.rotation.z = 0.0; right_back_tf.transform.rotation.w = 1.0; static_broadcaster.sendTransform(left_tf); static_broadcaster.sendTransform(right_tf); static_broadcaster.sendTransform(left_back_tf); static_broadcaster.sendTransform(right_back_tf); } double pointToLineDistance(const geometry_msgs::Point& point, const geometry_msgs::Point& line_start, const geometry_msgs::Point& line_end) { Eigen::Vector3f pt(point.x, point.y, point.z); Eigen::Vector3f line_vec(line_end.x - line_start.x, line_end.y - line_start.y, line_end.z - line_start.z); Eigen::Vector3f pt_vec(pt.x() - line_start.x, pt.y() - line_start.y, pt.z() - line_start.z); double line_length = line_vec.norm(); if (line_length < 1e-6) { return pt_vec.norm(); } Eigen::Vector3f normalized_line = line_vec / line_length; double projection = pt_vec.dot(normalized_line); // 限制投影在直线范围内 projection = std::max(0.0, std::min(line_length, projection)); Eigen::Vector3f closest_point = Eigen::Vector3f(line_start.x, line_start.y, line_start.z) + projection * normalized_line; return (pt - closest_point).norm(); } // 计算点到直线的垂足点 geometry_msgs::Point pointToLineProjection(const geometry_msgs::Point& point, const geometry_msgs::Point& line_start, const geometry_msgs::Point& line_end) { Eigen::Vector3f pt(point.x, point.y, point.z); Eigen::Vector3f line_vec(line_end.x - line_start.x, line_end.y - line_start.y, line_end.z - line_start.z); Eigen::Vector3f pt_vec(pt.x() - line_start.x, pt.y() - line_start.y, pt.z() - line_start.z); double line_length = line_vec.norm(); if (line_length < 1e-6) { return line_start; // 如果直线长度为零,返回起点 } Eigen::Vector3f normalized_line = line_vec / line_length; double projection = pt_vec.dot(normalized_line); // 限制投影在直线范围内 projection = std::max(0.0, std::min(line_length, projection)); Eigen::Vector3f closest_point = Eigen::Vector3f(line_start.x, line_start.y, line_start.z) + projection * normalized_line; geometry_msgs::Point foot_point; foot_point.x = closest_point.x(); foot_point.y = closest_point.y(); foot_point.z = closest_point.z(); return foot_point; } void publishDetectedLines(const std::vector<DetectedLine>& lines, const std::string& frame_id) { visualization_msgs::Marker line_marker; line_marker.header.frame_id = frame_id; line_marker.header.stamp = ros::Time::now(); line_marker.ns = "detected_line"; line_marker.id = 0; line_marker.type = visualization_msgs::Marker::LINE_LIST; line_marker.pose.orientation.w = 1.0; line_marker.scale.x = 0.15; line_marker.color.r = 0.0; line_marker.color.g = 0.0; line_marker.color.b = 1.0; line_marker.color.a = 1.0; for (const auto& line : lines) { geometry_msgs::Point p1, p2; p1.x = line.start.x; p1.y = line.start.y; p1.z = line.start.z; p2.x = line.end.x; p2.y = line.end.y; p2.z = line.end.z; line_marker.points.push_back(p1); line_marker.points.push_back(p2); } lines_pub.publish(line_marker); visualization_msgs::MarkerArray normal_markers; int id = 0; for (const auto& line : lines) { visualization_msgs::Marker normal_marker; normal_marker.header.frame_id = frame_id; normal_marker.header.stamp = ros::Time::now(); normal_marker.ns = "normals"; normal_marker.id = id++; normal_marker.type = visualization_msgs::Marker::ARROW; normal_marker.action = visualization_msgs::Marker::ADD; normal_marker.pose.orientation.w = 1.0; normal_marker.scale.x = 0.02; normal_marker.scale.y = 0.04; normal_marker.scale.z = 0.0; normal_marker.color.r = 1.0; normal_marker.color.g = 0.0; normal_marker.color.b = 0.0; normal_marker.color.a = 1.0; geometry_msgs::Point mid_point; mid_point.x = (line.start.x + line.end.x) / 2.0; mid_point.y = (line.start.y + line.end.y) / 2.0; mid_point.z = (line.start.z + line.end.z) / 2.0; geometry_msgs::Point normal_end; normal_end.x = mid_point.x + line.normal.normal_x * 0.5; normal_end.y = mid_point.y + line.normal.normal_y * 0.5; normal_end.z = mid_point.z + line.normal.normal_z * 0.5; normal_marker.points.push_back(mid_point); normal_marker.points.push_back(normal_end); normal_markers.markers.push_back(normal_marker); } normals_pub.publish(normal_markers); } void publishNearestPointMarker(const geometry_msgs::Point& point,float distance,const std::string& frame_id, const std::string& ref_name) { visualization_msgs::Marker marker; marker.header.frame_id = frame_id; marker.header.stamp = ros::Time::now(); marker.ns = "nearest_point" + ref_name; // marker.id = 0; marker.type = visualization_msgs::Marker::SPHERE; marker.action = visualization_msgs::Marker::ADD; marker.pose.position = point; marker.pose.orientation.w = 1.0; marker.scale.x = 0.15; marker.scale.y = 0.15; marker.scale.z = 0.15; marker.color.r = 1.0; marker.color.g = 0.0; marker.color.b = 0.0; marker.color.a = 1.0; marker.lifetime = ros::Duration(0.1); nearest_point_pub.publish(marker); //std_msgs::Float64 dist; //dist.data =(point.y < 0 ? -1.0 : 1.0) *(std::fabs(point.y) - 0.12); //dist.data = std::fabs(point.y); //nearest_distance_pub.publish(dist); //最近距离 std_msgs::Float64 dist_msg; if (ref_name == "left_front") { dist_msg.data = distance; left_front_nearest_distance_pub.publish(dist_msg); } else if (ref_name == "left_back") { dist_msg.data = distance; left_back_nearest_distance_pub.publish(dist_msg); } else if (ref_name == "right_front") { dist_msg.data = distance; right_front_nearest_distance_pub.publish(dist_msg); } else { dist_msg.data = distance; right_back_nearest_distance_pub.publish(dist_msg); } // } /***************************************************************/ void publishFootPointMarker(const geometry_msgs::Point& left_front_foot, //垂足标记 const geometry_msgs::Point& left_back_foot, //垂足标记 const geometry_msgs::Point& right_front_foot, const geometry_msgs::Point& right_back_foot, const std::string& frame_id) { visualization_msgs::Marker marker; marker.header.frame_id = frame_id; marker.header.stamp = ros::Time::now(); marker.ns = "foot_points"; marker.id = 0; marker.type = visualization_msgs::Marker::POINTS; marker.action = visualization_msgs::Marker::ADD; marker.scale.x = 0.1; // 点的大小 marker.scale.y = 0.1; marker.color.a = 1.0; // 不透明度 // 添加左侧垂足点 - 蓝色 marker.points.push_back(left_front_foot); std_msgs::ColorRGBA color; color.r = 0.0; color.g = 0.0; color.b = 1.0; color.a = 1.0; marker.colors.push_back(color); // 添加右侧垂足点 - 绿色 marker.points.push_back(right_front_foot); color.r = 0.0; color.g = 1.0; color.b = 0.0; color.a = 1.0; marker.colors.push_back(color); // 添加左侧垂足点 - 蓝色 marker.points.push_back(left_back_foot); color.r = 0.0; color.g = 1.0; color.b = 1.0; color.a = 1.0; marker.colors.push_back(color); // 添加右侧垂足点 - 绿色 marker.points.push_back(right_back_foot); color.r = 1.0; color.g = 1.0; color.b = 0.0; color.a = 1.0; marker.colors.push_back(color); foot_points_pub.publish(marker); } /*******************************************************************/ void publishTFPoints(const geometry_msgs::Point& left_front_point, const geometry_msgs::Point& left_back_point, const geometry_msgs::Point& right_front_point, const geometry_msgs::Point& right_back_point, const std::string& frame_id) { visualization_msgs::Marker marker; marker.header.frame_id = frame_id; marker.header.stamp = ros::Time::now(); marker.ns = "tf_point"; marker.id = 0; marker.type = visualization_msgs::Marker::POINTS; marker.action = visualization_msgs::Marker::ADD; marker.scale.x = 0.15; marker.scale.y = 0.15; marker.color.a = 1.0; // 左侧点 - 蓝色 geometry_msgs::Point p; p = left_front_point; marker.points.push_back(p); std_msgs::ColorRGBA c; c.r = 0.0; c.g = 0.0; c.b = 1.0; c.a = 1.0; marker.colors.push_back(c); // 右侧点 - 绿色 p = right_front_point; marker.points.push_back(p); c.r = 0.0; c.g = 1.0; c.b = 0.0; c.a = 1.0; marker.colors.push_back(c); // 左侧点 - 蓝色 p = left_back_point; marker.points.push_back(p); c.r = 0.0; c.g = 1.0; c.b = 1.0; c.a = 1.0; marker.colors.push_back(c); // 右侧点 - 绿色 p = right_back_point; marker.points.push_back(p); c.r = 1.0; c.g = 1.0; c.b = 0.0; c.a = 1.0; marker.colors.push_back(c); tf_points_pub.publish(marker); } void publishDistanceInfo(const std::string& frame_id, double left_front_dist, double left_back_dist, double right_front_dist, double right_back_dist, const geometry_msgs::Point& wall_point) { visualization_msgs::Marker marker; marker.header.frame_id = frame_id; marker.header.stamp = ros::Time::now(); marker.ns = "distance_info"; marker.id = 0; marker.type = visualization_msgs::Marker::TEXT_VIEW_FACING; marker.action = visualization_msgs::Marker::ADD; marker.pose.position = wall_point; marker.pose.position.z += 0.5; // 在墙上点上方显示 marker.pose.orientation.w = 1.0; marker.scale.z = 0.2; // 文本大小 marker.color.r = 1.0; marker.color.g = 1.0; marker.color.b = 0.0; marker.color.a = 1.0; std::stringstream ss; ss << std::fixed << std::setprecision(2); ss << "Left_front_tf: " << left_front_dist << "m\n"; ss << "Left_back_tf: " << left_back_dist << "m\n"; ss << "Right_front_tf: " << right_front_dist << "m\n"; ss << "Right_back_tf: " << right_back_dist << "m\n"; if (left_front_dist < right_front_dist && left_back_dist < right_back_dist ) { ss << "Left is closer"; } else if (right_front_dist < left_front_dist && right_back_dist < left_back_dist ) { ss << "Right is closer"; } else { ss << "Equal distance"; } marker.text = ss.str(); min_distance_pub.publish(marker); } float min_four(float a ,float b , float c , float d ) { return std::min({a, b, c, d}); } void LidarCallback(const sensor_msgs::LaserScan::ConstPtr& msg) { std::unordered_map<int, PointData> point_data_map; PointCloudT::Ptr cloud(new PointCloudT); cloud->header.frame_id = msg->header.frame_id; cloud->height = 1; cloud->is_dense = false; float min_distance = std::numeric_limits<float>::max(); int min_index = -1; int point_count = 0; const float min_angle1 = 30 * M_PI/180.0; const float max_angle1 = 150* M_PI/180.0; const float min_angle2 = -150 * M_PI/180.0; const float max_angle2 = -30 * M_PI/180.0; // 为参考点初始化最小距离 float left_front_min_distance = std::numeric_limits<float>::max(); int left_front_min_index = -1; geometry_msgs::Point left_front_nearest_point; float left_back_min_distance = std::numeric_limits<float>::max(); int left_back_min_index = -1; geometry_msgs::Point left_back_nearest_point; // 为参考点初始化最小距离 float right_front_min_distance = std::numeric_limits<float>::max(); int right_front_min_index = -1; geometry_msgs::Point right_front_nearest_point; float right_back_min_distance = std::numeric_limits<float>::max(); int right_back_min_index = -1; geometry_msgs::Point right_back_nearest_point; // 寻找最近点 for (size_t i = 0; i < msg->ranges.size(); ++i) { const float range = msg->ranges[i]; if (std::isnan(range)) continue; if (range < msg->range_min || range > msg->range_max) continue; const float angle = msg -> angle_min + i * msg -> angle_increment; //创建屏蔽条件检测 bool in_blocked_zone = true; float normalized_angle = angle; const float x = range * cos(angle); const float y = range * sin(angle); if (choose_wall == "left") { // 左侧 if (angle >= min_angle1 && angle <= max_angle1) { // if ( x > left_front_ref.x || x < left_back_ref.x) // { // in_blocked_zone= false; // } in_blocked_zone= false; } } else if (choose_wall == "right") { // 右侧 if (angle >= min_angle2 && angle <= max_angle2) { // if ( x > right_front_ref.x || x < right_back_ref.x) // { // in_blocked_zone= false; // } in_blocked_zone= false; } } else { if (angle >= min_angle1 && angle <= max_angle1) { // if ( x > left_front_ref.x || x < left_back_ref.x) // { // in_blocked_zone= false; // } in_blocked_zone= false; } if (angle >= min_angle2 && angle <= max_angle2) { // if ( x > right_front_ref.x || x < right_back_ref.x) // { // in_blocked_zone= false; // } in_blocked_zone= false; } } if (in_blocked_zone) continue; if (range < min_distance) { min_distance = range; min_index = i; } PointT point; point.x = range * cos(angle); point.y = range * sin(angle); point.z = 0.0; point.r = 0; point.g = 255; point.b = 0; PointData data; data.original_index = i; data.is_line_point = false; data.is_nearest = (i == min_index); point_data_map[point_count] = data; cloud->points.push_back(point); point_count++; } cloud->width = point_count; // 如果点云为空,直接返回 if (cloud->empty()) { ROS_WARN_THROTTLE(1.0, "No valid points found"); return; } std::vector<DetectedLine> detected_lines; pcl::search::KdTree<PointT>::Ptr tree(new pcl::search::KdTree<PointT>); tree->setInputCloud(cloud); // 2. 执行欧几里得聚类 - 确保连续性 std::vector<pcl::PointIndices> cluster_indices; pcl::EuclideanClusterExtraction<PointT> ec; ec.setClusterTolerance(0.15); // 点间最大距离阈值(米) ec.setMinClusterSize(30); // 最小聚类点数 ec.setMaxClusterSize(10000); // 最大聚类点数 ec.setSearchMethod(tree); ec.setInputCloud(cloud); ec.extract(cluster_indices); ROS_INFO_THROTTLE(1.0, "Detected %zu point cloud clusters", cluster_indices.size()); std::vector<std::vector<uint8_t>> colors = { {255, 0, 0}, // 红 {0, 255, 0}, // 绿 {0, 0, 255}, // 蓝 {255, 255, 0}, // 黄 {0, 255, 255}, // 青 {255, 0, 255} // 紫 }; // 初始化点云颜色 for (auto& point : cloud->points) { point.r = 0; point.g = 255; point.b = 0; } // 3. 对每个聚类进行直线检测 for (size_t i = 0; i < cluster_indices.size(); i++) { const auto& cluster = cluster_indices[i]; // 创建当前聚类的点云 PointCloudT::Ptr cluster_cloud(new PointCloudT); for (const auto& idx : cluster.indices) { cluster_cloud->push_back((*cloud)[idx]); } // 为当前聚类的点着色 const auto& color = colors[i % colors.size()]; for (const auto& idx : cluster.indices) { cloud->points[idx].r = color[0]; cloud->points[idx].g = color[1]; cloud->points[idx].b = color[2]; } // 跳过点数过少的聚类 if (cluster_cloud->size() < 10) continue; pcl::SACSegmentation<PointT> seg; pcl::PointIndices::Ptr inliers(new pcl::PointIndices); pcl::ModelCoefficients::Ptr coefficients(new pcl::ModelCoefficients); seg.setOptimizeCoefficients(true); seg.setModelType(pcl::SACMODEL_LINE); seg.setMethodType(pcl::SAC_RANSAC); seg.setMaxIterations(1000); seg.setDistanceThreshold(0.05); // 点到直线的最大距离阈值 seg.setInputCloud(cluster_cloud); seg.segment(*inliers, *coefficients); if (inliers->indices.size() < 10) continue; DetectedLine line; float min_proj = std::numeric_limits<float>::max(); float max_proj = std::numeric_limits<float>::lowest(); Eigen::Vector3f direction(coefficients->values[3], coefficients->values[4], 0.0f); direction.normalize(); // 计算直线的起点和终点 for (const auto& idx : inliers->indices) { Eigen::Vector3f pt( cluster_cloud->points[idx].x, cluster_cloud->points[idx].y, 0.0f ); float proj = pt.dot(direction); if (proj < min_proj) { min_proj = proj; line.start.x = pt.x(); line.start.y = pt.y(); line.start.z = 0.0f; } if (proj > max_proj) { max_proj = proj; line.end.x = pt.x(); line.end.y = pt.y(); line.end.z = 0.0f; } } // 计算法线方向 line.normal.normal_x = -direction.y(); line.normal.normal_y = direction.x(); line.normal.normal_z = 0.0f; line.direction = direction; detected_lines.push_back(line); // 标记直线点 for (const auto& inlier_idx : inliers->indices) { if (inlier_idx >= 0 && inlier_idx < cluster.indices.size()) { int original_idx = cluster.indices[inlier_idx]; if (original_idx >= 0 && original_idx < cloud->size()) { point_data_map[original_idx].is_line_point = true; } } } } // 更新点云颜色 for (int i = 0; i < cloud->size(); i++) { if (point_data_map[i].is_line_point) { cloud->points[i].r = 255; cloud->points[i].g = 255; cloud->points[i].b = 0; } } sensor_msgs::PointCloud2 cloud_msg; pcl::toROSMsg(*cloud, cloud_msg); cloud_msg.header = msg->header; std::vector<DetectedLine> transformed_lines; geometry_msgs::Point left_front_tf_point_map ,left_back_tf_point_map ; geometry_msgs::Point right_front_tf_point_map , right_back_tf_point_map ; bool left_front_tf_valid = false , left_back_tf_valid = false; bool right_front_tf_valid = false , right_back_tf_valid = false; if (tfBuffer) { try { if (!tfBuffer->canTransform("base_footprint", cloud_msg.header.frame_id, cloud_msg.header.stamp, ros::Duration(0.1))) { ROS_WARN_THROTTLE(1.0, "TF transform not available"); return; } // 转换点云 sensor_msgs::PointCloud2 transformed_cloud; tfBuffer->transform(cloud_msg, transformed_cloud, "base_footprint"); transformed_cloud.header.stamp = ros::Time::now(); transformed_cloud.header.frame_id = "base_footprint"; pointcloud_pub.publish(transformed_cloud); // 转换检测到的直线 if (!detected_lines.empty()) { for (auto& line : detected_lines) { geometry_msgs::PointStamped laser_start, map_start; laser_start.header = msg->header; laser_start.point.x = line.start.x; laser_start.point.y = line.start.y; laser_start.point.z = 0.0f; tfBuffer->transform(laser_start, map_start, "base_footprint"); geometry_msgs::PointStamped laser_end, map_end; laser_end.header = msg->header; laser_end.point.x = line.end.x; laser_end.point.y = line.end.y; laser_end.point.z = 0.0f; tfBuffer->transform(laser_end, map_end, "base_footprint"); geometry_msgs::Vector3Stamped laser_normal, map_normal; laser_normal.header = msg->header; laser_normal.vector.x = line.normal.normal_x; laser_normal.vector.y = line.normal.normal_y; laser_normal.vector.z = 0.0f; tfBuffer->transform(laser_normal, map_normal, "base_footprint"); DetectedLine transformed_line; transformed_line.start.x = map_start.point.x; transformed_line.start.y = map_start.point.y; transformed_line.start.z = map_start.point.z; transformed_line.end.x = map_end.point.x; transformed_line.end.y = map_end.point.y; transformed_line.end.z = map_end.point.z; transformed_line.normal.normal_x = map_normal.vector.x; transformed_line.normal.normal_y = map_normal.vector.y; transformed_line.normal.normal_z = map_normal.vector.z; transformed_lines.push_back(transformed_line); } publishDetectedLines(transformed_lines, "base_footprint"); } // 获取TF参考点在base_footprint中的位置 try { geometry_msgs::PointStamped left_front_tf_laser, left_front_tf_map; left_front_tf_laser.header.frame_id = "laser_left_front"; left_front_tf_laser.header.stamp = ros::Time(0); left_front_tf_laser.point.x = left_front_ref.x; left_front_tf_laser.point.y = left_front_ref.y; left_front_tf_laser.point.z = left_front_ref.z; tfBuffer->transform(left_front_tf_laser, left_front_tf_map, "base_footprint"); left_front_tf_point_map = left_front_tf_map.point; left_front_tf_valid = true; geometry_msgs::PointStamped left_back_tf_laser, left_back_tf_map; left_back_tf_laser.header.frame_id = "laser_left_back"; left_back_tf_laser.header.stamp = ros::Time(0); left_back_tf_laser.point.x = left_back_ref.x; left_back_tf_laser.point.y = left_back_ref.y; left_back_tf_laser.point.z = left_back_ref.z; tfBuffer->transform(left_back_tf_laser, left_back_tf_map, "base_footprint"); left_back_tf_point_map = left_back_tf_map.point; left_back_tf_valid = true; geometry_msgs::PointStamped right_front_tf_laser, right_front_tf_map; right_front_tf_laser.header.frame_id = "laser_right_front"; right_front_tf_laser.header.stamp = ros::Time(0); right_front_tf_laser.point.x = right_front_ref.x; right_front_tf_laser.point.y = right_front_ref.y; right_front_tf_laser.point.z = right_front_ref.z; tfBuffer->transform(right_front_tf_laser, right_front_tf_map, "base_footprint"); right_front_tf_point_map = right_front_tf_map.point; right_front_tf_valid = true; geometry_msgs::PointStamped right_back_tf_laser, right_back_tf_map; right_back_tf_laser.header.frame_id = "laser_right_back"; right_back_tf_laser.header.stamp = ros::Time(0); right_back_tf_laser.point.x = right_back_ref.x; right_back_tf_laser.point.y = right_back_ref.y; right_back_tf_laser.point.z = right_back_ref.z; tfBuffer->transform(right_back_tf_laser, right_back_tf_map, "base_footprint"); right_back_tf_point_map = right_back_tf_map.point; right_back_tf_valid = true; publishTFPoints(left_front_tf_point_map, left_back_tf_point_map, right_front_tf_point_map, right_back_tf_point_map, "base_footprint"); } catch (tf2::TransformException& ex) { ROS_WARN_THROTTLE(1.0, "TF point transform error: %s", ex.what()); } } catch (tf2::TransformException& ex) { ROS_WARN_THROTTLE(1.0, "TF point transform error: %s", ex.what()); } } if ( ! transformed_lines.empty() && left_front_tf_valid && left_back_tf_valid && right_front_tf_valid && right_back_tf_valid) { std::vector<DetectedLine>left_walls; std::vector<DetectedLine>right_walls; for (const auto& wall : transformed_lines) { if (isLeftWall(wall)) { left_walls.push_back(wall); } else { right_walls.push_back(wall); } } double left_front_min_dist = std::numeric_limits<double>::max(); double left_back_min_dist = std::numeric_limits<double>::max(); geometry_msgs::Point left_front_foot , left_back_foot; geometry_msgs::Point left_front_wall_point, left_back_wall_point; for (const auto& wall : left_walls) { geometry_msgs::Point start_point, end_point; start_point.x = wall.start.x; start_point.y = wall.start.y; start_point.z = wall.start.z; end_point.x = wall.end.x; end_point.y = wall.end.y; end_point.z = wall.end.z; double dist_front = pointToLineDistance( left_front_tf_point_map, start_point, end_point); // 计算垂足点 geometry_msgs::Point foot_front = pointToLineProjection( left_front_tf_point_map, start_point, end_point ); if (dist_front < left_front_min_dist) { left_front_min_dist = dist_front; left_front_foot = foot_front; left_front_wall_point = foot_front; } double dist_back = pointToLineDistance( left_back_tf_point_map, start_point, end_point); // 计算垂足点 geometry_msgs::Point foot_back = pointToLineProjection( left_back_tf_point_map, start_point, end_point ); if (dist_back < left_back_min_dist) { left_back_min_dist = dist_back; left_back_foot = foot_back; left_back_wall_point = foot_back; } } //右墙 double right_front_min_dist = std::numeric_limits<double>::max(); double right_back_min_dist = std::numeric_limits<double>::max(); geometry_msgs::Point right_front_foot, right_back_foot; geometry_msgs::Point right_front_wall_point, right_back_wall_point; for (const auto& wall : right_walls) { geometry_msgs::Point start_point, end_point; start_point.x = wall.start.x; start_point.y = wall.start.y; start_point.z = wall.start.z; end_point.x = wall.end.x; end_point.y = wall.end.y; end_point.z = wall.end.z; // 计算右前参考点 double dist_front = pointToLineDistance( right_front_tf_point_map, start_point, end_point ); // 计算垂足点 geometry_msgs::Point foot_front = pointToLineProjection( right_front_tf_point_map, start_point, end_point ); if (dist_front < right_front_min_dist) { right_front_min_dist = dist_front; right_front_foot = foot_front; right_front_wall_point = foot_front; } // 计算右后参考点 double dist_back = pointToLineDistance( right_back_tf_point_map, start_point, end_point ); // 计算垂足点 geometry_msgs::Point foot_back = pointToLineProjection( right_back_tf_point_map, start_point, end_point ); if (dist_back < right_back_min_dist) { right_back_min_dist = dist_back; right_back_foot = foot_back; right_back_wall_point = foot_back; } } std_msgs::Float64 left_front_distance_msg, left_back_distance_msg , right_front_distance_msg , right_back_distance_msg; // 左前距离 double left_front_vertical_dist = (left_front_min_dist == std::numeric_limits<double>::max()) ? 10.0 : left_front_min_dist; left_front_distance_msg.data = left_front_vertical_dist; //left_front_nearest_distance_pub.publish(left_front_distance_msg); // 左后距离 double left_back_vertical_dist = (left_back_min_dist == std::numeric_limits<double>::max()) ? 10.0 : left_back_min_dist; left_back_distance_msg.data = left_back_vertical_dist; //left_back_nearest_distance_pub.publish(left_back_distance_msg); // 右前距离 double right_front_vertical_dist = (right_front_min_dist == std::numeric_limits<double>::max()) ? 10.0 : right_front_min_dist; right_front_distance_msg.data = right_front_vertical_dist; //right_front_nearest_distance_pub.publish(right_front_distance_msg); // 右后距离 double right_back_vertical_dist = (right_back_min_dist == std::numeric_limits<double>::max()) ? 10.0 : right_back_min_dist; right_back_distance_msg.data = right_back_vertical_dist; //right_back_nearest_distance_pub.publish(right_back_distance_msg); // 发布垂足点 publishFootPointMarker(left_front_foot, left_back_foot, right_front_foot, right_back_foot, "base_footprint"); // 发布距离信息 geometry_msgs::Point wall_mid_point; wall_mid_point.x = (left_front_wall_point.x + right_front_wall_point.x) / 2; wall_mid_point.y = (left_front_wall_point.y + right_front_wall_point.y) / 2; wall_mid_point.z = 0; float dist_min = min_four(left_front_vertical_dist,left_back_vertical_dist,right_front_vertical_dist,right_back_vertical_dist); if ( dist_min == left_front_vertical_dist ) { nearest_distance_pub.publish(left_front_distance_msg); } else if ( dist_min == left_back_vertical_dist ) { nearest_distance_pub.publish(left_back_distance_msg); } else if ( dist_min == right_front_vertical_dist ) { nearest_distance_pub.publish(right_front_distance_msg); } else { nearest_distance_pub.publish(right_back_distance_msg); } publishDistanceInfo("base_footprint", left_front_min_distance, left_back_min_distance, right_front_min_distance, right_back_min_distance, wall_mid_point); ROS_INFO_THROTTLE(1.0, "Left Front TF to wall: %.3f m, Left Back TF to wall: %.3f m , Right Front TF to wall: %.3f m, Right Bcak TF to wall: %.3f m", left_front_vertical_dist , left_back_vertical_dist ,right_front_vertical_dist ,right_back_vertical_dist ); } }”修改成你给我的样子,rviz观察到的四个tf坐标还是(0,0,0)
07-18
这个是库的 文档说明 react-native-vision Library for accessing VisionKit and visual applications of CoreML from React Native. iOS Only Incredibly super-alpha, and endeavors to provide a relatively thin wrapper between the underlying vision functionality and RN. Higher-level abstractions are @TODO and will be in a separate library. Installation yarn add react-native-vision react-native-swift react-native link Note react-native-swift is a peer dependency of react-native-vision. If you are running on a stock RN deployment (e.g. from react-native init) you will need to make sure your app is targeting IOS 11 or higher: yarn add react-native-fix-ios-version react-native link Since this module uses the camera, it will work much better on a device, and setting up permissions and codesigning in advance will help: yarn add -D react-native-camera-ios-enable yarn add -D react-native-setdevteam react-native link react-native setdevteam Then you are ready to run! react-native run-ios --device Command line - adding a Machine Learning Model with add-mlmodel react-native-vision makes it easier to bundle a pre-built machine learning model into your app. After installing, you will find the following command available: react-native add-mlmodel /path/to/mymodel.mlmodel You may also refere to the model from a URL, which is handy when getting something off the interwebs. For example, to apply the pre-built mobileNet model from apple, you can: react-native add-mlmodel https://docs-assets.developer.apple.com/coreml/models/MobileNet.mlmodel Note that the name of your model in the code will be the same as the filename minus the "mlmodel". In the above case, the model in code can be referenced as "MobileNet" Easy Start 1 : Full Frame Object Detection One of the most common easy use cases is just detecting what is in front of you. For this we use the VisionCamera component that lets you apply a model and get the classification via render props. Setup react-native init imagedetector; cd imagedetector yarn add react-native-swift react-native-vision yarn add react-native-fix-ios-version react-native-camera-ios-enable react-native-setdevteam react-native link react-native setdevteam Load your model with MobileNet A free download from Apple! react-native add-mlmodel https://docs-assets.developer.apple.com/coreml/models/MobileNet.mlmodel Add Some App Code import React from "react"; import { Text } from "react-native"; import { VisionCamera } from "react-native-vision"; export default () => ( <VisionCamera style={{ flex: 1 }} classifier="MobileNet"> {({ label, confidence }) => ( <Text style={{ width: "75%", fontSize: 50, position: "absolute", right: 50, bottom: 100 }} > {label + " :" + (confidence * 100).toFixed(0) + "%"} </Text> )} </VisionCamera> ); Easy Start 2: GeneratorView - for Style Transfer Most machine learning application are classifiers. But generators can be useful and a lot of fun. The GeneratorView lets you look at style transfer models that show how you can use deep learning techniques for creating whole new experiences. Setup react-native init styletest; cd styletest yarn add react-native-swift react-native-vision yarn add react-native-fix-ios-version react-native-camera-ios-enable react-native-setdevteam react-native link react-native setdevteam Load your model with add-mlmodel Apple has not published a style transfer model, but there are a few locations on the web where you can download them. Here is one: https://github.com/mdramos/fast-style-transfer-coreml So go to his github, navigate to his google drive, and then download the la_muse model to your personal Downloads directory. react-native add-mlmodel ~/Downloads/la_muse.mlmodel App Code This is the insanely short part. Note that the camera view is not necessary for viewing the style-transferred view: its just for reference. import React from "react"; import { GeneratorView, RNVCameraView } from "react-native-vision"; export default () => ( <GeneratorView generator="FNS-The-Scream" style={{ flex: 1 }}> <RNVCameraView style={{ position: "absolute", height: 200, width: 100, top: 0, right: 0 }} resizeMode="center" /> </GeneratorView> ); Easy Start 3: Face Camera Detect what faces are where in your camera view! Taking a page (and the model!) from (https://github.com/gantman/nicornot)[Gant Laborde's NicOrNot app], here is the entirety of an app that discerns whether the target is nicolas cage. Setup react-native init nictest; cd nictest yarn add react-native-swift react-native-vision yarn add react-native-fix-ios-version react-native-camera-ios-enable react-native-setdevteam react-native link react-native setdevteam Load your model with add-mlmodel react-native add-mlmodel https://s3.amazonaws.com/despiteallmyrage/MegaNic50_linear_5.mlmodel App Code import React from "react"; import { Text, View } from "react-native"; import { FaceCamera } from "react-native-vision"; import { Identifier } from "react-native-identifier"; export default () => ( <FaceCamera style={{ flex: 1 }} classifier="MegaNic50_linear_5"> {({ face, faceConfidence, style }) => face && (face == "nic" ? ( <Identifier style={{ ...style }} accuracy={faceConfidence} /> ) : ( <View style={{ ...style, justifyContent: "center", alignItems: "center" }} > <Text style={{ fontSize: 50, color: "red", opacity: faceConfidence }}> X </Text> </View> )) } </FaceCamera> ); Face Detection Component Reference FacesProvider Context Provider that extends <RNVisionProvider /> to detect, track, and identify faces. Props Inherits from <RNVisionProvider />, plus: interval: How frequently (in ms) to run the face detection re-check. (Basically lower values here keeps the face tracking more accurate) Default: 500 classifier: File URL to compiled MLModel (e.g. mlmodelc) that will be applied to detected faces updateInterval: How frequently (in ms) to update the detected faces - position, classified face, etc. Smaller values will mean smoother animation, but at the price of processor intensity. Default: 100 Example <FacesProvider isStarted={true} isCameraFront={true} classifier={this.state.classifier} > {/* my code for handling detected faces */} </FacesProvider> FacesConsumer Consumer of <FacesProvider /> context. As such, takes no props and returns a render prop function. Render Prop Members faces: Keyed object of information about the detected face. Elements of each object include: region: The key associated with this object (e.g. faces[k].region === k) x, y, height, width: Position and size of the bounding box for the detected face. faces: Array of top-5 results from face classifier, with keys label and confidence face: Label of top-scoring result from classifier (e.g. the face this is most likely to be) faceConfidence: Confidence score of top-scoring result above. Note that when there is no classifier specified, faces, face and faceConfidence are undefined Face Render prop generator to provision information about a single detected face. Can be instantiated by spread-propping the output of a single face value from <FacesConsumer> or by appling a faceID that maps to the key of a face. Returns null if no match. Props faceID: ID of the face (corresponding to the key of the faces object in FacesConsumer) Render Prop Members region: The key associated with this object (e.g. faces[k].region === k) x, y, height, width: Position and size of the bounding box for the detected face. Note These are adjusted for the visible camera view when you are rendering from that context. faces: Array of top-5 results from face classifier, with keys label and confidence face: Label of top-scoring result from classifier (e.g. the face this is most likely to be) faceConfidence: Confidence score of top-scoring result above. Note These arguments are the sam Faces A render-prop generator to provision information about all detected faces. Will map all detected faces into <Face> components and apply the children prop to each, so you have one function to generate all your faces. Designed to be similar to FlatMap implentation. Required Provider Context This component must be a descendant of a <FacesProvider> Props None Render Prop Members Same as <Face> above, but output will be mapped across all detected faces. Example of use is in the primary Face Recognizer demo code above. Props faceID: ID of the face applied. isCameraView: Whether the region frame information to generate should be camera-aware (e.g. is it adjusted for a preview window or not) Render Props This largely passes throught the members of the element that you could get from the faces collection from FaceConsumer, with the additional consideration that when isCameraView is set, style: A spreadable set of styling members to position the rectangle, in the same style as a RNVCameraRegion If faceID is provided but does not map to a member of the faces collection, the function will return null. Core Component References The package exports a number of components to facilitate the vision process. Note that the <RNVisionProvider /> needs to be ancestors to any others in the tree. So a simple single-classifier using dominant image would look something like: <RNVisionProvider isStarted={true}> <RNVDefaultRegion classifiers={[{url: this.state.FileUrlOfClassifier, max: 5}]}> {({classifications})=>{ return ( <Text> {classifications[this.state.FileUrlOfClassifier][0].label} </Text> }} </RNVDefaultRegion> </RNVisionProvider> RNVisionProvider Context provider for information captured from the camera. Allows the use of regional detection methods to initialize identification of objects in the frame. Props isStarted: Whether the camera should be activated for vision capture. Boolean isCameraFront: Facing of the camera. False for the back camera, true to use the front. Note only one camera facing can be used at a time. As of now, this is a hardware limitation. regions: Specified regions on the camera capture frame articulated as {x,y,width,height} that should always be returned by the consumer trackedObjects: Specified regions that should be tracked as objects, so that the regions returned match these object IDs and show current position. onRegionsChanged: Fires when the list of regions has been altered onDetectedFaces: Fires when the number of detected faces has changed Class imperative member detectFaces: Triggers one call to detect faces based on current active frame. Directly returns locations. RNVisionConsumer Consumer partner of RNVisionProvider. Must be its descendant in the node tree. Render Prop Members imageDimensions: Object representing size of the camera frame in {width, height} isCameraFront: Relaying whether camera is currently in selfie mode. This is important if you plan on displaying camera output, because in selfie mode a preview will be mirrored. regions: The list of detected rectangles in the most recently captured frame, where detection is driven by the RNVisionProvider props RNVRegion Props region: ID of the region (Note the default region, which is the whole frame, has an id of "" - blank.) classifiers: CoreML classifiers passed as file URLs to the classifier mlmodelc itself. Array generators: CoreML image generators passed as file URLs to the classifier mlmodelc itself. Array generators: CoreML models that generate a collection of output values passed as file URLs to the classifier mlmodelc itself. bottlenecks: A collection of CoreML models that take other CoreML model outputs as their inputs. Keys are the file URLs of the original models (that take an image as their input) and values are arrays of mdoels that generate the output passed via render props. onFrameCaptured: Callback to fire when a new image of the current frame in this region has been captured. Making non-null activates frame capture, setting to null turns it off. The callback passes a URL of the saved frame image file. Render Prop members key: ID of the region x, y, width, height: the elements of the frame containing the region. All values expressed as percentages of the overall frame size, so a 50x100 frame at origin 5,10 in a 500x500 frame would come across as {x: 0.01, y: 0.02, width: .1, height: .2}. Changes in these values are often what drives the re-render of the component (and therefore re-run of the render prop) confidence: If set, the confidence that the object identified as key is actually at this location. Used by tracked objects API of iOS Vision. Sometimes null. classifications: Collection, keyed by the file URL of the classifier passed in props, of collections of labels and probabilities. (e.g. {"file:///path/to/myclassifier.mlmodelc": {"label1": 0.84, "label2": 0.84}}) genericResults: Collection of generic results returned from generic models passed in via props to the region RNVDefaultRegion Convenience region that references the full frame. Same props as RNVRegion, except region is always set to "" - the full frame. Useful for simple style transfers or "dominant image" classifiers. Props Same as RNVRegion, with the exception that region is forced to "" Render Prop Members Same as RNVRegion, with the note that key will always be "" RNVCameraView Preview of the camera captured by the RNVisionProvider. Note that the preview is flipped in selfie mode (e.g. when isCameraFront is true) Props The properties of a View plus: gravity: how to scale the captured camera frame in the view. String. Valid values: fill: Fills the rectangle much like the "cover" in an Image resize: Leaves transparent (or style:{backgroundColor}) the parts of the rectangle that are left over from a resized version of the image. RNVCameraConsumer Render prop consumer for delivering additional context that regions will find helpful, mostly for rendering rectangles that map to the regions identified. Render Prop Members viewPortDimensions: A collection of {width, height} of the view rectangle. viewPortGravity: A pass-through of the gravity prop to help decide how to manage the math converting coordinates. RNVCameraRegion A compound consumer that blends the render prop members of RNVRegion and RNVCameraConsumer and adds a style prop that can position the region on a specified camera preview Props Same as RNVRegion Render Prop Members Includes members from RNVRegion and RNVCameraConsumer and adds: style: A pre-built colleciton of style prop members {position, width, height, left, top} that are designed to act in the context of the RNVCameraView rectangle. Spread-prop with your other style preferences (border? backgroundColor?) for easy on-screen representation. RNVImageView View for displaying output of image generators. Link it to , and the resulting image will display in this view. Useful for style transfer models. More performant because there is no round trip to JavaScript notifying of each frame update. Props id: the ID of an image generator model attached to a region. Usually is the file:/// URL of the .mlmodelc. Otherwise conforms to Image and View API. 请叫我如何做
11-06
Line 4011: 07-31 10:25:56.817235 1813 29584 I CamX : [ INFO][CORE ] camxsession.cpp:4826 ProcessCaptureRequest() Timed Wait Live Pending Requests(3198) Sequence Id 95 Live Pending Requests 5 Max Live Pending Requests 6 Live Pending Request TimeOut Extendor 100 Line 4708: 07-31 10:25:56.849657 1813 29584 I CamX : [ INFO][CORE ] camxsession.cpp:4826 ProcessCaptureRequest() Timed Wait Live Pending Requests(3198) Sequence Id 96 Live Pending Requests 5 Max Live Pending Requests 6 Live Pending Request TimeOut Extendor 100 Line 5803: 07-31 10:25:56.884443 1813 29584 I CamX : [ INFO][CORE ] camxsession.cpp:4826 ProcessCaptureRequest() Timed Wait Live Pending Requests(3198) Sequence Id 97 Live Pending Requests 5 Max Live Pending Requests 6 Live Pending Request TimeOut Extendor 100 Line 6404: 07-31 10:25:56.917426 1813 29584 I CamX : [ INFO][CORE ] camxsession.cpp:4826 ProcessCaptureRequest() Timed Wait Live Pending Requests(3198) Sequence Id 98 Live Pending Requests 5 Max Live Pending Requests 6 Live Pending Request TimeOut Extendor 100 Line 6957: 07-31 10:25:56.949952 1813 29584 I CamX : [ INFO][CORE ] camxsession.cpp:4826 ProcessCaptureRequest() Timed Wait Live Pending Requests(3198) Sequence Id 99 Live Pending Requests 5 Max Live Pending Requests 6 Live Pending Request TimeOut Extendor 100 Line 7223: 07-31 10:25:56.952352 1813 29584 I CamX : [ INFO][CORE ] camxsession.cpp:4826 ProcessCaptureRequest() Timed Wait Live Pending Requests(3198) Sequence Id 100 Live Pending Requests 5 Max Live Pending Requests 6 Live Pending Request TimeOut Extendor 100 Line 8303: 07-31 10:25:57.198243 4622 4622 D PluginSeedling--Origin: ViewBuildTaskScheduler-->schedule ENTRY_STATUS_BAR current [LiveAlertModel: [key: 0|com.android.systemui|10001|ShareToApp|10243, entranceType: ENTRY_STATUS_BAR, score: 101.0, groupPriority: 0 type: LIVE, isSystemService: true, shouldShow: true, lockscreenShouldShow: true, sourceType: SOURCE_COMMON, remindLevel: 0, pkg: com.android.systemui, hostPkgName=com.android.systemui front: false, forceRebuild: false, liveDuration: false, InstantDuration: 5000, requestPanel: null, capsuleTimeOut: 300000, serviceTitleName: , overrideTransition: false level: 2, rusBaseData: RusBaseData(id='default_com.android.systemui_10001', updateStateEnable=0, canDelete=1, remindAlways=0, longClick='', cardImportance=-1, clickCustomAction=0, timeOutDuration=5,enableInSuperpower=0, autoPriority=0, customCapsuleDuration=-1,clickWhenAnim=0, panoramicAodEnable=1,notificationStyleList=,blackCallStyle=0, liveAlertScore=101.0,liveAlertLevel=0), showSize: VIEW_SIZE_SM serviceFrom: 0, liveAlertState: SeedlingState(0), wrapperSize: 2] sorted [LiveAlertModel: [key: 0|com.android.systemui|10001|ShareToApp|10243, entranceType: ENTRY_STATUS_BAR, score: 101.0, groupPriority: 0 type: LIVE, isSystemService: true, shouldShow: true, lockscreenShouldShow: true, sourceType: SOURCE_COMMON, remindLevel: 0, pkg: com.android.systemui, hostPkgName=com.android.systemui front: false, forceRebuild: false, liveDuration: false, InstantDuration: 5000, requestPanel: null, capsuleTimeOut: 300000, serviceTitleName: , overrideTransition: false level: 2, rusBaseData: RusBaseData(id='default_com.android.systemui_10001', updateStateEnable=0, canDelete=1, remindAlways=0, longClick='', cardImportance=-1, clickCustomAction=0, timeOutDuration=5,enableInSuperpower=0, autoPriority=0, customCapsuleDuration=-1,clickWhenAnim=0, panoramicAodEnable=1,notificationStyleList=,blackCallStyle=0, liveAlertScore=101.0,liveAlertLevel=0), showSize: VIEW_SIZE_SM serviceFrom: 0, liveAlertState: SeedlingState(0), wrapperSize: 2] removed []} Line 8304: 07-31 10:25:57.198267 4622 4622 I PluginSeedling--Origin: LiveAlertInteractorImpl-->notifyEntryDataChanged, result:[LiveAlertModel: [key: 0|com.android.systemui|10001|ShareToApp|10243, entranceType: ENTRY_STATUS_BAR, score: 101.0, groupPriority: 0 type: LIVE, isSystemService: true, shouldShow: true, lockscreenShouldShow: true, sourceType: SOURCE_COMMON, remindLevel: 0, pkg: com.android.systemui, hostPkgName=com.android.systemui front: false, forceRebuild: false, liveDuration: false, InstantDuration: 5000, requestPanel: null, capsuleTimeOut: 300000, serviceTitleName: , overrideTransition: false level: 2, rusBaseData: RusBaseData(id='default_com.android.systemui_10001', updateStateEnable=0, canDelete=1, remindAlways=0, longClick='', cardImportance=-1, clickCustomAction=0, timeOutDuration=5,enableInSuperpower=0, autoPriority=0, customCapsuleDuration=-1,clickWhenAnim=0, panoramicAodEnable=1,notificationStyleList=,blackCallStyle=0, liveAlertScore=101.0,liveAlertLevel=0), showSize: VIEW_SIZE_SM serviceFrom: 0, liveAlertState: SeedlingState(0), wrapperSize: 2] Line 8305: 07-31 10:25:57.198299 4622 4622 D PluginSeedling--Capsule: CapsulesRepository-->onDataChanged, hasSystem[true to true] size:1: [LiveAlertModel: [key: 0|com.android.systemui|10001|ShareToApp|10243, entranceType: ENTRY_STATUS_BAR, score: 101.0, groupPriority: 0 type: LIVE, isSystemService: true, shouldShow: true, lockscreenShouldShow: true, sourceType: SOURCE_COMMON, remindLevel: 0, pkg: com.android.systemui, hostPkgName=com.android.systemui front: false, forceRebuild: false, liveDuration: false, InstantDuration: 5000, requestPanel: null, capsuleTimeOut: 300000, serviceTitleName: , overrideTransition: false level: 2, rusBaseData: RusBaseData(id='default_com.android.systemui_10001', updateStateEnable=0, canDelete=1, remindAlways=0, longClick='', cardImportance=-1, clickCustomAction=0, timeOutDuration=5,enableInSuperpower=0, autoPriority=0, customCapsuleDuration=-1,clickWhenAnim=0, panoramicAodEnable=1,notificationStyleList=,blackCallStyle=0, liveAlertScore=101.0,liveAlertLevel=0), showSize: VIEW_SIZE_SM serviceFrom: 0, liveAlertState: SeedlingState(0), wrapperSize: 2] Line 8311: 07-31 10:25:57.198455 4622 4622 D PluginSeedling--CapsuleCard: CardsRepository-->onDataChanged, size:1:[LiveAlertModel: [key: 0|com.android.systemui|10001|ShareToApp|10243, entranceType: ENTRY_STATUS_BAR, score: 101.0, groupPriority: 0 type: LIVE, isSystemService: true, shouldShow: true, lockscreenShouldShow: true, sourceType: SOURCE_COMMON, remindLevel: 0, pkg: com.android.systemui, hostPkgName=com.android.systemui front: false, forceRebuild: false, liveDuration: false, InstantDuration: 5000, requestPanel: null, capsuleTimeOut: 300000, serviceTitleName: , overrideTransition: false level: 2, rusBaseData: RusBaseData(id='default_com.android.systemui_10001', updateStateEnable=0, canDelete=1, remindAlways=0, longClick='', cardImportance=-1, clickCustomAction=0, timeOutDuration=5,enableInSuperpower=0, autoPriority=0, customCapsuleDuration=-1,clickWhenAnim=0, panoramicAodEnable=1,notificationStyleList=,blackCallStyle=0, liveAlertScore=101.0,liveAlertLevel=0), showSize: VIEW_SIZE_SM serviceFrom: 0, liveAlertState: SeedlingState(0), wrapperSize: 2] Line 8341: 07-31 10:25:57.205270 4622 4622 D PluginSeedling--Origin: ViewBuildTaskScheduler-->schedule ENTRY_NOTIFICATION current [LiveAlertModel: [key: 0|com.android.systemui|10001|ShareToApp|10243, entranceType: ENTRY_NOTIFICATION, score: 101.0, groupPriority: 0 type: LIVE, isSystemService: true, shouldShow: false, lockscreenShouldShow: false, sourceType: SOURCE_COMMON, remindLevel: 0, pkg: com.android.systemui, hostPkgName=com.android.systemui front: false, forceRebuild: false, liveDuration: false, InstantDuration: 5000, requestPanel: null, capsuleTimeOut: 300000, serviceTitleName: , overrideTransition: false level: 2, rusBaseData: RusBaseData(id='default_com.android.systemui_10001', updateStateEnable=0, canDelete=1, remindAlways=0, longClick='', cardImportance=-1, clickCustomAction=0, timeOutDuration=5,enableInSuperpower=0, autoPriority=0, customCapsuleDuration=-1,clickWhenAnim=0, panoramicAodEnable=1,notificationStyleList=,blackCallStyle=0, liveAlertScore=101.0,liveAlertLevel=0), showSize: VIEW_SIZE_NONE serviceFrom: 0, liveAlertState: SeedlingState(0), wrapperSize: 1] sorted [LiveAlertModel: [key: 0|com.android.systemui|10001|ShareToApp|10243, entranceType: ENTRY_NOTIFICATION, score: 101.0, groupPriority: 0 type: LIVE, isSystemService: true, shouldShow: false, lockscreenShouldShow: false, sourceType: SOURCE_COMMON, remindLevel: 0, pkg: com.android.systemui, hostPkgName=com.android.systemui front: false, forceRebuild: false, liveDuration: false, InstantDuration: 5000, requestPanel: null, capsuleTimeOut: 300000, serviceTitleName: , overrideTransition: false level: 2, rusBaseData: RusBaseData(id='default_com.android.systemui_10001', updateStateEnable=0, canDelete=1, remindAlways=0, longClick='', cardImportance=-1, clickCustomAction=0, timeOutDuration=5,enableInSuperpower=0, autoPriority=0, customCapsuleDuration=-1,clickWhenAnim=0, panoramicAodEnable=1,notificationStyleList=,blackCallStyle=0, liveAlertScore=101.0,liveAlertLevel=0), showSize: VIEW_SIZE_NONE serviceFrom: 0, liveAlertState: SeedlingState(0), wrapperSize: 1] removed []} Line 8342: 07-31 10:25:57.205299 4622 4622 I PluginSeedling--Origin: LiveAlertInteractorImpl-->notifyEntryDataChanged, result:[LiveAlertModel: [key: 0|com.android.systemui|10001|ShareToApp|10243, entranceType: ENTRY_NOTIFICATION, score: 101.0, groupPriority: 0 type: LIVE, isSystemService: true, shouldShow: false, lockscreenShouldShow: false, sourceType: SOURCE_COMMON, remindLevel: 0, pkg: com.android.systemui, hostPkgName=com.android.systemui front: false, forceRebuild: false, liveDuration: false, InstantDuration: 5000, requestPanel: null, capsuleTimeOut: 300000, serviceTitleName: , overrideTransition: false level: 2, rusBaseData: RusBaseData(id='default_com.android.systemui_10001', updateStateEnable=0, canDelete=1, remindAlways=0, longClick='', cardImportance=-1, clickCustomAction=0, timeOutDuration=5,enableInSuperpower=0, autoPriority=0, customCapsuleDuration=-1,clickWhenAnim=0, panoramicAodEnable=1,notificationStyleList=,blackCallStyle=0, liveAlertScore=101.0,liveAlertLevel=0), showSize: VIEW_SIZE_NONE serviceFrom: 0, liveAlertState: SeedlingState(0), wrapperSize: 1] Line 8344: 07-31 10:25:57.205323 4622 4622 I PluginSeedling--Notification: NotificationRepository-->onDataChanged, [LiveAlertModel: [key: 0|com.android.systemui|10001|ShareToApp|10243, entranceType: ENTRY_NOTIFICATION, score: 101.0, groupPriority: 0 type: LIVE, isSystemService: true, shouldShow: false, lockscreenShouldShow: false, sourceType: SOURCE_COMMON, remindLevel: 0, pkg: com.android.systemui, hostPkgName=com.android.systemui front: false, forceRebuild: false, liveDuration: false, InstantDuration: 5000, requestPanel: null, capsuleTimeOut: 300000, serviceTitleName: , overrideTransition: false level: 2, rusBaseData: RusBaseData(id='default_com.android.systemui_10001', updateStateEnable=0, canDelete=1, remindAlways=0, longClick='', cardImportance=-1, clickCustomAction=0, timeOutDuration=5,enableInSuperpower=0, autoPriority=0, customCapsuleDuration=-1,clickWhenAnim=0, panoramicAodEnable=1,notificationStyleList=,blackCallStyle=0, liveAlertScore=101.0,liveAlertLevel=0), showSize: VIEW_SIZE_NONE serviceFrom: 0, liveAlertState: SeedlingState(0), wrapperSize: 1] Line 8345: 07-31 10:25:57.205347 4622 4622 D PluginSeedling--Notification: NotificationController-->onNotificationListChanged, list = [LiveAlertModel: [key: 0|com.android.systemui|10001|ShareToApp|10243, entranceType: ENTRY_NOTIFICATION, score: 101.0, groupPriority: 0 type: LIVE, isSystemService: true, shouldShow: false, lockscreenShouldShow: false, sourceType: SOURCE_COMMON, remindLevel: 0, pkg: com.android.systemui, hostPkgName=com.android.systemui front: false, forceRebuild: false, liveDuration: false, InstantDuration: 5000, requestPanel: null, capsuleTimeOut: 300000, serviceTitleName: , overrideTransition: false level: 2, rusBaseData: RusBaseData(id='default_com.android.systemui_10001', updateStateEnable=0, canDelete=1, remindAlways=0, longClick='', cardImportance=-1, clickCustomAction=0, timeOutDuration=5,enableInSuperpower=0, autoPriority=0, customCapsuleDuration=-1,clickWhenAnim=0, panoramicAodEnable=1,notificationStyleList=,blackCallStyle=0, liveAlertScore=101.0,liveAlertLevel=0), showSize: VIEW_SIZE_NONE serviceFrom: 0, liveAlertState: SeedlingState(0), wrapperSize: 1] Line 18202: 07-31 10:25:59.114009 3282 5542 D OplusJobScheduleManager: scheduleOpTimeOut set oplus job timeout to 2 hour Line 18203: 07-31 10:25:59.114019 3282 5542 D JobServiceContext: scheduleOpTimeOut set job timeout ajustedTimeoutMillis = 7200000 Line 22375: 07-31 10:25:59.831511 13078 29841 I APS_CORE: [INFO][ LOGIC ] APSRefFrameProcessor.cpp: 1414 onUninitTimeOut() timer end callback to sendCmd APS_UNINIT_TIMEOUT Line 25755: 07-31 10:26:00.266656 3282 3347 D OplusJobScheduleManager: scheduleOpTimeOut set oplus job timeout to 2 hour Line 25756: 07-31 10:26:00.266703 3282 3347 D JobServiceContext: scheduleOpTimeOut set job timeout ajustedTimeoutMillis = 7200000 Line 30453: 07-31 10:26:01.631396 3282 3992 D OplusJobScheduleManager: scheduleOpTimeOut set oplus job timeout to 2 hour Line 30454: 07-31 10:26:01.631443 3282 3992 D JobServiceContext: scheduleOpTimeOut set job timeout ajustedTimeoutMillis = 7200000 Line 34052: 07-31 10:26:02.993770 3282 4836 D OplusJobScheduleManager: scheduleOpTimeOut set oplus job timeout to 2 hour Line 34053: 07-31 10:26:02.993850 3282 4836 D JobServiceContext: scheduleOpTimeOut set job timeout ajustedTimeoutMillis = 7200000 Line 40713: 07-31 10:27:01.023242 3282 3403 D OplusHansManager : handleServiceTimeOut curTime 1753928821023 stopTime 1753927243478 Line 42473: 07-31 10:27:31.540626 5145 5145 D GestureFailedStatisticHelper[u0]: GestureFailedStatisticHelper#sendTimeOutEventIfNeed: timeOutCountPortrait = 0, timeOutCountLandscape = 0 Line 42474: 07-31 10:27:31.540653 5145 5145 D GestureFailedStatisticHelper[u0]: GestureFailedStatisticHelper#sendTimeOutEventIfNeed: speedFailedCountPortrait = 0, speedFailedCountLandscape = 0 Line 42655: 07-31 10:27:31.575154 5145 5145 D TaskStateHelper: TaskStateChangeTimeOutListener[ON_TRANSITION_FINISH]: init. Line 43240: 07-31 10:27:31.598925 4622 4622 D PluginSeedling--Origin: ViewBuildTaskScheduler-->schedule ENTRY_STATUS_BAR current [LiveAlertModel: [key: 0|com.android.systemui|10001|ShareToApp|10243, entranceType: ENTRY_STATUS_BAR, score: 101.0, groupPriority: 0 type: LIVE, isSystemService: true, shouldShow: true, lockscreenShouldShow: true, sourceType: SOURCE_COMMON, remindLevel: 0, pkg: com.android.systemui, hostPkgName=com.android.systemui front: false, forceRebuild: false, liveDuration: false, InstantDuration: 5000, requestPanel: null, capsuleTimeOut: 300000, serviceTitleName: , overrideTransition: false level: 2, rusBaseData: RusBaseData(id='default_com.android.systemui_10001', updateStateEnable=0, canDelete=1, remindAlways=0, longClick='', cardImportance=-1, clickCustomAction=0, timeOutDuration=5,enableInSuperpower=0, autoPriority=0, customCapsuleDuration=-1,clickWhenAnim=0, panoramicAodEnable=1,notificationStyleList=,blackCallStyle=0, liveAlertScore=101.0,liveAlertLevel=0), showSize: VIEW_SIZE_SM serviceFrom: 0, liveAlertState: SeedlingState(0), wrapperSize: 2] sorted [LiveAlertModel: [key: 0|com.android.systemui|10001|ShareToApp|10243, entranceType: ENTRY_STATUS_BAR, score: 101.0, groupPriority: 0 type: LIVE, isSystemService: true, shouldShow: true, lockscreenShouldShow: true, sourceType: SOURCE_COMMON, remindLevel: 0, pkg: com.android.systemui, hostPkgName=com.android.systemui front: false, forceRebuild: false, liveDuration: false, InstantDuration: 5000, requestPanel: null, capsuleTimeOut: 300000, serviceTitleName: , overrideTransition: false level: 2, rusBaseData: RusBaseData(id='default_com.android.systemui_10001', updateStateEnable=0, canDelete=1, remindAlways=0, longClick='', cardImportance=-1, clickCustomAction=0, timeOutDuration=5,enableInSuperpower=0, autoPriority=0, customCapsuleDuration=-1,clickWhenAnim=0, panoramicAodEnable=1,notificationStyleList=,blackCallStyle=0, liveAlertScore=101.0,liveAlertLevel=0), showSize: VIEW_SIZE_SM serviceFrom: 0, liveAlertState: SeedlingState(0), wrapperSize: 2] removed []} Line 43241: 07-31 10:27:31.598961 4622 4622 I PluginSeedling--Origin: LiveAlertInteractorImpl-->notifyEntryDataChanged, result:[LiveAlertModel: [key: 0|com.android.systemui|10001|ShareToApp|10243, entranceType: ENTRY_STATUS_BAR, score: 101.0, groupPriority: 0 type: LIVE, isSystemService: true, shouldShow: true, lockscreenShouldShow: true, sourceType: SOURCE_COMMON, remindLevel: 0, pkg: com.android.systemui, hostPkgName=com.android.systemui front: false, forceRebuild: false, liveDuration: false, InstantDuration: 5000, requestPanel: null, capsuleTimeOut: 300000, serviceTitleName: , overrideTransition: false level: 2, rusBaseData: RusBaseData(id='default_com.android.systemui_10001', updateStateEnable=0, canDelete=1, remindAlways=0, longClick='', cardImportance=-1, clickCustomAction=0, timeOutDuration=5,enableInSuperpower=0, autoPriority=0, customCapsuleDuration=-1,clickWhenAnim=0, panoramicAodEnable=1,notificationStyleList=,blackCallStyle=0, liveAlertScore=101.0,liveAlertLevel=0), showSize: VIEW_SIZE_SM serviceFrom: 0, liveAlertState: SeedlingState(0), wrapperSize: 2] Line 43243: 07-31 10:27:31.599001 4622 4622 D PluginSeedling--Capsule: CapsulesRepository-->onDataChanged, hasSystem[true to true] size:1: [LiveAlertModel: [key: 0|com.android.systemui|10001|ShareToApp|10243, entranceType: ENTRY_STATUS_BAR, score: 101.0, groupPriority: 0 type: LIVE, isSystemService: true, shouldShow: true, lockscreenShouldShow: true, sourceType: SOURCE_COMMON, remindLevel: 0, pkg: com.android.systemui, hostPkgName=com.android.systemui front: false, forceRebuild: false, liveDuration: false, InstantDuration: 5000, requestPanel: null, capsuleTimeOut: 300000, serviceTitleName: , overrideTransition: false level: 2, rusBaseData: RusBaseData(id='default_com.android.systemui_10001', updateStateEnable=0, canDelete=1, remindAlways=0, longClick='', cardImportance=-1, clickCustomAction=0, timeOutDuration=5,enableInSuperpower=0, autoPriority=0, customCapsuleDuration=-1,clickWhenAnim=0, panoramicAodEnable=1,notificationStyleList=,blackCallStyle=0, liveAlertScore=101.0,liveAlertLevel=0), showSize: VIEW_SIZE_SM serviceFrom: 0, liveAlertState: SeedlingState(0), wrapperSize: 2] Line 43261: 07-31 10:27:31.599177 4622 4622 D PluginSeedling--CapsuleCard: CardsRepository-->onDataChanged, size:1:[LiveAlertModel: [key: 0|com.android.systemui|10001|ShareToApp|10243, entranceType: ENTRY_STATUS_BAR, score: 101.0, groupPriority: 0 type: LIVE, isSystemService: true, shouldShow: true, lockscreenShouldShow: true, sourceType: SOURCE_COMMON, remindLevel: 0, pkg: com.android.systemui, hostPkgName=com.android.systemui front: false, forceRebuild: false, liveDuration: false, InstantDuration: 5000, requestPanel: null, capsuleTimeOut: 300000, serviceTitleName: , overrideTransition: false level: 2, rusBaseData: RusBaseData(id='default_com.android.systemui_10001', updateStateEnable=0, canDelete=1, remindAlways=0, longClick='', cardImportance=-1, clickCustomAction=0, timeOutDuration=5,enableInSuperpower=0, autoPriority=0, customCapsuleDuration=-1,clickWhenAnim=0, panoramicAodEnable=1,notificationStyleList=,blackCallStyle=0, liveAlertScore=101.0,liveAlertLevel=0), showSize: VIEW_SIZE_SM serviceFrom: 0, liveAlertState: SeedlingState(0), wrapperSize: 2] Line 43265: 07-31 10:27:31.599290 4622 4622 D PluginSeedling--Origin: ViewBuildTaskScheduler-->schedule ENTRY_NOTIFICATION current [LiveAlertModel: [key: 0|com.android.systemui|10001|ShareToApp|10243, entranceType: ENTRY_NOTIFICATION, score: 101.0, groupPriority: 0 type: LIVE, isSystemService: true, shouldShow: false, lockscreenShouldShow: false, sourceType: SOURCE_COMMON, remindLevel: 0, pkg: com.android.systemui, hostPkgName=com.android.systemui front: false, forceRebuild: false, liveDuration: false, InstantDuration: 5000, requestPanel: null, capsuleTimeOut: 300000, serviceTitleName: , overrideTransition: false level: 2, rusBaseData: RusBaseData(id='default_com.android.systemui_10001', updateStateEnable=0, canDelete=1, remindAlways=0, longClick='', cardImportance=-1, clickCustomAction=0, timeOutDuration=5,enableInSuperpower=0, autoPriority=0, customCapsuleDuration=-1,clickWhenAnim=0, panoramicAodEnable=1,notificationStyleList=,blackCallStyle=0, liveAlertScore=101.0,liveAlertLevel=0), showSize: VIEW_SIZE_NONE serviceFrom: 0, liveAlertState: SeedlingState(0), wrapperSize: 1] sorted [LiveAlertModel: [key: 0|com.android.systemui|10001|ShareToApp|10243, entranceType: ENTRY_NOTIFICATION, score: 101.0, groupPriority: 0 type: LIVE, isSystemService: true, shouldShow: false, lockscreenShouldShow: false, sourceType: SOURCE_COMMON, remindLevel: 0, pkg: com.android.systemui, hostPkgName=com.android.systemui front: false, forceRebuild: false, liveDuration: false, InstantDuration: 5000, requestPanel: null, capsuleTimeOut: 300000, serviceTitleName: , overrideTransition: false level: 2, rusBaseData: RusBaseData(id='default_com.android.systemui_10001', updateStateEnable=0, canDelete=1, remindAlways=0, longClick='', cardImportance=-1, clickCustomAction=0, timeOutDuration=5,enableInSuperpower=0, autoPriority=0, customCapsuleDuration=-1,clickWhenAnim=0, panoramicAodEnable=1,notificationStyleList=,blackCallStyle=0, liveAlertScore=101.0,liveAlertLevel=0), showSize: VIEW_SIZE_NONE serviceFrom: 0, liveAlertState: SeedlingState(0), wrapperSize: 1] removed []} Line 43266: 07-31 10:27:31.599310 4622 4622 I PluginSeedling--Origin: LiveAlertInteractorImpl-->notifyEntryDataChanged, result:[LiveAlertModel: [key: 0|com.android.systemui|10001|ShareToApp|10243, entranceType: ENTRY_NOTIFICATION, score: 101.0, groupPriority: 0 type: LIVE, isSystemService: true, shouldShow: false, lockscreenShouldShow: false, sourceType: SOURCE_COMMON, remindLevel: 0, pkg: com.android.systemui, hostPkgName=com.android.systemui front: false, forceRebuild: false, liveDuration: false, InstantDuration: 5000, requestPanel: null, capsuleTimeOut: 300000, serviceTitleName: , overrideTransition: false level: 2, rusBaseData: RusBaseData(id='default_com.android.systemui_10001', updateStateEnable=0, canDelete=1, remindAlways=0, longClick='', cardImportance=-1, clickCustomAction=0, timeOutDuration=5,enableInSuperpower=0, autoPriority=0, customCapsuleDuration=-1,clickWhenAnim=0, panoramicAodEnable=1,notificationStyleList=,blackCallStyle=0, liveAlertScore=101.0,liveAlertLevel=0), showSize: VIEW_SIZE_NONE serviceFrom: 0, liveAlertState: SeedlingState(0), wrapperSize: 1] Line 43267: 07-31 10:27:31.599338 4622 4622 I PluginSeedling--Notification: NotificationRepository-->onDataChanged, [LiveAlertModel: [key: 0|com.android.systemui|10001|ShareToApp|10243, entranceType: ENTRY_NOTIFICATION, score: 101.0, groupPriority: 0 type: LIVE, isSystemService: true, shouldShow: false, lockscreenShouldShow: false, sourceType: SOURCE_COMMON, remindLevel: 0, pkg: com.android.systemui, hostPkgName=com.android.systemui front: false, forceRebuild: false, liveDuration: false, InstantDuration: 5000, requestPanel: null, capsuleTimeOut: 300000, serviceTitleName: , overrideTransition: false level: 2, rusBaseData: RusBaseData(id='default_com.android.systemui_10001', updateStateEnable=0, canDelete=1, remindAlways=0, longClick='', cardImportance=-1, clickCustomAction=0, timeOutDuration=5,enableInSuperpower=0, autoPriority=0, customCapsuleDuration=-1,clickWhenAnim=0, panoramicAodEnable=1,notificationStyleList=,blackCallStyle=0, liveAlertScore=101.0,liveAlertLevel=0), showSize: VIEW_SIZE_NONE serviceFrom: 0, liveAlertState: SeedlingState(0), wrapperSize: 1] Line 43268: 07-31 10:27:31.599361 4622 4622 D PluginSeedling--Notification: NotificationController-->onNotificationListChanged, list = [LiveAlertModel: [key: 0|com.android.systemui|10001|ShareToApp|10243, entranceType: ENTRY_NOTIFICATION, score: 101.0, groupPriority: 0 type: LIVE, isSystemService: true, shouldShow: false, lockscreenShouldShow: false, sourceType: SOURCE_COMMON, remindLevel: 0, pkg: com.android.systemui, hostPkgName=com.android.systemui front: false, forceRebuild: false, liveDuration: false, InstantDuration: 5000, requestPanel: null, capsuleTimeOut: 300000, serviceTitleName: , overrideTransition: false level: 2, rusBaseData: RusBaseData(id='default_com.android.systemui_10001', updateStateEnable=0, canDelete=1, remindAlways=0, longClick='', cardImportance=-1, clickCustomAction=0, timeOutDuration=5,enableInSuperpower=0, autoPriority=0, customCapsuleDuration=-1,clickWhenAnim=0, panoramicAodEnable=1,notificationStyleList=,blackCallStyle=0, liveAlertScore=101.0,liveAlertLevel=0), showSize: VIEW_SIZE_NONE serviceFrom: 0, liveAlertState: SeedlingState(0), wrapperSize: 1] Line 43826: 07-31 10:27:31.616210 5145 5145 D TaskStateHelper: TaskStateChangeTimeOutListener[ON_TO_HOME_TRANSITION_FINISH]: init. Line 45272: 07-31 10:27:31.786068 26127 31701 I Weather_Location_LocationController: startLocationWithTimeOut, forceLocation:false, needCityFromNet:true Line 45283: 07-31 10:27:31.794577 26127 31701 I Weather_Location_LocationController: startTimeOutCheck true Line 45754: 07-31 10:27:32.127559 5145 5145 I Launcher[u0]: startActivitySafely with mTransitionFinishTimeOutListener: isSpecialAppScene = false, isBetweenTransitionEndAndFinish = false, isSplitScreenGesture = false, call = false Line 46332: 07-31 10:27:32.170313 4622 4622 D PluginSeedling--Origin: ViewBuildTaskScheduler-->schedule ENTRY_STATUS_BAR current [LiveAlertModel: [key: 0|com.android.systemui|10001|ShareToApp|10243, entranceType: ENTRY_STATUS_BAR, score: 101.0, groupPriority: 0 type: LIVE, isSystemService: true, shouldShow: true, lockscreenShouldShow: true, sourceType: SOURCE_COMMON, remindLevel: 0, pkg: com.android.systemui, hostPkgName=com.android.systemui front: false, forceRebuild: false, liveDuration: false, InstantDuration: 5000, requestPanel: null, capsuleTimeOut: 300000, serviceTitleName: , overrideTransition: false level: 2, rusBaseData: RusBaseData(id='default_com.android.systemui_10001', updateStateEnable=0, canDelete=1, remindAlways=0, longClick='', cardImportance=-1, clickCustomAction=0, timeOutDuration=5,enableInSuperpower=0, autoPriority=0, customCapsuleDuration=-1,clickWhenAnim=0, panoramicAodEnable=1,notificationStyleList=,blackCallStyle=0, liveAlertScore=101.0,liveAlertLevel=0), showSize: VIEW_SIZE_SM serviceFrom: 0, liveAlertState: SeedlingState(0), wrapperSize: 2] sorted [LiveAlertModel: [key: 0|com.android.systemui|10001|ShareToApp|10243, entranceType: ENTRY_STATUS_BAR, score: 101.0, groupPriority: 0 type: LIVE, isSystemService: true, shouldShow: true, lockscreenShouldShow: true, sourceType: SOURCE_COMMON, remindLevel: 0, pkg: com.android.systemui, hostPkgName=com.android.systemui front: false, forceRebuild: false, liveDuration: false, InstantDuration: 5000, requestPanel: null, capsuleTimeOut: 300000, serviceTitleName: , overrideTransition: false level: 2, rusBaseData: RusBaseData(id='default_com.android.systemui_10001', updateStateEnable=0, canDelete=1, remindAlways=0, longClick='', cardImportance=-1, clickCustomAction=0, timeOutDuration=5,enableInSuperpower=0, autoPriority=0, customCapsuleDuration=-1,clickWhenAnim=0, panoramicAodEnable=1,notificationStyleList=,blackCallStyle=0, liveAlertScore=101.0,liveAlertLevel=0), showSize: VIEW_SIZE_SM serviceFrom: 0, liveAlertState: SeedlingState(0), wrapperSize: 2] removed []} Line 46354: 07-31 10:27:32.170431 4622 4622 I PluginSeedling--Origin: LiveAlertInteractorImpl-->notifyEntryDataChanged, result:[LiveAlertModel: [key: 0|com.android.systemui|10001|ShareToApp|10243, entranceType: ENTRY_STATUS_BAR, score: 101.0, groupPriority: 0 type: LIVE, isSystemService: true, shouldShow: true, lockscreenShouldShow: true, sourceType: SOURCE_COMMON, remindLevel: 0, pkg: com.android.systemui, hostPkgName=com.android.systemui front: false, forceRebuild: false, liveDuration: false, InstantDuration: 5000, requestPanel: null, capsuleTimeOut: 300000, serviceTitleName: , overrideTransition: false level: 2, rusBaseData: RusBaseData(id='default_com.android.systemui_10001', updateStateEnable=0, canDelete=1, remindAlways=0, longClick='', cardImportance=-1, clickCustomAction=0, timeOutDuration=5,enableInSuperpower=0, autoPriority=0, customCapsuleDuration=-1,clickWhenAnim=0, panoramicAodEnable=1,notificationStyleList=,blackCallStyle=0, liveAlertScore=101.0,liveAlertLevel=0), showSize: VIEW_SIZE_SM serviceFrom: 0, liveAlertState: SeedlingState(0), wrapperSize: 2] Line 46370: 07-31 10:27:32.170633 4622 4622 D PluginSeedling--Capsule: CapsulesRepository-->onDataChanged, hasSystem[true to true] size:1: [LiveAlertModel: [key: 0|com.android.systemui|10001|ShareToApp|10243, entranceType: ENTRY_STATUS_BAR, score: 101.0, groupPriority: 0 type: LIVE, isSystemService: true, shouldShow: true, lockscreenShouldShow: true, sourceType: SOURCE_COMMON, remindLevel: 0, pkg: com.android.systemui, hostPkgName=com.android.systemui front: false, forceRebuild: false, liveDuration: false, InstantDuration: 5000, requestPanel: null, capsuleTimeOut: 300000, serviceTitleName: , overrideTransition: false level: 2, rusBaseData: RusBaseData(id='default_com.android.systemui_10001', updateStateEnable=0, canDelete=1, remindAlways=0, longClick='', cardImportance=-1, clickCustomAction=0, timeOutDuration=5,enableInSuperpower=0, autoPriority=0, customCapsuleDuration=-1,clickWhenAnim=0, panoramicAodEnable=1,notificationStyleList=,blackCallStyle=0, liveAlertScore=101.0,liveAlertLevel=0), showSize: VIEW_SIZE_SM serviceFrom: 0, liveAlertState: SeedlingState(0), wrapperSize: 2] Line 46410: 07-31 10:27:32.172458 4622 4622 D PluginSeedling--CapsuleCard: CardsRepository-->onDataChanged, size:1:[LiveAlertModel: [key: 0|com.android.systemui|10001|ShareToApp|10243, entranceType: ENTRY_STATUS_BAR, score: 101.0, groupPriority: 0 type: LIVE, isSystemService: true, shouldShow: true, lockscreenShouldShow: true, sourceType: SOURCE_COMMON, remindLevel: 0, pkg: com.android.systemui, hostPkgName=com.android.systemui front: false, forceRebuild: false, liveDuration: false, InstantDuration: 5000, requestPanel: null, capsuleTimeOut: 300000, serviceTitleName: , overrideTransition: false level: 2, rusBaseData: RusBaseData(id='default_com.android.systemui_10001', updateStateEnable=0, canDelete=1, remindAlways=0, longClick='', cardImportance=-1, clickCustomAction=0, timeOutDuration=5,enableInSuperpower=0, autoPriority=0, customCapsuleDuration=-1,clickWhenAnim=0, panoramicAodEnable=1,notificationStyleList=,blackCallStyle=0, liveAlertScore=101.0,liveAlertLevel=0), showSize: VIEW_SIZE_SM serviceFrom: 0, liveAlertState: SeedlingState(0), wrapperSize: 2] Line 46413: 07-31 10:27:32.172599 4622 4622 D PluginSeedling--Origin: ViewBuildTaskScheduler-->schedule ENTRY_NOTIFICATION current [LiveAlertModel: [key: 0|com.android.systemui|10001|ShareToApp|10243, entranceType: ENTRY_NOTIFICATION, score: 101.0, groupPriority: 0 type: LIVE, isSystemService: true, shouldShow: false, lockscreenShouldShow: false, sourceType: SOURCE_COMMON, remindLevel: 0, pkg: com.android.systemui, hostPkgName=com.android.systemui front: false, forceRebuild: false, liveDuration: false, InstantDuration: 5000, requestPanel: null, capsuleTimeOut: 300000, serviceTitleName: , overrideTransition: false level: 2, rusBaseData: RusBaseData(id='default_com.android.systemui_10001', updateStateEnable=0, canDelete=1, remindAlways=0, longClick='', cardImportance=-1, clickCustomAction=0, timeOutDuration=5,enableInSuperpower=0, autoPriority=0, customCapsuleDuration=-1,clickWhenAnim=0, panoramicAodEnable=1,notificationStyleList=,blackCallStyle=0, liveAlertScore=101.0,liveAlertLevel=0), showSize: VIEW_SIZE_NONE serviceFrom: 0, liveAlertState: SeedlingState(0), wrapperSize: 1] sorted [LiveAlertModel: [key: 0|com.android.systemui|10001|ShareToApp|10243, entranceType: ENTRY_NOTIFICATION, score: 101.0, groupPriority: 0 type: LIVE, isSystemService: true, shouldShow: false, lockscreenShouldShow: false, sourceType: SOURCE_COMMON, remindLevel: 0, pkg: com.android.systemui, hostPkgName=com.android.systemui front: false, forceRebuild: false, liveDuration: false, InstantDuration: 5000, requestPanel: null, capsuleTimeOut: 300000, serviceTitleName: , overrideTransition: false level: 2, rusBaseData: RusBaseData(id='default_com.android.systemui_10001', updateStateEnable=0, canDelete=1, remindAlways=0, longClick='', cardImportance=-1, clickCustomAction=0, timeOutDuration=5,enableInSuperpower=0, autoPriority=0, customCapsuleDuration=-1,clickWhenAnim=0, panoramicAodEnable=1,notificationStyleList=,blackCallStyle=0, liveAlertScore=101.0,liveAlertLevel=0), showSize: VIEW_SIZE_NONE serviceFrom: 0, liveAlertState: SeedlingState(0), wrapperSize: 1] removed []} Line 46414: 07-31 10:27:32.172625 4622 4622 I PluginSeedling--Origin: LiveAlertInteractorImpl-->notifyEntryDataChanged, result:[LiveAlertModel: [key: 0|com.android.systemui|10001|ShareToApp|10243, entranceType: ENTRY_NOTIFICATION, score: 101.0, groupPriority: 0 type: LIVE, isSystemService: true, shouldShow: false, lockscreenShouldShow: false, sourceType: SOURCE_COMMON, remindLevel: 0, pkg: com.android.systemui, hostPkgName=com.android.systemui front: false, forceRebuild: false, liveDuration: false, InstantDuration: 5000, requestPanel: null, capsuleTimeOut: 300000, serviceTitleName: , overrideTransition: false level: 2, rusBaseData: RusBaseData(id='default_com.android.systemui_10001', updateStateEnable=0, canDelete=1, remindAlways=0, longClick='', cardImportance=-1, clickCustomAction=0, timeOutDuration=5,enableInSuperpower=0, autoPriority=0, customCapsuleDuration=-1,clickWhenAnim=0, panoramicAodEnable=1,notificationStyleList=,blackCallStyle=0, liveAlertScore=101.0,liveAlertLevel=0), showSize: VIEW_SIZE_NONE serviceFrom: 0, liveAlertState: SeedlingState(0), wrapperSize: 1] Line 46415: 07-31 10:27:32.172651 4622 4622 I PluginSeedling--Notification: NotificationRepository-->onDataChanged, [LiveAlertModel: [key: 0|com.android.systemui|10001|ShareToApp|10243, entranceType: ENTRY_NOTIFICATION, score: 101.0, groupPriority: 0 type: LIVE, isSystemService: true, shouldShow: false, lockscreenShouldShow: false, sourceType: SOURCE_COMMON, remindLevel: 0, pkg: com.android.systemui, hostPkgName=com.android.systemui front: false, forceRebuild: false, liveDuration: false, InstantDuration: 5000, requestPanel: null, capsuleTimeOut: 300000, serviceTitleName: , overrideTransition: false level: 2, rusBaseData: RusBaseData(id='default_com.android.systemui_10001', updateStateEnable=0, canDelete=1, remindAlways=0, longClick='', cardImportance=-1, clickCustomAction=0, timeOutDuration=5,enableInSuperpower=0, autoPriority=0, customCapsuleDuration=-1,clickWhenAnim=0, panoramicAodEnable=1,notificationStyleList=,blackCallStyle=0, liveAlertScore=101.0,liveAlertLevel=0), showSize: VIEW_SIZE_NONE serviceFrom: 0, liveAlertState: SeedlingState(0), wrapperSize: 1] Line 46416: 07-31 10:27:32.172670 4622 4622 D PluginSeedling--Notification: NotificationController-->onNotificationListChanged, list = [LiveAlertModel: [key: 0|com.android.systemui|10001|ShareToApp|10243, entranceType: ENTRY_NOTIFICATION, score: 101.0, groupPriority: 0 type: LIVE, isSystemService: true, shouldShow: false, lockscreenShouldShow: false, sourceType: SOURCE_COMMON, remindLevel: 0, pkg: com.android.systemui, hostPkgName=com.android.systemui front: false, forceRebuild: false, liveDuration: false, InstantDuration: 5000, requestPanel: null, capsuleTimeOut: 300000, serviceTitleName: , overrideTransition: false level: 2, rusBaseData: RusBaseData(id='default_com.android.systemui_10001', updateStateEnable=0, canDelete=1, remindAlways=0, longClick='', cardImportance=-1, clickCustomAction=0, timeOutDuration=5,enableInSuperpower=0, autoPriority=0, customCapsuleDuration=-1,clickWhenAnim=0, panoramicAodEnable=1,notificationStyleList=,blackCallStyle=0, liveAlertScore=101.0,liveAlertLevel=0), showSize: VIEW_SIZE_NONE serviceFrom: 0, liveAlertState: SeedlingState(0), wrapperSize: 1] Line 56567: 07-31 10:27:33.188508 1813 31765 I CamX : [ INFO][CORE ] camxsession.cpp:4826 ProcessCaptureRequest() Timed Wait Live Pending Requests(3198) Sequence Id 26 Live Pending Requests 5 Max Live Pending Requests 6 Live Pending Request TimeOut Extendor 100 Line 57196: 07-31 10:27:33.222698 1813 31765 I CamX : [ INFO][CORE ] camxsession.cpp:4826 ProcessCaptureRequest() Timed Wait Live Pending Requests(3198) Sequence Id 27 Live Pending Requests 5 Max Live Pending Requests 6 Live Pending Request TimeOut Extendor 100 Line 57823: 07-31 10:27:33.254113 1813 31765 I CamX : [ INFO][CORE ] camxsession.cpp:4826 ProcessCaptureRequest() Timed Wait Live Pending Requests(3198) Sequence Id 28 Live Pending Requests 5 Max Live Pending Requests 6 Live Pending Request TimeOut Extendor 100 Line 58889: 07-31 10:27:33.288123 1813 31765 I CamX : [ INFO][CORE ] camxsession.cpp:4826 ProcessCaptureRequest() Timed Wait Live Pending Requests(3198) Sequence Id 29 Live Pending Requests 5 Max Live Pending Requests 6 Live Pending Request TimeOut Extendor 100 Line 59594: 07-31 10:27:33.324043 1813 31765 I CamX : [ INFO][CORE ] camxsession.cpp:4826 ProcessCaptureRequest() Timed Wait Live Pending Requests(3198) Sequence Id 30 Live Pending Requests 5 Max Live Pending Requests 6 Live Pending Request TimeOut Extendor 100 Line 60153: 07-31 10:27:33.361532 1813 31765 I CamX : [ INFO][CORE ] camxsession.cpp:4826 ProcessCaptureRequest() Timed Wait Live Pending Requests(3198) Sequence Id 31 Live Pending Requests 5 Max Live Pending Requests 6 Live Pending Request TimeOut Extendor 100 Line 64539: 07-31 10:27:34.188595 1813 31765 I CamX : [ INFO][CORE ] camxsession.cpp:4826 ProcessCaptureRequest() Timed Wait Live Pending Requests(3198) Sequence Id 57 Live Pending Requests 5 Max Live Pending Requests 6 Live Pending Request TimeOut Extendor 100 Line 65244: 07-31 10:27:34.225367 1813 31765 I CamX : [ INFO][CORE ] camxsession.cpp:4826 ProcessCaptureRequest() Timed Wait Live Pending Requests(3198) Sequence Id 58 Live Pending Requests 5 Max Live Pending Requests 6 Live Pending Request TimeOut Extendor 100 Line 65823: 07-31 10:27:34.277986 1813 31765 I CamX : [ INFO][CORE ] camxsession.cpp:4826 ProcessCaptureRequest() Timed Wait Live Pending Requests(3198) Sequence Id 59 Live Pending Requests 5 Max Live Pending Requests 6 Live Pending Request TimeOut Extendor 100 Line 66316: 07-31 10:27:34.312580 1813 31765 I CamX : [ INFO][CORE ] camxsession.cpp:4826 ProcessCaptureRequest() Timed Wait Live Pending Requests(3198) Sequence Id 60 Live Pending Requests 5 Max Live Pending Requests 6 Live Pending Request TimeOut Extendor 100 Line 66933: 07-31 10:27:34.343979 1813 31765 I CamX : [ INFO][CORE ] camxsession.cpp:4826 ProcessCaptureRequest() Timed Wait Live Pending Requests(3198) Sequence Id 61 Live Pending Requests 5 Max Live Pending Requests 6 Live Pending Request TimeOut Extendor 100 Line 67172: 07-31 10:27:34.346706 1813 31765 I CamX : [ INFO][CORE ] camxsession.cpp:4826 ProcessCaptureRequest() Timed Wait Live Pending Requests(3198) Sequence Id 62 Live Pending Requests 5 Max Live Pending Requests 6 Live Pending Request TimeOut Extendor 100 Line 67563: 07-31 10:27:34.379080 1813 31765 I CamX : [ INFO][CORE ] camxsession.cpp:4826 ProcessCaptureRequest() Timed Wait Live Pending Requests(3198) Sequence Id 63 Live Pending Requests 5 Max Live Pending Requests 6 Live Pending Request TimeOut Extendor 100 Line 68958: 07-31 10:27:34.855372 13078 13978 D OCAM_CheckCaptureState: setState, state: 0 => 1, mbTimeOut: false, key: com.oplus.precapture.state Line 70203: 07-31 10:27:34.957501 13078 13978 D OCAM_CheckCaptureState: setState, state: 1 => 0, mbTimeOut: false, key: com.oplus.precapture.state Line 71801: 07-31 10:27:35.192321 1813 31765 I CamX : [ INFO][CORE ] camxsession.cpp:4826 ProcessCaptureRequest() Timed Wait Live Pending Requests(3198) Sequence Id 86 Live Pending Requests 5 Max Live Pending Requests 6 Live Pending Request TimeOut Extendor 100 Line 72639: 07-31 10:27:35.222136 1813 31765 I CamX : [ INFO][CORE ] camxsession.cpp:4826 ProcessCaptureRequest() Timed Wait Live Pending Requests(3198) Sequence Id 87 Live Pending Requests 5 Max Live Pending Requests 6 Live Pending Request TimeOut Extendor 100 Line 73493: 07-31 10:27:35.254041 1813 31765 I CamX : [ INFO][CORE ] camxsession.cpp:4826 ProcessCaptureRequest() Timed Wait Live Pending Requests(3198) Sequence Id 88 Live Pending Requests 5 Max Live Pending Requests 6 Live Pending Request TimeOut Extendor 100 Line 74406: 07-31 10:27:35.295788 1813 31765 I CamX : [ INFO][CORE ] camxsession.cpp:4826 ProcessCaptureRequest() Timed Wait Live Pending Requests(3198) Sequence Id 89 Live Pending Requests 5 Max Live Pending Requests 6 Live Pending Request TimeOut Extendor 100 高通日志分析
08-12
跟网型逆变器小干扰稳定性分析与控制策略优化研究(Simulink仿真实现)内容概要:本文围绕跟网型逆变器的小干扰稳定性展开分析,重点研究其在电力系统中的动态响应特性及控制策略优化问题。通过构建基于Simulink的仿真模型,对逆变器在不同工况下的小信号稳定性进行建模与分析,识别系统可能存在的振荡风险,并提出相应的控制优化方法以提升系统稳定性和动态性能。研究内容涵盖数学建模、稳定性判据分析、控制器设计与参数优化,并结合仿真验证所提策略的有效性,为新能源并网系统的稳定运行提供理论支持和技术参考。; 适合人群:具备电力电子、自动控制或电力系统相关背景,熟悉Matlab/Simulink仿真工具,从事新能源并网、微电网或电力系统稳定性研究的研究生、科研人员及工程技术人员。; 使用场景及目标:① 分析跟网型逆变器在弱电网条件下的小干扰稳定性问题;② 设计并优化逆变器外环与内环控制器以提升系统阻尼特性;③ 利用Simulink搭建仿真模型验证理论分析与控制策略的有效性;④ 支持科研论文撰写、课题研究或工程项目中的稳定性评估与改进。; 阅读建议:建议读者结合文中提供的Simulink仿真模型,深入理解状态空间建模、特征值分析及控制器设计过程,重点关注控制参数变化对系统极点分布的影响,并通过动手仿真加深对小干扰稳定性机理的认识。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值