激光雷达:ouster OS1-128
硬件平台:RK3399 4+64GB
操作系统:Ubuntu 18.04
ouster 128线激光雷达在接入RK3399运行时,数据特别异常,时间戳不连续、回撤、重复,frame_id不连续,即使运行ouster官方例程也有同样问题。同样的程序在笔记本电脑上可以正常运行。如下图时间戳(左:RK3399,右:PC)
通过wget下载局域网内文件,发现PC的下载速度为100MB/s,RK3399开发板下载速度只有10MB/s。使用命令ethtool eth0
测试,PC为千兆网,开发板只识别为百兆网。通过烧写其他系统镜像验证确认为系统问题并非硬件问题。
此问题由供应商重新编译系统解决,不再赘述。
重新烧录千兆网镜像后,wget命令速度提升到100MB/s,速度正常,但是ouster数据仍然丢包,且丢包数量时多时少。
这是因为RK3399采用双核Cortex-A72大核+四核Cortex-A53小核结构,大核频率最高1.8GHz,小核频率最高1.4GHz,CPU0-3为小核,CPU4-5为大核。直接运行程序会在不同的CPU核心上运行,无法达到最快速度。
将ouster雷达获取数据的线程绑定到大核,固定频率到1.8GHz后,问题解决
方法1. taskset查看CPU亲和属性
taskset -ap [PID]
得到的mask为二进制表示,上图10代表线程能够运行在CPU4,如mask=3f代表线程能够运行在CPU0-5
方法2. ps -eLF
第9列PSR对应的数字即为当前运行的CPU核心编号
方法3. top
top -p
使用上下键选择P = Last Used Cpu,并按下空格键,出现 “*”即可,按"Q"键退出,即可看到线程当前使用的CPU编号
方法1. taskset设置CPU亲和属性
taskset -ap 30 [PID]
设置线程可以在CPU4-5运行
方法2. C语言接口
// 进程绑定到CPU
#include
int sched_setaffinity(pid_t pid, size_t cpusetsize, const cpu_set_t *mask);
int sched_getaffinity(pid_t pid, size_t cpusetsize, cpu_set_t *mask);
// 线程绑定到CPU
#include
int pthread_setaffinity_np(pthread_t thread, size_t cpusetsize, const cpu_set_t *cpuset);
int pthread_getaffinity_np(pthread_t thread, size_t cpusetsize, cpu_set_t *cpuset);
// 参数
// pid:进程的id号,如果pid为0,则表示本进程
// cpusetsize:mask的大小
// mask:运行进程的CPU,可以通过以下函数操作mask
#define CPU_SET(cpu, cpusetp) //设置cpu
#define CPU_CLR(cpu, cpusetp) //删除cpu
#define CPU_ISSET(cpu, cpusetp) //判断cpu
#define CPU_ZERO(cpusetp) //初始化为0
绑定线程到CPU后,速度有明显提升,但是在程序刚开始运行时候还是存在丢包现象,可能是因为CPU自适应频率一开始频率较低,CPU负载提高后频率才提高。直接将CPU频率固定设置为最高频率后解决。
# 设置频率
sudo chmod 666 /sys/devices/system/cpu/cpufreq/policy0/scaling_governor
sudo chmod 666 /sys/devices/system/cpu/cpufreq/policy0/scaling_setspeed
sudo chmod 666 /sys/devices/system/cpu/cpufreq/policy4/scaling_governor
sudo chmod 666 /sys/devices/system/cpu/cpufreq/policy4/scaling_setspeed
sudo echo userspace > /sys/devices/system/cpu/cpufreq/policy0/scaling_governor
sudo echo userspace > /sys/devices/system/cpu/cpufreq/policy4/scaling_governor
sudo echo 1416000 > /sys/devices/system/cpu/cpufreq/policy0/scaling_setspeed
sudo echo 1800000 > /sys/devices/system/cpu/cpufreq/policy4/scaling_setspeed
# 查看频率
cat /sys/devices/system/cpu/cpu*/cpufreq/cpuinfo_cur_freq
据说CPU可以超频到2.2Ghz,需要修改dts文件,还未尝试
https://www.right.com.cn/forum/thread-4063361-1-1.html
https://blog.csdn.net/ydyang1126/article/details/51140131
https://blog.csdn.net/jimmy0513/article/details/108800015
https://blog.csdn.net/weixin_34331102/article/details/85942479?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-3.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-3.pc_relevant_default&utm_relevant_index=6
https://blog.csdn.net/ibless/article/details/82431101
https://blog.csdn.net/test1280/article/details/87993669?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7EHighlightScore-2.queryctrv2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7EHighlightScore-2.queryctrv2&utm_relevant_index=5
https://blog.csdn.net/tbadolph/article/details/101363120
https://www.cnblogs.com/dakewei/p/13522594.html
https://blog.csdn.net/wdqqbyt4321/article/details/110132397
https://blog.csdn.net/weiqifa0/article/details/85337993
https://www.right.com.cn/forum/thread-4063361-1-1.html