34 const std::shared_ptr<onboard::CameraFrame> &frame,
36 static uint32_t seq_num = 0;
37 auto header = obstacles->mutable_header();
39 header->set_module_name(
"perception_camera");
40 header->set_sequence_num(seq_num++);
42 header->set_lidar_timestamp(
static_cast<uint64_t
>(frame->timestamp * 1e9));
43 header->set_camera_timestamp(
static_cast<uint64_t
>(frame->timestamp * 1e9));
47 for (
const auto &obj : frame->detected_objects) {
50 AERROR <<
"ConvertObjectToPb failed, Object:" << obj->ToString();
58 const std::shared_ptr<onboard::SensorFrameMessage> &msg,
60 auto header = obstacles->mutable_header();
62 header->set_module_name(
"perception_obstacle");
63 header->set_sequence_num(msg->seq_num_);
64 header->set_lidar_timestamp(msg->lidar_timestamp_);
65 header->set_camera_timestamp(0);
66 header->set_radar_timestamp(0);
69 if (msg !=
nullptr && msg->frame_ !=
nullptr) {
70 for (
const auto &obj : msg->frame_->objects) {
73 AERROR <<
"ConvertObjectToPb failed, Object:" << obj->ToString();
82 const std::shared_ptr<onboard::LidarFrameMessage> &msg,
84 static uint32_t seq_num = 0;
85 auto header = obstacles->mutable_header();
87 header->set_module_name(
"perception_lidar");
88 header->set_sequence_num(seq_num++);
89 header->set_lidar_timestamp(msg->lidar_timestamp_);
90 header->set_camera_timestamp(0);
91 header->set_radar_timestamp(0);
96 for (
const auto &obj : msg->lidar_frame_.get()->segmented_objects) {
97 Eigen::Vector3d trans_point(obj->center(0), obj->center(1), obj->center(2));
98 trans_point = msg->lidar_frame_.get()->lidar2world_pose * trans_point;
99 obj->center(0) = trans_point[0];
100 obj->center(1) = trans_point[1];
101 obj->center(2) = trans_point[2];
103 for (
size_t i = 0; i < obj->polygon.size(); ++i) {
104 auto &pt = obj->polygon[i];
105 Eigen::Vector3d trans_point_polygon(pt.x, pt.y, pt.z);
106 trans_point_polygon =
107 msg->lidar_frame_.get()->lidar2world_pose * trans_point_polygon;
108 pt.x = trans_point_polygon[0];
109 pt.y = trans_point_polygon[1];
110 pt.z = trans_point_polygon[2];
115 cloud_world.
resize(obj->lidar_supplement.cloud.size());
116 for (
size_t i = 0; i < obj->lidar_supplement.cloud.size(); ++i) {
117 Eigen::Vector3d pt(obj->lidar_supplement.cloud[i].x,
118 obj->lidar_supplement.cloud[i].y,
119 obj->lidar_supplement.cloud[i].z);
120 Eigen::Vector3d pt_world = msg->lidar_frame_.get()->lidar2world_pose * pt;
121 cloud_world[i].x = pt_world(0);
122 cloud_world[i].y = pt_world(1);
123 cloud_world[i].z = pt_world(2);
124 cloud_world[i].intensity = obj->lidar_supplement.cloud[i].intensity;
127 for (
size_t i = 0; i < obj->lidar_supplement.cloud.size(); ++i) {
129 obj->lidar_supplement.cloud.points_height(i));
132 Eigen::Vector3d trans_anchor_point(obj->anchor_point(0),
133 obj->anchor_point(1),
134 obj->anchor_point(2));
136 msg->lidar_frame_.get()->lidar2world_pose * trans_anchor_point;
137 obj->anchor_point(0) = trans_anchor_point[0];
138 obj->anchor_point(1) = trans_anchor_point[1];
139 obj->anchor_point(2) = trans_anchor_point[2];
141 obj->track_id =
id++;
144 for (
const auto &obj : msg->lidar_frame_.get()->segmented_objects) {
147 AERROR <<
"ConvertObjectToPb failed, Object:" << obj->ToString();