VL53L0X调试总结

2023-11-01

最近调VL53L0X花了不少时间,特总结下

https://www.st.com/content/st_com/en/search.html#q=vl53l-t=products-page=1

VL53L0X测距2m 

VL53L1X测距4m 支持将校准数据保存到芯片内部

我们使用是是VL53L0X作为接近传感器  项目中存在两个VL53L0X对射的情况

接st官方的塑料帽或者不接,VL53L0X的测距都是挺准的 官方的塑料帽的发射和接收进行了物理隔离,所以不会有干扰问题。

但接上我们的玻璃盖板后,60cm的距离测出的是40cm,而且每块玻璃盖板都有差异。官方有该现象的解释(VL53L0X calibration free dirty environment cover glass solution)https://www.st.com/content/st_com/en/search.html#q=vl53l-t=videos-page=1,可以通过校准来修正。

校准分为长距(xtalk 60cm)和短距(offect 10cm)校准
假设没校准前,测量60cm的距离,读出来的距离是40cm,校准后,读数也是60cm,相等于对数据进行了修正。

应用层的校准demo如下

#include <errno.h>
#include <string.h>
#include <stdio.h>
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include "vl53l0x_def.h"

#define MODE_RANGE		0
#define MODE_XTAKCALIB	1
#define MODE_OFFCALIB	2
#define MODE_HELP		3
#define MODE_PARAMETER  6
#define MODE_OFFCALIB_SET 7
#define MODE_XTAKCALIB_SET 8


//******************************** IOCTL definitions
#define VL53L0X_IOCTL_INIT			_IO('p', 0x01)
#define VL53L0X_IOCTL_XTALKCALB		_IOW('p', 0x02, unsigned int)
#define VL53L0X_IOCTL_OFFCALB		_IOW('p', 0x03, unsigned int)
#define VL53L0X_IOCTL_STOP			_IO('p', 0x05)
#define VL53L0X_IOCTL_SETXTALK		_IOW('p', 0x06, unsigned int)
#define VL53L0X_IOCTL_SETOFFSET		_IOW('p', 0x07, int8_t)
#define VL53L0X_IOCTL_GETDATAS		_IOR('p', 0x0b, VL53L0X_RangingMeasurementData_t)
#define VL53L0X_IOCTL_PARAMETER		_IOWR('p', 0x0d, struct stmvl53l0x_parameter)

//modify the following macro accoring to testing set up
#define OFFSET_TARGET		100
#define XTALK_TARGET		600
#define NUM_SAMPLES			20//20

typedef enum {
	OFFSET_PAR = 0,
	XTALKRATE_PAR = 1,
	XTALKENABLE_PAR = 2,
	GPIOFUNC_PAR = 3,
	LOWTHRESH_PAR = 4,
	HIGHTHRESH_PAR = 5,
	DEVICEMODE_PAR = 6,
	INTERMEASUREMENT_PAR = 7,
	REFERENCESPADS_PAR = 8,
	REFCALIBRATION_PAR = 9,
} parameter_name_e;
/*
 *  IOCTL parameter structs
 */
struct stmvl53l0x_parameter {
	uint32_t is_read; //1: Get 0: Set
	parameter_name_e name;
	int32_t value;
	int32_t value2;
	int32_t status;
};

static void help(void)
{
	fprintf(stderr,
		"Usage: vl53l0x_test [-c] [-h]\n"
		" -h for usage\n"
		" -c for crosstalk calibration\n"
		" -x set crosstalk calibration\n"
		" -o for offset calibration\n"
		" -s set offset calibration\n"
		" default for ranging\n"
		);
	exit(1);
}
//xtalk Calibrate place black target at 600mm from glass===
//XtalkInt:280

