完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
你好。
在MWC 2018上,ST展示了带有RGB摄像头和VL53L1x的演示,在实时图像上有多个测量点 。 本周我得到了评估板,这个设备的在线数据表和API手册没有足够的细节如何为多个ROI操作这个配置 , 我尝试使用示例代码来解决这个问题,但结果确实有意义,距离测量似乎是正确的,但即使我只覆盖传感器的一半,它在光圈内的所有像素上都是相似的 。 有人成功操作ROI来感测光圈内特定像素的距离吗? 我为多个ROI开发了一个小测试应用程序,这里我覆盖了传感器的一半,因为你可以看到所有像素返回相同的结果: 谢谢 , 伊塔马尔 以上来自于谷歌翻译 以下为原文 Hi. At the MWC 2018, ST presented a demo with RGB camera and the VL53L1x with multiple measurement points on the live image . I got the evaluation boards this week, the datasheet and API manuals online for this device don’t have enough details how to operate this configuration for multiple ROI , I tried to work through this using the example code but the results does make any sense, the distance measurement seems to be correct but it’s similar on all of the pixels within the aperture even when I cover just half of the sensor . Did someone succeed operating the ROI to sense the distance in specific pixel within the aperture? I've developed a small test app for the multiple ROI, here i'm covering half of the sensor, as you can see all pixels returns around the same result: Thanks , Itamar |
|
相关推荐
4个回答
|
|
使用多个ROI的同样问题。也许有人可以发布一些小代码如何获得整个FoV的正确范围值(13 * 13阵列,每个项目一个测距值)。
BR, Albagir 以上来自于谷歌翻译 以下为原文 Same issue for me using multiple ROIs. Maybe someone could post some small code how to obtain the correct range value for the whole FoV (13*13 array, one ranging value per item). BR, Albagir |
|
|
|
是的,我可以确认在我这边有同样的问题,不知道如何解决这个问题。
以上来自于谷歌翻译 以下为原文 Yes, I can confirm that on my side I have the same problem and don't know how to solve this issue. |
|
|
|
谁解决了这个问题,可以提供一些代码?
以上来自于谷歌翻译 以下为原文 Anyone who solved the issue and can provide some code? |
|
|
|
Itamar -
查看您的数据,您没有“覆盖传感器的一半”。尽管有相当大的红外滤光片,传感器上的孔真的很小。 我试过这个实验。 我将传感器放在一个打开的盒子底部向上看。 这让我可以小心地放置目标。我用尺子作为目标。 我用了一个20厘米左右的盒子和13厘米高的盒子。但尺寸并不重要。 我标记了中心线和+/- 12.5度。 这允许我重复地将目标移入和移出视场(FoV)。统治者只是放在盒子的两侧。 代码如下: void AutonomousLowPowerRangingTest(void) { uint32_t pMeasurementTimingBudgetMicroSeconds; VL53L1_UserRoi_t Roi; static VL53L1_RangingMeasurementData_t RangingData; printf('自主测距测试 n'); status = VL53L1_WaitDeviceBooted(Dev); status + = VL53L1_DataInit(Dev); status + = VL53L1_StaticInit(Dev); status + = VL53L1_SetPresetMode(Dev,VL53L1_PRESETMODE_LOWPOWER_AUTONOMOUS); status + = VL53L1_SetDistanceMode(Dev,VL53L1_DISTANCEMODE_LONG); status + = VL53L1_SetMeasurementTimingBudgetMicroSeconds(Dev,20000); // 8毫秒 status + = VL53L1_SetInterMeasurementPeriodMilliSeconds(Dev,100); status + = VL53L1_GetMeasurementTimingBudgetMicroSeconds(Dev,& pMeasurementTimingBudgetMicroSeconds); printf('时间预算=%d n',pMeasurementTimingBudgetMicroSeconds); Roi.TopLeftX = 0; Roi.TopLeftY = 15; Roi.BotRightX = 15; Roi.BotRightY = 0; #if 1 Roi.TopLeftX = 5; Roi.TopLeftY = 15; Roi.BotRightX = 10; Roi.BotRightY = 0; #万一 status + = VL53L1_SetUserROI(Dev,& Roi); status + = VL53L1_StartMeasurement(Dev); 如果(状态){ printf('你有点错误 n'); 而(1); } 做//中断模式 { __WFI(); //等待中断 - 您也可以轮询 if(IntCount!= 0){ IntCount = 0; status = VL53L1_GetRangingMeasurementData(Dev,& RangingData); 如果(状态== 0){ printf('%d,%d,%。2f,%。2f,%d n',RangingData.RangeStatus,RangingData.RangeMilliMeter, RangingData.SignalRateRtnMegaCps / 65536.0,RangingData.AmbientRateRtnMegaCps / 65336.0,HAL_GetTick()); } status = VL53L1_ClearInterruptAndStartMeasurement(Dev); } } 而(1); 我遇到的一个问题是理解协调系统。 假设(0,0)位置在芯片的左下角。 (15,15)在右上方。 然后查看EVK,使USB位于“顶部”,字符正面朝上。 使用(0,15)(15,0)FoV运行代码。移动你的统治者,直到你确信你在FoV的边缘。用这些边标记框。 然后使用(5,15)(10,0)FoV运行代码。再次移动统治者,直到你确信FoV已经“移入”。 我的投资回报率发生了很大变化。这是我所期待的。 我唯一担心的是ROI变化可能不会立即改变。如果范围已开始,则可能仅在范围结束后生效。 以上来自于谷歌翻译 以下为原文 Itamar - Looking at your data, you didn't 'cover half the sensor'. Despite the rather large IR filter, the hole in the sensor is REALLY small. I tried this experiment. I placed my sensor in the bottom of an open box looking up. This allows me to carefully place my targets. I used a ruler as a target. I used a box 20cm on a side and 13cm tall. But the dimensions aren't really important. I marked the centerline and +/- 12.5 degrees. This allows me to move targets in and out of the Field of View (FoV) repeatably. The ruler simply rests on the sides of the box. Code follows: void AutonomousLowPowerRangingTest(void) { uint32_t pMeasurementTimingBudgetMicroSeconds; VL53L1_UserRoi_t Roi; static VL53L1_RangingMeasurementData_t RangingData; printf('Autonomous Ranging Testn'); status = VL53L1_WaitDeviceBooted(Dev); status += VL53L1_DataInit(Dev); status += VL53L1_StaticInit(Dev); status += VL53L1_SetPresetMode(Dev,VL53L1_PRESETMODE_LOWPOWER_AUTONOMOUS); status += VL53L1_SetDistanceMode(Dev, VL53L1_DISTANCEMODE_LONG); status += VL53L1_SetMeasurementTimingBudgetMicroSeconds(Dev,20000); // 8 ms status += VL53L1_SetInterMeasurementPeriodMilliSeconds(Dev, 100); status += VL53L1_GetMeasurementTimingBudgetMicroSeconds(Dev, &pMeasurementTimingBudgetMicroSeconds); printf('Timing Budget = %dn', pMeasurementTimingBudgetMicroSeconds); Roi.TopLeftX = 0; Roi.TopLeftY = 15; Roi.BotRightX = 15; Roi.BotRightY = 0; #if 1 Roi.TopLeftX = 5; Roi.TopLeftY = 15; Roi.BotRightX = 10; Roi.BotRightY = 0; #endif status += VL53L1_SetUserROI( Dev, &Roi); status += VL53L1_StartMeasurement(Dev); if(status){ printf('YOU DID SOMETHING WRONG n'); while(1); } do // interrupt mode { __WFI(); // Wait For Interrupt - you could also poll if(IntCount !=0 ){ IntCount=0; status = VL53L1_GetRangingMeasurementData(Dev, &RangingData); if(status==0){ printf('%d,%d,%.2f,%.2f,%dn', RangingData.RangeStatus,RangingData.RangeMilliMeter, RangingData.SignalRateRtnMegaCps/65536.0,RangingData.AmbientRateRtnMegaCps/65336.0,HAL_GetTick()); } status = VL53L1_ClearInterruptAndStartMeasurement(Dev); } } while(1); One issue I had was understanding the co-ordinate system. Assume the (0,0) location is in the bottom left of the chip. (15,15) is in the upper right. Then view the EVK so the USB is at the ‘top’ and the characters are right-side-up. Run the code using the (0,15) (15,0) FoV. Move your rulers in an out until you are convinced you are at the edge of the FoV. Mark the box with these edges. Then run the code using the (5,15) (10,0) FoV. Again move the rulers in an out until you are convinced the FoV has moved “in”. I get a pretty significant change in the ROI. It's about what I would expect. My only worry is that an ROI change might not change immediately. If a range has started, it might only take effect after the range finishes. |
|
|
|
只有小组成员才能发言,加入小组>>
请教:在使用UDE STK时,单片机使用SPC560D30L1,在配置文件怎么设置或选择?里面只有SPC560D40的选项
2646 浏览 1 评论
3209 浏览 1 评论
请问是否有通过UART连接的两个微处理器之间实现双向值交换的方法?
1784 浏览 1 评论
3613 浏览 6 评论
5991 浏览 21 评论
940浏览 4评论
1317浏览 4评论
在Linux上安装Atollic TRUEStudio的步骤有哪些呢?
585浏览 3评论
使用DMA激活某些外设会以导致外设无法工作的方式生成代码是怎么回事
1304浏览 3评论
1362浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-26 13:14 , Processed in 1.238084 second(s), Total 84, Slave 68 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号