Apollo 10.0
自动驾驶开放平台
apollo::cyber::LidarPointcloud类 参考

#include <lidar_pointcloud.h>

类 apollo::cyber::LidarPointcloud 继承关系图:
apollo::cyber::LidarPointcloud 的协作图:

Public 成员函数

 LidarPointcloud ()
 
 ~LidarPointcloud ()
 
virtual bool ConvertMsg (InputTypes< InputMsgPtr > &, OutputTypes< OutputMsgPtr > &)
 convert the message between ros and apollo
 
- Public 成员函数 继承自 apollo::cyber::RosApolloMessageConverter< InputTypes< InputMsgPtr >, OutputTypes< OutputMsgPtr > >
 RosApolloMessageConverter ()
 
 RosApolloMessageConverter ()
 
 ~RosApolloMessageConverter () override
 
 ~RosApolloMessageConverter () override
 
bool Init () override
 
bool Init () override
 
- Public 成员函数 继承自 apollo::cyber::MessageConverter
 MessageConverter ()
 
virtual ~MessageConverter ()
 
bool IsInit () const
 

额外继承的成员函数

- Protected 成员函数 继承自 apollo::cyber::RosApolloMessageConverter< InputTypes< InputMsgPtr >, OutputTypes< OutputMsgPtr > >
virtual bool ConvertMsg (const std::shared_ptr< InputTypes< InputMsgPtr > > &ros_msg0, const std::shared_ptr< OutputTypes< OutputMsgPtr > > &ros_msg1, const std::shared_ptr< NullType > &ros_msg2, const std::shared_ptr< NullType > &ros_msg3, std::shared_ptr< NullType > &apollo_msg0, std::shared_ptr< NullType > &apollo_msg1, std::shared_ptr< NullType > &apollo_msg2, std::shared_ptr< NullType > &apollo_msg3)=0
 
virtual bool ConvertMsg (InputTypes &input, OutputTypes &output)=0
 
- Protected 成员函数 继承自 apollo::cyber::MessageConverter
bool LoadConfig (ConverterConf *config)
 
- Protected 属性 继承自 apollo::cyber::MessageConverter
std::atomic< bool > init_
 
std::unique_ptr< apollo::cyber::Nodecyber_node_
 
std::vector< std::shared_ptr< apollo::cyber::proto::RoleAttributes > > apollo_attrs_
 
std::vector< std::shared_ptr< apollo::cyber::ReaderBase > > apollo_readers_
 
std::vector< std::shared_ptr< apollo::cyber::WriterBase > > apollo_writers_
 
const std::string node_name_ = "converter_base"
 
ConverterConf converter_conf_
 

详细描述

在文件 lidar_pointcloud.h50 行定义.

构造及析构函数说明

◆ LidarPointcloud()

apollo::cyber::LidarPointcloud::LidarPointcloud ( )
inline

在文件 lidar_pointcloud.h54 行定义.

54{}

◆ ~LidarPointcloud()

apollo::cyber::LidarPointcloud::~LidarPointcloud ( )
inline

在文件 lidar_pointcloud.h55 行定义.

55{}

成员函数说明

◆ ConvertMsg()

bool apollo::cyber::LidarPointcloud::ConvertMsg ( InputTypes< InputMsgPtr > &  in,
OutputTypes< OutputMsgPtr > &  out 
)
virtual

convert the message between ros and apollo

参数
InputMsgPtrshared pointer of input message
OutputMsgPtrshared pointer of output message
返回
result, true for success

在文件 lidar_pointcloud.cc170 行定义.

171 {
172#ifdef ENABLE_ROS_MSG
173 auto in_msg = std::get<0>(in.values);
174 auto out_msg = std::get<0>(out.values);
175 float x, y, z;
176 float intensity = -1.0;
177 double timestamp = 0.0;
178 auto& cloud_msg = (*in_msg);
179
180 bool has_x = false, has_y = false, has_z = false, has_intensity = false,
181 has_time = false;
182 std::string time_field_name;
183 sensor_msgs::msg::PointField time_field_type;
184 sensor_msgs::msg::PointField intensity_field_type;
185 for (const auto& field : cloud_msg.fields) {
186 if (field.name == "x") has_x = true;
187 if (field.name == "y") has_y = true;
188 if (field.name == "z") has_z = true;
189 if (field.name == "intensity") {
190 has_intensity = true;
191 intensity_field_type = field;
192 }
193 if (field.name == "t" || field.name == "time" ||
194 field.name == "timestamp") {
195 has_time = true;
196 time_field_type = field;
197 time_field_name = field.name;
198 }
199 }
200 if (!(has_x && has_y && has_z)) {
201 AERROR << "PointCloud2 does not contain x, y, z fields.";
202 return false;
203 }
204
205 sensor_msgs::PointCloud2ConstIterator<float> iter_x(cloud_msg, "x");
206 sensor_msgs::PointCloud2ConstIterator<float> iter_y(cloud_msg, "y");
207 sensor_msgs::PointCloud2ConstIterator<float> iter_z(cloud_msg, "z");
208
209 for (; iter_x != iter_x.end(); ++iter_x, ++iter_y, ++iter_z) {
210 x = *iter_x;
211 y = *iter_y;
212 z = *iter_z;
213
214 auto pointcloud = out_msg->add_point();
215 pointcloud->set_x(x);
216 pointcloud->set_y(y);
217 pointcloud->set_z(z);
218 }
219 if (has_time) {
220 ParseField(time_field_type, out_msg, time_field_name, cloud_msg);
221 }
222 if (has_intensity) {
223 ParseField(intensity_field_type, out_msg, "intensity", cloud_msg);
224 }
225#endif
226 return true;
227}
#define AERROR
Definition log.h:44

该类的文档由以下文件生成: