26#include <unordered_map>
29#include <google/protobuf/util/message_differencer.h>
30#include <pcl/common/transforms.h>
32#include <boost/thread/locks.hpp>
33#include <boost/thread/shared_mutex.hpp>
35#include "pcl/point_cloud.h"
36#include "pcl/point_types.h"
38#include "modules/common_msgs/localization_msgs/localization.pb.h"
39#include "modules/common_msgs/sensor_msgs/pointcloud.pb.h"
40#include "modules/common_msgs/transform_msgs/transform.pb.h"
41#include "modules/dreamview_plus/proto/data_handler.pb.h"
42#include "modules/common_msgs/perception_msgs/perception_obstacle.pb.h"
61 std::shared_ptr<cyber::Reader<apollo::perception::PerceptionEdgeInfo>>
66 std::unique_ptr<cyber::Timer>
timer_;
83class PointCloudUpdater :
public UpdaterWithChannelsBase {
91 explicit PointCloudUpdater(WebSocketHandler *websocket);
102 const std::string &channel_name =
"",
103 nlohmann::json *subscribe_param =
nullptr)
override;
104 void StopStream(
const std::string& channel_name =
"")
override;
105 void OnTimer(
const std::string& channel_name =
"");
106 void PublishMessage(
const std::string& channel_name =
"")
override;
113 static boost::shared_mutex
mutex_;
116 void UpdatePerceptionEdge(
117 const std::shared_ptr<apollo::perception::PerceptionEdgeInfo>
119 const std::string &channel_name);
120 void UpdatePointCloud(
const std::shared_ptr<drivers::PointCloud> &point_cloud,
121 const std::string &channel_name);
123 void FilterPointCloud(pcl::PointCloud<pcl::PointXYZ>::Ptr pcl_ptr,
124 const std::string &channel_name);
126 void UpdateLocalizationTime(
127 const std::shared_ptr<apollo::localization::LocalizationEstimate>
129 pcl::PointCloud<pcl::PointXYZ>::Ptr ConvertPCLPointCloud(
130 const std::shared_ptr<drivers::PointCloud> &point_cloud,
131 const std::string &channel_name);
134 const std::string &channel_name);
136 void TransformPointCloud(pcl::PointCloud<pcl::PointXYZ>::Ptr &point_cloud,
137 const std::string &frame_id);
139 constexpr static float kDefaultLidarHeight = 1.91f;
141 std::unique_ptr<cyber::Node> node_;
145 bool enabled_ =
false;
149 std::shared_ptr<cyber::Reader<apollo::localization::LocalizationEstimate>>
150 localization_reader_;
151 std::map<std::string, PointCloudChannelUpdater *> channel_updaters_;
152 double last_localization_time_ = 0.0;
153 bool enable_voxel_filter_ =
false;
155 std::mutex channel_updater_map_mutex_;
void StopStream(const std::string &channel_name="") override
Stop data flow.
static boost::shared_mutex mutex_
static float lidar_height_
void StartStream(const double &time_interval_ms, const std::string &channel_name="", nlohmann::json *subscribe_param=nullptr) override
Start data flow.
void Stop()
Starts to push PointCloud to frontend.
void OnTimer(const std::string &channel_name="")
void PublishMessage(const std::string &channel_name="") override
Publish Message to dreamview frontend.
void GetChannelMsg(std::vector< std::string > *channels) override
GetChannelMsg
The WebSocketHandler, built on top of CivetWebSocketHandler, is a websocket handler that handles diff...
Some string util functions.
PointCloudChannelUpdater(std::string channel_name)
std::atomic< bool > future_ready_
double last_point_cloud_time_
std::shared_ptr< cyber::Reader< apollo::perception::PerceptionEdgeInfo > > perception_edge_reader_
std::string cur_channel_name_
std::shared_ptr< cyber::Reader< drivers::PointCloud > > point_cloud_reader_
std::future< void > async_future_
std::unique_ptr< cyber::Timer > timer_
std::string point_cloud_str_