//xtalk Calibrate place black target at 100mm from glass===
//get offset 9000 micrometer===
//get VhvSettings is 27 ===
//get PhaseCas is 1 ===
//get SpadCount is 9 ===
//get IsApertureSpads is 1 =
int main(int argc, char *argv[])
{
	int fd;
	unsigned long data;
	VL53L0X_RangingMeasurementData_t range_datas;
	struct stmvl53l0x_parameter parameter;
	int flags = 0;
	int mode = MODE_RANGE;
	unsigned int targetDistance=0;
	int i = 0;

	/* handle (optional) flags first */
	while (1+flags < argc && argv[1+flags][0] == '-') {
		switch (argv[1+flags][1]) {
		case 'c': mode= MODE_XTAKCALIB; break;
		case 'x': mode= MODE_XTAKCALIB_SET; break;
		case 'o': mode = MODE_OFFCALIB; break;
		case 's': mode = MODE_OFFCALIB_SET; break;
		case 'h': mode= MODE_HELP; break;
		default:
			fprintf(stderr, "Error: Unsupported option "
				"\"%s\"!\n", argv[1+flags]);
			help();
			exit(1);
		}
		flags++;
	}
	if (mode == MODE_HELP)
	{
		help();
		exit(0);
	}

	fd = open("/dev/stmvl53l0y_ranging",O_RDWR | O_SYNC);
	if (fd <= 0)
	{
		fprintf(stderr,"Error open stmvl53l0x_ranging device: %s\n", strerror(errno));
		return -1;
	}

	if (ioctl(fd, VL53L0X_IOCTL_STOP , NULL) < 0) {	//make sure it's not started
		fprintf(stderr, "Error: Could not perform VL53L0X_IOCTL_STOP : %s\n", strerror(errno));
		close(fd);
		return -1;
	}
	if (mode == MODE_XTAKCALIB)//校准并获取校准因子
	{
		unsigned int XtalkInt = 0;
		uint8_t XtalkEnable = 0;
		fprintf(stderr, "xtalk Calibrate place black target at %dmm from glass===\n",XTALK_TARGET);

		targetDistance = XTALK_TARGET;
		if (ioctl(fd, VL53L0X_IOCTL_XTALKCALB , &targetDistance) < 0) {//开始校准
			fprintf(stderr, "Error: Could not perform VL53L0X_IOCTL_XTALKCALB : %s\n", strerror(errno));
			close(fd);
			return -1;
		}

		parameter.is_read = 1;
		parameter.name = XTALKRATE_PAR;
		if (ioctl(fd, VL53L0X_IOCTL_PARAMETER , &parameter) < 0) {
			fprintf(stderr, "Error: Could not perform VL53L0X_IOCTL_PARAMETER : %s\n", strerror(errno));
			close(fd);
			return -1;
		}
		XtalkInt = (unsigned int)parameter.value;//xtalk(得到的校准因子 需要保存)
		fprintf(stderr,"XtalkInt:%d\n",XtalkInt);
		close(fd);
		return 0;
	}else if(mode == MODE_XTAKCALIB_SET){//每次开机设置XTAK校准因子到机器
		fprintf(stderr, "start MODE_XTAKCALIB_SET\n");
		parameter.is_read = 0;
		parameter.name = XTALKENABLE_PAR;
		parameter.value=1;
		if (ioctl(fd, VL53L0X_IOCTL_PARAMETER , &parameter) < 0) { //使能校准
			fprintf(stderr, "Error: Could not perform VL53L0X_IOCTL_PARAMETER : %s\n", strerror(errno));
			close(fd);
			return -1;
		}

		parameter.name = XTALKRATE_PAR;
		parameter.value=432; //上面的XtalkInt 就是校准因子 假设是432
		if (ioctl(fd, VL53L0X_IOCTL_PARAMETER , &parameter) < 0) {//写校准因子到机器
			fprintf(stderr, "Error: Could not perform VL53L0X_IOCTL_PARAMETER : %s\n", strerror(errno));
			close(fd);
			return -1;
		}
		fprintf(stderr, "stop MODE_XTAKCALIB_SET\n");
		close(fd);
		return 0;
	}else if (mode == MODE_OFFCALIB){
		int offset=0;
		uint32_t SpadCount=0;
		uint8_t IsApertureSpads=0;
		uint8_t VhvSettings=0,PhaseCal=0;
		fprintf(stderr, "offset Calibrate place black target at %dmm from glass===\n",OFFSET_TARGET);

		targetDistance = OFFSET_TARGET;
		if (ioctl(fd, VL53L0X_IOCTL_OFFCALB , &targetDistance) < 0) {
			fprintf(stderr, "Error: Could not perform VL53L0X_IOCTL_OFFCALB : %s\n", strerror(errno));
			close(fd);
			return -1;
		}

		parameter.is_read = 1;
		parameter.name = OFFSET_PAR;
		if (ioctl(fd, VL53L0X_IOCTL_PARAMETER, &parameter) < 0) {
			fprintf(stderr, "Error: Could not perform VL53L0X_IOCTL_PARAMETER : %s\n", strerror(errno));
			close(fd);
			return -1;
		}
		offset = (int)parameter.value;  //获取offset校准因子
		fprintf(stderr, "get offset %d micrometer===\n",offset);

		close(fd);
		return -1;
	}else if (mode == MODE_OFFCALIB_SET){
		int offset=0;
		uint32_t SpadCount=0;
		uint8_t IsApertureSpads=0;
		uint8_t VhvSettings=0,PhaseCal=0;
		fprintf(stderr, "start MODE_OFFCALIB_SET\n");
		parameter.is_read = 0;
		parameter.name = OFFSET_PAR;

		parameter.value=400;                   //设置offset校准因子,假设是400
		if (ioctl(fd, VL53L0X_IOCTL_PARAMETER, &parameter) < 0) {
			fprintf(stderr, "Error: Could not perform VL53L0X_IOCTL_PARAMETER : %s\n", strerror(errno));
			close(fd);
			return -1;
		}

		if (ioctl(fd, VL53L0X_IOCTL_SETOFFSET , &parameter) < 0) {//写校准因子到机器
			fprintf(stderr, "Error: Could not perform VL53L0X_IOCTL_PARAMETER : %s\n", strerror(errno));
			close(fd);
			return -1;
		}

		fprintf(stderr, "stop MODE_OFFCALIB_SET\n");
		close(fd);
		return -1;
	}
	else{
	}
	return 0;
}

