|
@@ -298,7 +298,7 @@ void Livox_driver::livox_device_change_callback(const DeviceInfo *p_info, Device
|
|
|
//获取欧拉角(笛卡尔坐标)的回调函数。在 livox_device_change_callback 连接成功之后使用 LidarGetExtrinsicParameter 来设置回调函数。
|
|
|
//雷达接受到查询指令后,会调用 livox_get_extrinsic_parameter_callback 来返回 LidarGetExtrinsicParameterResponse 的指针. 里面就有 欧拉角(笛卡尔坐标)
|
|
|
//本函数由livox后台线程来执行. 每个雷达只需要调用一次.
|
|
|
-void Livox_driver::livox_get_extrinsic_parameter_callback(uint8_t status,
|
|
|
+void Livox_driver::livox_get_extrinsic_parameter_callback(livox_status status,
|
|
|
uint8_t handle,
|
|
|
LidarGetExtrinsicParameterResponse *response,
|
|
|
void *client_data)
|
|
@@ -359,35 +359,83 @@ void Livox_driver::livox_data_callback(uint8_t handle, LivoxEthPacket *data, uin
|
|
|
std::map<uint8_t, CLivoxLaser *> &t_handle_laser_map = Livox_driver::get_instance_references().m_handle_laser_map;
|
|
|
CLivoxLaser *tp_livox_laser = t_handle_laser_map[handle];
|
|
|
|
|
|
+
|
|
|
if (data && tp_livox_laser)
|
|
|
{
|
|
|
- //判断是否采集完成
|
|
|
- if (tp_livox_laser->is_scan_complete())
|
|
|
+// if(data ->data_type == kCartesian) {
|
|
|
+// LivoxRawPoint *p_point_data = (LivoxRawPoint *)data->data;
|
|
|
+// }else if ( data ->data_type == kSpherical) {
|
|
|
+// LivoxSpherPoint *p_point_data = (LivoxSpherPoint *)data->data;
|
|
|
+// }else if ( data ->data_type == kExtendCartesian) {
|
|
|
+// LivoxExtendRawPoint *p_point_data = (LivoxExtendRawPoint *)data->data;
|
|
|
+// }else if ( data ->data_type == kExtendSpherical) {
|
|
|
+// LivoxExtendSpherPoint *p_point_data = (LivoxExtendSpherPoint *)data->data;
|
|
|
+// }else if ( data ->data_type == kDualExtendCartesian) {
|
|
|
+// LivoxDualExtendRawPoint *p_point_data = (LivoxDualExtendRawPoint *)data->data;
|
|
|
+// }else if ( data ->data_type == kDualExtendSpherical) {
|
|
|
+// LivoxDualExtendSpherPoint *p_point_data = (LivoxDualExtendSpherPoint *)data->data;
|
|
|
+// }else if ( data ->data_type == kImu) {
|
|
|
+// LivoxImuPoint *p_point_data = (LivoxImuPoint *)data->data;
|
|
|
+// }else if ( data ->data_type == kTripleExtendCartesian) {
|
|
|
+// LivoxTripleExtendRawPoint *p_point_data = (LivoxTripleExtendRawPoint *)data->data;
|
|
|
+// }else if ( data ->data_type == kTripleExtendSpherical) {
|
|
|
+// LivoxTripleExtendSpherPoint *p_point_data = (LivoxTripleExtendSpherPoint *)data->data;
|
|
|
+// }
|
|
|
+
|
|
|
+
|
|
|
+ if(data ->data_type == kCartesian)
|
|
|
{
|
|
|
- //按照指定的帧数来采集,到点就停止.
|
|
|
- tp_livox_laser->stop_scan();
|
|
|
- //注注注注注意了:stop_scan会调用 LidarStopSampling 通知livox后台线程停止扫描.
|
|
|
- // 但是这个是有延迟的.会导致数据回调函数 livox_data_callback 仍然会调用3~5次.
|
|
|
- // 因此这里会反复调用 stop_scan
|
|
|
- return;
|
|
|
- }
|
|
|
- //data实际就是一个数据指针,里面包含data_num个三维点. data_num默认为100个
|
|
|
- LivoxRawPoint *p_point_data = (LivoxRawPoint *)data->data;
|
|
|
+ //判断是否采集完成
|
|
|
+ if (tp_livox_laser->is_scan_complete())
|
|
|
+ {
|
|
|
+ //按照指定的帧数来采集,到点就停止.
|
|
|
+ tp_livox_laser->stop_scan();
|
|
|
+ //注注注注注意了:stop_scan会调用 LidarStopSampling 通知livox后台线程停止扫描.
|
|
|
+ // 但是这个是有延迟的.会导致数据回调函数 livox_data_callback 仍然会调用3~5次.
|
|
|
+ // 因此这里会反复调用 stop_scan
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ //data实际就是一个数据指针,里面包含data_num个三维点. data_num默认为100个
|
|
|
+ LivoxRawPoint *p_point_data = (LivoxRawPoint *)data->data;
|
|
|
|
|
|
- //把雷达数据填充到livox数据缓存,此时里面是没有解析的原始数据. data_num默认为100个
|
|
|
- Binary_buf* data_bin = new Binary_buf((char*)p_point_data, data_num * sizeof(LivoxRawPoint));
|
|
|
- tp_livox_laser->push_livox_data(data_bin);
|
|
|
+ //把雷达数据填充到livox数据缓存,此时里面是没有解析的原始数据. data_num默认为100个
|
|
|
+ Binary_buf* data_bin = new Binary_buf((char*)p_point_data, data_num * sizeof(LivoxRawPoint));
|
|
|
+ tp_livox_laser->push_livox_data(data_bin);
|
|
|
|
|
|
- tp_livox_laser->add_livox_frame(1);
|
|
|
+ tp_livox_laser->add_livox_frame(1);
|
|
|
+ }
|
|
|
+ else if ( data ->data_type == kExtendCartesian)
|
|
|
+ {
|
|
|
+ //判断是否采集完成
|
|
|
+ if (tp_livox_laser->is_scan_complete())
|
|
|
+ {
|
|
|
+ //按照指定的帧数来采集,到点就停止.
|
|
|
+ tp_livox_laser->stop_scan();
|
|
|
+ //注注注注注意了:stop_scan会调用 LidarStopSampling 通知livox后台线程停止扫描.
|
|
|
+ // 但是这个是有延迟的.会导致数据回调函数 livox_data_callback 仍然会调用3~5次.
|
|
|
+ // 因此这里会反复调用 stop_scan
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ //data实际就是一个数据指针,里面包含data_num个三维点. data_num默认为100个
|
|
|
+ LivoxExtendRawPoint *p_point_data = (LivoxExtendRawPoint *)data->data;
|
|
|
|
|
|
+ //把雷达数据填充到livox数据缓存,此时里面是没有解析的原始数据. data_num默认为100个
|
|
|
+ Binary_buf* data_bin = new Binary_buf((char*)p_point_data, data_num * sizeof(LivoxExtendRawPoint));
|
|
|
+ tp_livox_laser->push_livox_data(data_bin);
|
|
|
|
|
|
+ tp_livox_laser->add_livox_frame(1);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
//雷达设备启动扫描的回调函数, 在 CLivoxLaser::start_scan() 需要启动扫描的时候使用 LidarStartSampling 来设置回调函数。
|
|
|
//调用 LidarStartSampling 之后,livox后台进程就直接开始扫描了. 之后就会一直调用 livox_data_callback 来返回数据
|
|
|
-void Livox_driver::livox_start_sample_callback(uint8_t status, uint8_t handle, uint8_t response, void *data)
|
|
|
+void Livox_driver::livox_start_sample_callback(livox_status status, uint8_t handle, uint8_t response, void *data)
|
|
|
{
|
|
|
LOG(INFO) << " ---livox_start_sample_callback start--- " ;
|
|
|
|
|
@@ -426,7 +474,7 @@ void Livox_driver::livox_start_sample_callback(uint8_t status, uint8_t handle, u
|
|
|
|
|
|
//雷达设备启动扫描的回调函数, 在 CLivoxLaser::stop_scan() 或者其他位置 需要停止的时候使用 LidarStopSampling 来设置回调函数。
|
|
|
//调用 LidarStopSampling 之后,livox后台进程就直接停止扫描了. 也会停止调用 livox_data_callback
|
|
|
-void Livox_driver::livox_stop_sample_callback(uint8_t status, uint8_t handle, uint8_t response, void *data)
|
|
|
+void Livox_driver::livox_stop_sample_callback(livox_status status, uint8_t handle, uint8_t response, void *data)
|
|
|
{
|
|
|
LOG(INFO) << " ---livox_stop_sample_callback start--- " ;
|
|
|
|