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"
63 std::unique_ptr<cyber::Timer>
timer_;
79class PointCloudUpdater :
public UpdaterWithChannelsBase {
87 explicit PointCloudUpdater(WebSocketHandler *websocket);
98 const std::string &channel_name =
"",
99 nlohmann::json *subscribe_param =
nullptr)
override;
100 void StopStream(
const std::string& channel_name =
"")
override;
101 void OnTimer(
const std::string& channel_name =
"");
102 void PublishMessage(
const std::string& channel_name =
"")
override;
109 static boost::shared_mutex
mutex_;
112 void UpdatePointCloud(
const std::shared_ptr<drivers::PointCloud> &point_cloud,
113 const std::string &channel_name);
115 void FilterPointCloud(pcl::PointCloud<pcl::PointXYZ>::Ptr pcl_ptr,
116 const std::string &channel_name);
118 void UpdateLocalizationTime(
119 const std::shared_ptr<apollo::localization::LocalizationEstimate>
121 pcl::PointCloud<pcl::PointXYZ>::Ptr ConvertPCLPointCloud(
122 const std::shared_ptr<drivers::PointCloud> &point_cloud,
123 const std::string &channel_name);
126 const std::string &channel_name);
128 void TransformPointCloud(pcl::PointCloud<pcl::PointXYZ>::Ptr &point_cloud,
129 const std::string &frame_id);
131 constexpr static float kDefaultLidarHeight = 1.91f;
133 std::unique_ptr<cyber::Node> node_;
137 bool enabled_ =
false;
141 std::shared_ptr<cyber::Reader<apollo::localization::LocalizationEstimate>>
142 localization_reader_;
143 std::map<std::string, PointCloudChannelUpdater *> channel_updaters_;
144 double last_localization_time_ = 0.0;
145 bool enable_voxel_filter_ =
false;
147 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::string curr_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_