驱动层的校准可参考

static ssize_t stmvl53l0x_store_enable_ps_sensor(struct device *dev,
				struct device_attribute *attr, const char *buf,
				size_t count)
{
	struct stmvl53l0x_data *data = dev_get_drvdata(dev);
	int ret;
	FixPoint1616_t TempFix1616;
	VL53L0Y_DEV vl53l0x_dev = data;
	unsigned long val = simple_strtoul(buf, NULL, 10);

	if ((val != 0) && (val != 1) && (val != 2) && (val != 3)) {
		vl53l0x_errmsg("store unvalid value=%ld\n", val);
		return count;
	}
	mutex_lock(&data->work_mutex);
	vl53l0x_dbgmsg("Enter, enable_ps_sensor flag:%d\n",
		data->enable_ps_sensor);
	vl53l0x_dbgmsg("enable ps senosr ( %ld)\n", val);

	if (val == 1) {
		/* turn on tof sensor */
		if (data->enable_ps_sensor == 0) {
			/* to start */
			stmvl53l0x_start(data, 3, NORMAL_MODE);
		} else {
			vl53l0x_errmsg("Already enabled. Skip !");
		}
	}else if(val == 2){
		vl53l0x_dbgmsg("Enter XTALKCALIB_MODE!\n");
		if (data->enable_ps_sensor == 1) {
			data->enable_ps_sensor = 0;
			stmvl53l0x_stop(data);
		}
		data->xtalkCalDistance=600;
		stmvl53l0x_start(data, 3, XTALKCALIB_MODE);
		papi_func_tbl->GetXTalkCompensationRateMegaCps(vl53l0x_dev, &TempFix1616);
		vl53l0x_dbgmsg("Enter XTALKCALIB_MODE TempFix1616=%d\n",TempFix1616);
		xtalk_calib = TempFix1616;
		ret=stmvl53l0x_write_xtalk_calibration_file();
		if(ret<0){
			vl53l0x_errmsg("stmvl53l0x_write_xtalk_calibration_file error !");
			count=-1;
		}
	}
	else if(val == 3){
		vl53l0x_dbgmsg("Enter OFFSETCALIB_MODE!\n");
		if (data->enable_ps_sensor == 1) {
			data->enable_ps_sensor = 0;
			stmvl53l0x_stop(data);
		}
		data->offsetCalDistance=100;
		stmvl53l0x_start(data, 3, OFFSETCALIB_MODE);
		papi_func_tbl->GetOffsetCalibrationDataMicroMeter(vl53l0x_dev, &TempFix1616);
		vl53l0x_dbgmsg("Enter XTALKCALIB_MODE TempFix1616=%d\n",TempFix1616);
		offset_calib=TempFix1616;
		ret=stmvl53l0x_write_offset_calibration_file();
		if(ret<0){
			vl53l0x_errmsg("stmvl53l0x_write_offset_calibration_file error !");
			count=-1;
		}
	}
	else {
		/* turn off tof sensor */
		if (data->enable_ps_sensor == 1) {
			data->enable_ps_sensor = 0;
			/* to stop */
			stmvl53l0x_stop(data);
		}
	}
	vl53l0x_dbgmsg("End\n");
	mutex_unlock(&data->work_mutex);

	return count;
}

