Apollo 10.0
自动驾驶开放平台
perception_camera_updater.h
浏览该文件的文档.
1/******************************************************************************
2 * Copyright 2019 The Apollo Authors. All Rights Reserved.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 *****************************************************************************/
16
17#pragma once
18
19#include <deque>
20#include <map>
21#include <memory>
22#include <string>
23#include <vector>
24
25#include "Eigen/Dense"
26
27#include "modules/common_msgs/localization_msgs/localization.pb.h"
28#include "modules/common_msgs/localization_msgs/pose.pb.h"
29#include "modules/common_msgs/perception_msgs/perception_obstacle.pb.h"
30#include "modules/common_msgs/sensor_msgs/sensor_image.pb.h"
31#include "modules/common_msgs/transform_msgs/transform.pb.h"
32#include "modules/dreamview/proto/camera_update.pb.h"
33#include "modules/dreamview_plus/proto/data_handler.pb.h"
34
35#include "cyber/cyber.h"
40
41namespace apollo {
42namespace dreamview {
43
45 std::string curr_channel_name_;
47 std::shared_ptr<cyber::Reader<drivers::Image>> perception_camera_reader_;
48 std::shared_ptr<cyber::Reader<apollo::perception::PerceptionObstacles>>
50 std::vector<uint8_t> image_buffer_;
51 CameraUpdate camera_update_;
53 std::unique_ptr<cyber::Timer> timer_;
54 std::deque<std::shared_ptr<apollo::localization::LocalizationEstimate>>
56 std::mutex obstacle_mutex_;
57 std::mutex image_mutex_;
59 std::vector<apollo::perception::BBox2D> bbox2ds;
60 std::vector<int32_t> obstacle_id;
61 std::vector<int32_t> obstacle_sub_type;
63 explicit CameraChannelUpdater(std::string channel_name)
64 : curr_channel_name_(channel_name),
68 enabled_(false) {}
69};
70
71class PerceptionCameraUpdater : public UpdaterWithChannelsBase {
72 public:
81 void Stop();
82 void StartStream(const double &time_interval_ms,
83 const std::string &channel_name = "",
84 nlohmann::json *subscribe_param = nullptr) override;
85 void StopStream(const std::string& channel_name = "") override;
86 void OnTimer(const std::string& channel_name = "");
87 void PublishMessage(const std::string& channel_name = "") override;
88
89
90 void GetUpdate(std::string *camera_update, const std::string& channel_name);
91
92 void GetChannelMsg(std::vector<std::string> *channels) override;
93
94 private:
95 static constexpr double kImageScale = 0.6;
96 void InitReaders();
97 void OnCompressedImage(
98 const std::shared_ptr<apollo::drivers::CompressedImage> &image);
99 void OnImage(const std::shared_ptr<apollo::drivers::Image> &image,
100 const std::string &channel_name);
101 void OnLocalization(
102 const std::shared_ptr<apollo::localization::LocalizationEstimate> &loc);
103 void OnObstacles(
104 const std::shared_ptr<apollo::perception::PerceptionObstacles>& obstacles,
105 const std::string &channel_name);
111 void GetImageLocalization(std::vector<double> *localization,
112 const std::string &channel_name);
113
114 apollo::transform::Buffer *tf_buffer_ = apollo::transform::Buffer::Instance();
115 bool QueryStaticTF(const std::string &frame_id,
116 const std::string &child_frame_id,
117 Eigen::Matrix4d *matrix);
118 void GetLocalization2CameraTF(std::vector<double> *localization2camera_tf);
119 std::shared_ptr<cyber::Reader<apollo::perception::PerceptionObstacles>>
120 GetObstacleReader(const std::string &channel_name);
121 CameraChannelUpdater *GetCameraChannelUpdater(
122 const std::string &channel_name);
123
124 WebSocketHandler *websocket_;
125
126 bool perception_obstacle_enable_ = false;
127
128 std::unique_ptr<cyber::Node> node_;
129 std::map<std::string, CameraChannelUpdater *> channel_updaters_;
130 std::mutex channel_updater_map_mutex_;
131};
132
133} // namespace dreamview
134} // namespace apollo
A module that collects camera image and localization (by collecting localization & static transforms)...
void OnTimer(const std::string &channel_name="")
void StartStream(const double &time_interval_ms, const std::string &channel_name="", nlohmann::json *subscribe_param=nullptr) override
Start data flow.
void GetChannelMsg(std::vector< std::string > *channels) override
GetChannelMsg
PerceptionCameraUpdater(WebSocketHandler *websocket)
void PublishMessage(const std::string &channel_name="") override
Publish Message to dreamview frontend.
void StopStream(const std::string &channel_name="") override
Stop data flow.
The WebSocketHandler, built on top of CivetWebSocketHandler, is a websocket handler that handles diff...
class register implement
Definition arena_queue.h:37
std::vector< apollo::perception::BBox2D > bbox2ds
std::shared_ptr< cyber::Reader< apollo::perception::PerceptionObstacles > > perception_obstacle_reader_
std::shared_ptr< cyber::Reader< drivers::Image > > perception_camera_reader_
std::deque< std::shared_ptr< apollo::localization::LocalizationEstimate > > localization_queue_