Win10上采集点云的频率出错 #141

Open
opened 2021-08-30 16:13:37 +02:00 by meng-zha · 0 comments
meng-zha commented 2021-08-30 16:13:37 +02:00 (Migrated from github.com)

平台:win10 版本号2004
编译:vs2019
vc_tools:14.29.30133
Livox-SDK获取点云并存储为lvx文件时,使用conditional variable的wait_for函数阻塞进程,根据wait_for的时长控制帧率。但是在win10进行数据采集,发现时间间隔比设定更长,20Hz采集的间隔为60ms左右。

尝试测试wait_for函数,测试代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <thread>
#include <chrono>
#include <string.h>
#include <condition_variable>
#include <memory>
#include <fstream>
#include <list>
#include <vector>
#include <mutex>
std::mutex mtx;
std::condition_variable point_pack_condition;
using namespace std::chrono;

void wait()
{
    int i = 0;
    steady_clock::time_point last_time = steady_clock::now();
    for (i = 0; i < 20; ++i) {
        {
            std::unique_lock<std::mutex> lock(mtx);
            last_time = steady_clock::now();
            printf("%d\n",point_pack_condition.wait_for(lock, milliseconds(50)));
            printf("Delta time:%ld.\n", duration_cast<microseconds>(steady_clock::now() - last_time).count());
            last_time = steady_clock::now();
        }

        printf("Finish save %d frame to lvx file.\n", i);
    }
}

int main(int argc, const char *argv[]) {
  std::thread t1(wait);
  t1.join();
  getchar();
}

在vs2019运行结果为:
image

在ubuntu利用g++编译测试代码,运行结果为:
image

可以看出Ubuntu的wait_for是正常的,而win10delay过大。在Ubuntu上交叉编译,在win10运行同样有很大delay。
这个问题导致采集的点云频率出错且不稳定。请问这个问题如何解决?

平台:win10 版本号2004 编译:vs2019 vc_tools:14.29.30133 Livox-SDK获取点云并存储为lvx文件时,使用conditional variable的wait_for函数阻塞进程,根据wait_for的时长控制帧率。但是在win10进行数据采集,发现时间间隔比设定更长,20Hz采集的间隔为60ms左右。 尝试测试wait_for函数,测试代码如下: ```C++ #include <stdio.h> #include <stdlib.h> #include <thread> #include <chrono> #include <string.h> #include <condition_variable> #include <memory> #include <fstream> #include <list> #include <vector> #include <mutex> std::mutex mtx; std::condition_variable point_pack_condition; using namespace std::chrono; void wait() { int i = 0; steady_clock::time_point last_time = steady_clock::now(); for (i = 0; i < 20; ++i) { { std::unique_lock<std::mutex> lock(mtx); last_time = steady_clock::now(); printf("%d\n",point_pack_condition.wait_for(lock, milliseconds(50))); printf("Delta time:%ld.\n", duration_cast<microseconds>(steady_clock::now() - last_time).count()); last_time = steady_clock::now(); } printf("Finish save %d frame to lvx file.\n", i); } } int main(int argc, const char *argv[]) { std::thread t1(wait); t1.join(); getchar(); } ``` 在vs2019运行结果为: ![image](https://user-images.githubusercontent.com/19506377/131352206-eba72922-4afd-4330-85f2-d456f46f8f54.png) 在ubuntu利用g++编译测试代码,运行结果为: ![image](https://user-images.githubusercontent.com/19506377/131352306-f4a26879-8a48-43f4-8043-b08f08d5f563.png) 可以看出Ubuntu的wait_for是正常的,而win10delay过大。在Ubuntu上交叉编译,在win10运行同样有很大delay。 这个问题导致采集的点云频率出错且不稳定。请问这个问题如何解决?
This repo is archived. You cannot comment on issues.
1 Participants
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: mmr/Livox-SDK#141