保存和读取校准文件,注意文件的权限,否则会出现文件创建,读写失败

stmvl53l0x_read_calibration_file
stmvl53l0x_write_offset_calibration_file
stmvl53l0x_write_xtalk_calibration_file

f->f_op->read会变成NULL,直接调用有空指针,需修正为

f->f_op->read ---> vfs_read
f->f_op->write---> vfs_write

默认有个工作队列(非中断模式)循环获取数据data->delay_ms(修改成int型),因为我们的产品存在两个vl53l0x对射的情况,需要加大该值来降低vl53l0x工作频率(减少单位时间内的发光量)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VL53L0X调试总结 的相关文章

  • PX4模块设计之三十三:Sensors模块

    PX4模块设计之三十三 xff1a Sensors模块 1 Sensors模块简介2 模块入口函数2 1 主入口sensors main2 2 自定义子命令custom command2 3 模块状态print status 重载 3 Se
  • 关于pixhawk2.1+px4 1.7.3stable出现mag sensors inconsistent问题分析

    因为前两天在学校测试代码时 xff0c 飞机在mission模式下突然出现在每一个mission点都会停留两三分钟的问题 xff0c 而且偏航还一直在旋转 xff0c QGC上也会提示mag sensors inconsistent 于是考
  • PX4模块设计之三十三:Sensors模块

    PX4模块设计之三十三 xff1a Sensors模块 1 Sensors模块简介2 模块入口函数2 1 主入口sensors main2 2 自定义子命令custom command2 3 模块状态print status 重载 3 Se
  • VL53L0X调试总结

    最近调VL53L0X花了不少时间 特总结下 https www st com content st com en search html q vl53l t products page 1 VL53L0X测距2m VL53L1X测距4m 支
  • Android - 加速下降(粉碎)

    视频为不懂的人讲解 此答案未正确回答 请尝试使用其他解决方案来回答 100 赏金已过时 同样的问题 但更好的解释 这个问题被认为是正确的 但根本不是 我用我的旧设备 ZTE 尝试过 大部分时间都有效 但现在我有一台三星 Galazy A5
  • Android 加速度计全系列

    我目前正在处理 Android 传感器 API 和加速计数据 虽然内部组件应该支持高加速 甚至 16g 但我尝试了一些最近的智能手机 发现暴露数据的最大范围通常是 2g 例如Nexus 5 有时是 4g 例如Nexus 4 有没有办法设置传
  • 如何在nodejs中通过TCP/IP获取传感器数据?

    我有一个带有socket io 的nodejs 应用程序 要测试这一点 请将以下列表保存为 app js 安装 Node 然后 npm install socket io 最后在命令提示符下运行 node app js var http r
  • 如何使用python将传感器数据输出保存到excel中

    我目前正在使用树莓派并使用 DHT11 每秒读取温度和湿度值 我必须将这些值实时保存到数据库中 这是我的代码 每秒显示传感器数据 我不知道如何在 Excel 中保存数据 结果 import RPi GPIO as GPIO import d
  • Android SENSOR_DELAY_FASTEST 不够快

    我正在使用传感器来平衡机器人 但是SENSOR DELAY FASTEST只提供10Hz的采样率 这根本不够快 有没有更快的采样方法 有没有一种方法可以轮询传感器而不是等待SensorEvent 有没有更快的采样方法 SENSOR DELA
  • Web Worker 中的传感器读取

    看来我们无法在网络工作者中获取传感器数据 我想知道其背后的原因 用例是我正在考虑在工作线程中获取地理位置数据 并且仅将处理后的版本发送到主线程 对于 GPS 这post说工作线程不支持它 没有给出原因 我仔细检查了一下 网络工作人员不支持
  • gnuplot:传感器故障有时读数为 0.00 - 如何将它们转换为缺失?

    我有一个 RPi Arduino 组合 可以从多个 DHT 22 湿度 温度传感器获取读数 其中一个传感器的电线松动 并且连续 10 20 分钟偶尔给出 0 00 的温度读数 由于同时收集了其他数据 我实际上无法选择删除整行数据 就像它是唯
  • 无法访问 Android 中的传感器

    我正在编写一个指南针应用程序 但由于某种原因无法访问所需的传感器 我已经实施了SensorEventListener以这种方式连接并注册我的传感器 sensorManager SensorManager getSystemService C
  • iPhone 接近传感器

    iPhone SDK 可以利用 iPhone 的接近传感器吗 如果是这样 为什么没有人利用它们 我可以想象一些不错的用途 例如 在赛车游戏中 您可以将手指放在接近传感器上 而不是用拇指占据屏幕空间 当然 如果这是您唯一的选择 那么 iPod
  • 为什么 中缺少某些传感器的枚举值?使用它们安全吗?

    似乎缺少某些传感器的枚举值
  • Android 重力传感器(TYPE_GRAVITY)2.1

    我有为 2 3 3 设计的软件 其中使用重力传感器 下面的代码 private SensorManager sman SensorManager getContext getSystemService Context SENSOR SERV
  • Android 上的 flash.sensors.Accelerometer 在网络浏览器中

    加速度计UPDATE事件永远不会触发 但是isSupported当 Flash 应用程序在 Android Web 浏览器中运行时 返回 true 我怎样才能让它发挥作用 this accelerometer new Acceleromet
  • Android 加速度计过滤?

    我看到了许多关于过滤加速度计值以抵消重力 高通滤波器 的示例 但其中大多数都是一阶一阶 据说很简单 但是滞后 而且不是最好的 尽管我对滤波器或 DSP 一无所知 这里有人说有更好的解决方案用于DSP来感知运动 遗憾的是 我什至无法想象它会是
  • 使用 adb 从损坏的 Android 设备中回收传感器

    我刚刚把我的s3弄坏了 三年前 它是最好的智能手机之一 Question如何通过 USB 获取手机惯性传感器的值 我想使用设备的加速度计 陀螺仪 磁力计 气压计和 GPS 传感器 假设我们想要得到 沿三个轴的原始加速度数据 我连接了 USB
  • 如何知道我的 SensorManager 是否有已注册的传感器

    我正在为我的 Android 应用程序使用传感器 我用一行代码注册传感器 mySensorManager registerListener this orientationSensor SensorManager SENSOR DELAY
  • 屏幕关闭时 Android 加速计不工作

    我正在为计算机科学的期末论文开发一个应用程序 我需要收集和记录加速度计数据 我需要使用一整天 因此电池存在严重限制 例如 我无法让屏幕保持打开状态 此外 这不是一个针对市场的应用程序 因此如果需要的话 进行一些严重的黑客攻击 甚至是低级 C

随机推荐

  • [错误解决] paramiko.ssh_exception.SSHException: Error reading SSH protocol banner

    最近项目中需配置sftp上传下载 配置好环境后连接报错 报错信息如图 paramiko ssh exception SSHException Error reading SSH protocol banner 解决方式一 设置banner
  • 域名解析的查看

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 目录 一 配置域名解析 DNS与Host 1 hosts文件 2 配置DNS 3 Host表解析与DNS机械的次序由文件 etc host conf决定 Hosts优先于DN
  • 图的广度优先遍历 + 拓扑排序(笔记)

    广度优先遍历 模板题 广度优先遍历的大体思路就是 每次扩展当前一步能到达的未标记的点加入队列中并标记 每次也从队列中拿出一个点进行扩展 该题是让求最权值都相等的短路我们就可以利用广度优先搜索来求 include
  • 数据仓库理论知识

    一 数据仓库与数据集市 可以简单理解为数据仓库是面向整个企业 而数据集市是面向某个部门的 数据集市的数据来自数据仓库 当然 如果没有数据仓库 数据集市的数据也可以直接取自业务数据库 1 离线与实时 离线数仓 从业务上看 对已知范围的数据定时
  • linux 动态库 段错误,dlopen加载so动态链接库出现段错误的问题

    so库中暴露出来的函数 写在某基类头文件中 大体如下 ifdef cplusplus extern C endif Object construct return new Object void destroy Object object
  • Linux操作系统基础知识学习

    Q1 什么是GNU Linux与GNU有什么关系 A 1 GNU是GNU is Not Unix的递归缩写 是自由软件基金会 Free Software Foundation FSF 的一个项目 该项目已经开发了许多高质量的编程工具 包括e
  • STM32串口调试一直打印 00 00

    在STM32串口调试过程中 通过printf函数往串口打印英文字母 串口助手却一直收到 00 凭直觉 这种情况一般都是时钟没配置好 但是查代码很难找到原因 经过反复查找 发现是STM32CubeMX中时钟源选择错误 就是下面这个地方 切记一
  • Go 语言运行时环境变量快速导览

    原文 http dave cheney net 2015 11 29 a whirlwind tour of gos runtime environment variables Go 语言运行时环境变量快速导览 介绍 Go Runtime除
  • ubuntu 打包deb并带有安装目录

    0 简介 当在ubuntu下开发了一个工程 期望以deb包的形式发布出去的时候 会涉及到打包操作 基本指令是 dpkg b
  • docker registry2 仓库搭建与使用

    docker registry2 仓库搭建与使用 docker pull registry 1 docker io distribution registry 2 1 1 以TLS证书认证启动docker registry2 产生证书 mk
  • hibernate关联关系

    前言 今天要分享的知识是hibernate框架的关联关系 码字不易 点个赞 转载请说明 开发工具 eclipse 目录 一 一对多的配置 二 懒加载 1 定义 懒加载可以这样理解 只加载某一项东西 其他的东西不会加载 2 操作 在我们进行项
  • 问题解决:WSL2 中进行 apt-get-update 失败

    WSL2 子系统在一些操作上还是很方便的 但因为有些配置和 Windows 共用的原因 总会出现这样那样的问题 比如今天安装 Redis 的时候需要提前进行包更新 结果却报错 Failed to fetch 这个问题的出现我首先是考虑国外源
  • Error: JAVA_HOME is not set

    启动Hadoop时显示这句话 解决方法 通过echo JAVA HOME找到java安装目录 在hadoop的配置目录etc hadoop中 我的是 usr local hadoop etc hadoop 修改hadoop env sh配置
  • jenkins - Manage and Assign Roles

    Role Strategy Plugin 插件 针对多个project进行权限控制 访问 上几张图 希望你能看明白 哈哈 1 png 710dba0dgy1fkgqp3cze1j219g0kmn24 jpg 710dba0dgy1fkgqp
  • MySQL查询语句in子查询的优化

    项目中有需要 使用MySQL的in子查询 查询符合in子查询集合中条件的数据 但是没想到的是 MySQL的in子查询会如此的慢 让人无法接收 于是上网搜索解决办法 下面记录下 一 原始in子查询 SELECT FROM basic zdjb
  • Ubuntu系统上安装WPS

    前言 在Ubuntu系统下 想使用WPS的功能 觉得用起来更加方便 所以在此记录一下安装的步骤 记录两种安装方法 方法一 Ubuntu Software中搜索WPS 如图所示 在Ubuntu Software中搜索WPS 可能需要稍等一会再
  • python使用局部敏感性哈希算法,在海量数据中查询相似序列

    文章目录 一 原生python实现 二 第三方库datasketch使用 1 官方示例 2 LSH算法 3 MinHashLSHForest 局部敏感性哈希是指 相似的哈希具有相似的原始序列 整体思路 首先将数据装在不同的桶里 通过桶之间的
  • 2023国赛数学建模思路 - 案例:随机森林

    文章目录 1 什么是随机森林 2 随机深林构造流程 3 随机森林的优缺点 3 1 优点 3 2 缺点 4 随机深林算法实现 建模资料 0 赛题思路 赛题出来以后第一时间在CSDN分享 https blog csdn net dc sinor
  • 隐私计算S2赛季-谁是真正的王者

    去年至今 隐私计算大约经历了如火如荼的一年 身为局中人 看穿居中事 道尽居中话 为的无非是让更多的来了解这个比较细分的AI领域 秋天本是硕果累累的丰收季 隐私计算这个行业算是金秋吗 一喜一悲 一喜为百花齐放 我所知道在布 挂 局 钩 隐私计
  • VL53L0X调试总结

    最近调VL53L0X花了不少时间 特总结下 https www st com content st com en search html q vl53l t products page 1 VL53L0X测距2m VL53L1X测距4m 支