申小林

  • 2024-11-21
  • 回复了主题帖: 入围名单公布:嵌入式工程师AI挑战营(进阶)的挑战者们,领取板卡啦

    个人信息已确认,领取板卡,可继续完成任务。

  • 2024-11-18
  • 回复了主题帖: 嵌入式工程师AI挑战营(进阶):在RV1106部署InsightFace算法的多人实时人脸识别实战

    申请理由   InsightFace是一个用于2D与3D人脸检测与识别的Python库,它也可以被视为一个开源的2D和3D深度人脸分析工具箱。主要用于人脸识别,人脸检测,人脸对齐,以及AI换脸的工作,但是自己对于这个库的了解很少,几乎没有用过,自己也想跟大佬们一起来学习如何操作,希望大佬们带带我,一起学习一起进步。但是整个项目难度较大,我希望可以有大佬可以多多分享实现的方法以及部署的详细步骤, 我将按照以下步骤进行操作: 1:完成基础编译环境的搭建。 2:完成insightface的环境部署 3:完成单个人脸识别案例的应用。 4:完成多个人脸识别的功能改进。 希望有机会通过试用。

  • 2024-10-25
  • 发表了主题帖: 【翌创ET6001】-06 板载DS18B20测试

    DS18B20是这个板子为数不多的板载传感器,那么今天就和大家来聊一下,我觉得最舒服的是这个板子的IO口可以设置为双向IO口,这样的话很多操作就会很方便。 我们首先确定引脚 ,我们就直接用P0.0来作为DS18B20的接口,确定接口之后就需要确定IO的特性以及复用关系 确定了IO接口以及复用关系了之后就可以设置IO的引脚参数了。 我们这里就直接先将所有的DS18B20的代码都做上传,然后我们后面就不用管了。   #include "DRV_18B20.h" #include "DRV_UART.h" /********************************************************************************* ********************************************************************************** * 文件名称: ds18b20.c * ********************************************************************************** *********************************************************************************/ #define DS18B20_DQ_H() GPIO_WritePin(GPIO0,GPIO_PIN_00,1) #define DS18B20_DQ_L() GPIO_WritePin(GPIO0,GPIO_PIN_00,0) #define DS18B20_DQ_Get() GPIO_ReadPin(GPIO0,GPIO_PIN_00) //复位DS18B20 void DS18B20_Rst(void) { DS18B20_DQ_L(); //拉低DQ Delay_us(750); //拉低750us DS18B20_DQ_H(); //DQ=1 Delay_us(15); //15US } /**************************************************************************** * 名 称: unsigned char DS18B20_Check(void) * 功 能:等待DS18B20的回应 * 入口参数:无 * 返回参数:返回1:未检测到DS18B20的存在 * 返回0:存在 * 说 明: ****************************************************************************/ unsigned char DS18B20_Check(void) { unsigned char retry=0; while (DS18B20_DQ_Get()&&retry<200) { retry++; Delay_us(1); }; if(retry>=200)return 1; else retry=0; while (!DS18B20_DQ_Get()&&retry<240) { retry++; Delay_us(1); }; if(retry>=240)return 1; return 0; } //从DS18B20读取一个位 返回值:1/0 unsigned char DS18B20_Read_Bit(void) // read one bit { unsigned char data; DS18B20_DQ_L(); Delay_us(2); DS18B20_DQ_H(); Delay_us(12); if(DS18B20_DQ_Get())data=1; else data=0; Delay_us(50); return data; } /**************************************************************************** * 名 称: unsigned char DS18B20_Read_Byte(void) * 功 能:从DS18B20读取一个字节 * 入口参数:无 * 返回参数:读到的一个字节数据 * 说 明: ****************************************************************************/ unsigned char DS18B20_Read_Byte(void) { unsigned char i,j,dat; dat=0; for (i=1;i<=8;i++) { j=DS18B20_Read_Bit(); dat=(j<<7)|(dat>>1); } return dat; } /**************************************************************************** * 名 称: void DS18B20_Write_Byte(unsigned char dat) * 功 能:写一个字节到DS18B20 * 入口参数:dat:要写入的字节 * 返回参数:无 * 说 明: ****************************************************************************/ void DS18B20_Write_Byte(unsigned char dat) { unsigned char j; unsigned char testb; for (j=1;j<=8;j++) { testb=dat&0x01; dat=dat>>1; if (testb) { DS18B20_DQ_L();// Write 1 Delay_us(2); DS18B20_DQ_H(); Delay_us(60); } else { DS18B20_DQ_L();// Write 0 Delay_us(60); DS18B20_DQ_H(); Delay_us(2); } } } //开始温度转换 void DS18B20_Start(void)// ds1820 start convert { DS18B20_Rst(); DS18B20_Check(); DS18B20_Write_Byte(0xcc);// skip rom DS18B20_Write_Byte(0x44);// convert } /**************************************************************************** * 名 称: unsigned char DS18B20_Init(void) * 功 能:初始化DS18B20的IO口DQ 同时检测18B20的存在 * 入口参数:dat:要写入的字节 * 返回参数:返回1:不存在 * 返回0:存在 * 说 明: ****************************************************************************/ unsigned char DS18B20_Init(void) { IOC_Init_TypeDef init; IOC_ConfigStructInit(&init); init.mode = IOC_AF_MODE_0; init.dir = GPIO_DIR_IN_OUT; init.pull = IOC_PULL_UP; IOC_Config(IOC_PIN_GPIO0_0, &init); GPIO_PortOutputEnable(GPIO0, GPIO_PIN_00); GPIO_WritePin(GPIO0, GPIO_PIN_00, SET); DS18B20_Rst(); return DS18B20_Check(); } /**************************************************************************** * 名 称: short DS18B20_Get_Temp(void) * 功 能:从ds18b20得到温度值 * 入口参数:无 * 返回参数:温度值 (-550~1250) * 说 明: ****************************************************************************/ short DS18B20_Get_Temp(void) { unsigned char temp; unsigned char TL,TH; short tem; DS18B20_Start (); // ds1820 start convert DS18B20_Rst(); DS18B20_Check(); DS18B20_Write_Byte(0xcc);// skip rom DS18B20_Write_Byte(0xbe);// convert TL=DS18B20_Read_Byte(); // LSB TH=DS18B20_Read_Byte(); // MSB if(TH>7) { TH=~TH; TL=~TL; temp=0;//温度为负 }else temp=1;//温度为正 tem=TH; //获得高八位 tem<<=8; tem+=TL;//获得底八位 tem=(double)tem*0.625;//转换 if(temp)return tem; //返回温度值 else return -tem; } 需要代码的自己复制粘贴就行,。h文件的我就不复制了,太麻烦, 做好了之后我们做做硬件的连接。     做好上述工作之后我们就可以验证了, 我们可以看到DS18B20的温度是30摄氏度左右(和芯片发热有关系)     好了,今天的测试就到这里了。        

  • 发表了主题帖: 【翌创ET6001】-05 ADC测试

    ADC测试仅仅是按照例程来做修改的,做了简单的测试,按照例程的来,首先我们看看原理图。 可调电阻的是做了分离设计的,并没有连接到ADC的引脚,所以需要用跳线连接到引脚上   我们的硬件端的是连接到ADC0的, 然后看看我们的代码     #include "DRV_ADC.h" #include "DRV_UART.h" void ADC_SingleSample_Config(void) { ADC_InitTypeDef stInit; /* 复位ADC0,并开启该外设的时钟 */ ADC_DeInit(ADC0); /* 校准ADC0 */ ADC_StartCalibration(ADC0); /* 初始化ADC */ ADC_StructInit(&stInit); stInit.virtualChannelMask = ADC_VIRTUAL_CHANNEL0; stInit.workMode = ADC_WORK_MODE_SINGLE; stInit.trigMode = ADC_TRIGGER_MODE_CONTINUOUS; stInit.trigger = ADC0_TRIGGER_SRPWM_ROW0_COL0; ADC_Init(ADC0, &stInit); /* 将模拟通道0映射到虚拟通道0 */ ADC_ACRemapSingle(ADC0, ADC_VIRTUAL_CHANNEL0, ADC_ANALOG_CHANNEL0); /* 使能ADC */ ADC_CoreEnable(ADC0); /* 使能虚拟通道 */ ADC_VCEnable(ADC0, ADC_VIRTUAL_CHANNEL0); } void SRPWM_Config(void) { SRPWM_TBInitTypeDef stTBInit; /* 复位SRPWM0,并开启SRPWM0的时钟 */ CRG_PeriphReset(CRG_SRST_SRPWM0); /* 初始化 */ SRPWM_TBStructInit(&stTBInit); stTBInit.period = 0xFFFF; stTBInit.countMode = SRPWM_COUNTMODE_UP; SRPWM_TBInit(SRPWM0, &stTBInit); /* 使能SRPWM0的ADC同步信号0事件输出:周期事件 */ SRPWM_OEPAdcSyncEnable(SRPWM0, SRPWM_OUTEVT_SYNC_PRD_EVT, SRPWM_SYNC0); /* 选择给ADC的触发信号 */ SRPWMCOM_SelectADCTrigger(SRPWMCOM_ADCTriggerRow0, SRPWMCOM_ADCTriggerCol0, SRPWMCOM_ADC_SRPWM0_TRIGGER0); /* 使能高精度旁路 */ SRPWM_HRPWMBypassEnable(SRPWM0); /* 使能PWM模块 */ SRPWMCOM_Enable(SRPWM_CHANNEL_0); } void Test_ADC_Init(void) { ADC_SingleSample_Config(); SRPWM_Config(); } void ADC_Test(void) { unsigned int ret=0; /* 等待采样完成 */ while (ADC_GetVCResultStatus(ADC0, ADC_VIRTUAL_CHANNEL0) != SET); /* 获取采样数据 */ ret = ADC_S16D2toUint(ADC_GetVCResult(ADC0, ADC_VIRTUAL_CHANNEL0)); /* 打印采样结果 */ printf("adc sample code: %d \r\n", ret); } 主函数的代码就只是调用,这里就不写了 我们来看看结果吧 串口端在不停的刷新采样的数值,   转动电阻,可以看到采样数值的变化。 好了,今天就到这里了。            

  • 回复了主题帖: 【翌创ET6001】-04 一波三折的CoreMARK跑分

    Jacktang 发表于 2024-10-25 07:27 开了CACHE之后的跑分才上来,果然厉害 其实我觉得不开CACHE也不该只有八十多分……哈哈哈哈……

  • 2024-10-24
  • 发表了主题帖: 【翌创ET6001】-04 一波三折的CoreMARK跑分

    本帖最后由 申小林 于 2024-10-24 17:12 编辑 我还是来说说吧,这个芯片说实话,有点恼火,没有例程里面没有说如何开CACHE,然后只有到内核文件里面区搜索,我还是按部就班说一下CoreMARK的移植步骤和跑分结果对比 首先修改堆栈大小,修改堆栈大小为0x1000(大于1K即可) 然后修改定时器的相关参数,如图所示 完成基本的定时器和串口的初始化   设置编译优化 跑分下来,跑了两份多钟,结果跑出来88分,连M0的水平都不到…… 但是不应该啊,按道理来说M7的跑分最少都是800分起步,怎么会只有连M0的水平都不到,我查了手册,发现这个是有CACHE的, 查找了M7的内核函数才找到开CACHE的方法,开了CACHE之后的跑分果然就不一样了。   开了CACHE的跑分有1049分,这个分数还是正常的, 对比一下, 根据上面两个对比,相当于初代的STM32F7以及现在才出来的STM32H5的一个水平相当,与现在的H7的水平还相差比较远         好了今天的分享到这里。    

  • 发表了主题帖: 【翌创ET6001】-03-定时器测试

    官网的定时器有点让人捉摸不透,只运行一次,自己找了好久原因,还程序不运行,然后自己找了一下原因,然后吧自己的过程写下来, 首先我们看一下定时器的时钟树。 使用64位的定时器的话我们直接按照官网的PTIM2来进行操作。 然后时钟的频率可以在参考手册里面看到。     可以看到时钟频率是100M,我们这里的话就可以进行编程了。   void PTIMER_peripheral_init(void) { PTIM_InitTypeDef init; PTIM_StructInit(&init); init.prescaler = (100-1);//--200 分频 算下来是1M的时钟 init.period = 999;//--1000分频,算下来就是1ms的中断-- init.workMode = PTIM_WORK_FREERUN; init.loadMode = PTIM_LOAD_IMMEDIATELY; init.cpuHaltEn=ENABLE; PTIM_Init(PIT2, &init); NVIC_EnableIRQ(PIT64_0_IRQn); PTIM_Enable(PIT2); PTIM_ITEnable(PIT2); } unsigned int Tcount=0; void PIT64_0_IRQHandler(void) { if (PTIM_GetITStatus(PIT2) == SET) { PTIM_ClearITStatus(PIT2); Tcount++; if(Tcount==500) { Tcount=0; LED_Togio(); } } } 定时器的代码如山谷所示,我们通过对IO的翻转进行测量,使用逻辑分析仪。       我们使用逻辑分析仪就可以看到,目前我们的IO翻转的时间是比较精确的,这样的话我们就可以做更多的事情了。     好了今天定时器的就先分享到这里。

  • 2024-10-23
  • 发表了主题帖: 【翌创ET6001】-02-串口的调试以及printf的实现

    本帖最后由 申小林 于 2024-10-23 16:41 编辑 看了一下原理图,我们的调试口是支持串口调试的,经过查看原理图,发现了硬件的连接方式,这里就对串口的初始化以及程序做测试。 通过原理图发现IO是接入P3_0和P3_1的,所以我们在硬件初始化的时候需要做对应,查看原理图就是对应的UART0 的接口外设。   我们在编写代码前,还需要确认使用的IO口的复用模式, 我们从手册中可以看到复用模式是这样的,直接默认就是UART0的串口,所以复用模式选择模式0 。 接下来就是写代码了,我们需要做的事情就是初始化IO以及串口的参数。 这里就直接截图给大家,方便看一点。 整体的代码非常简单。 好了,我们在主函数之中,编写代码做测试   弄好了之后,看看效果 到这里之后,现在的测试就成功了。   顺便吐槽一句,原厂的例程写的真简单……      

  • 2024-10-22
  • 回复了主题帖: 【翌创ET6001】-01-开箱以及环境的搭建的注意事项说明

    秦天qintian0303 发表于 2024-10-22 08:52 板子风格很像TI啊,红红的,其实应该弄个开发板的快速使用指南说明一下 感觉上确实和TI的很像,毕竟也是为了替代TI的低端DSP的。

  • 回复了主题帖: 测评颁奖: 三相无刷电机的ESC B-G431B-ESC1 Discovery 套件

    感谢感谢

  • 2024-10-21
  • 发表了主题帖: 《智能驾驶之激光雷达算法详解》-激光雷达未来应用场景展望

    激光雷达作为一种先进的探测系统,具有角分辨率和距离分辨率高、抗干扰能力强、能获得目标多种图像信息(深度、反射率等)、体积小、质量轻等多种优点。未来,随着技术的不断进步和应用场景的不断拓展,激光雷达的应用场景将愈发广泛,以下是具体的展望: 一、无人驾驶与智能交通 自动驾驶汽车:激光雷达是自动驾驶汽车的关键传感器之一,它可以提供高精度的环境感知数据,帮助车辆实现自主导航、避障和路径规划。随着技术的不断发展,激光雷达的探测距离、分辨率、视场角、精确度等指标将不断提升,以满足更高级别自动驾驶的需求。 智能交通系统:激光雷达可用于交通监控、交通流量分析、道路状况评估等智能交通系统的应用中,提高交通管理的效率和安全性。 二、机器人与自动化 机器人导航:激光雷达可为机器人提供精确的环境感知和定位信息,帮助机器人在复杂环境中实现自主导航和避障。 工业自动化:在工业自动化领域,激光雷达可用于生产线上的物料检测、工件定位、质量检测等应用,提高生产效率和产品质量。 三、测绘与监测 地形测绘:激光雷达可用于高精度地形测绘,生成详细的地形图、高程模型等,为地理信息系统(GIS)提供支持。 环境监测:激光雷达可用于环境监测领域,如空气质量监测、水质监测、森林植被监测等,为环境保护提供科学依据。 四、智慧城市与智能家居 智慧城市:激光雷达可用于智慧城市的建设中,如智能交通、公共安全、城市管理等领域的应用,提高城市管理的智能化水平。 智能家居:激光雷达可用于智能家居领域,如智能安防、智能照明、智能控制等应用,提高家居生活的便捷性和安全性。 五、其他领域 农业:激光雷达可用于精准农业领域,通过测量农田的生物量、高度和体积等信息,指导农作物的种植和管理。 文化遗产保护:激光雷达可用于捕捉艺术品和文物的三维模型,以进行数字化保存和文化遗产保护。 犯罪现场重建:激光雷达可用于扫描犯罪或车祸区域,为刑事案件的调查提供重要线索和证据。 综上所述,激光雷达作为一种先进的探测系统,在未来将具有广泛的应用场景和巨大的市场潜力。随着技术的不断进步和应用场景的不断拓展,激光雷达将在无人驾驶、机器人、测绘、监测、智慧城市、智能家居以及其他多个领域发挥重要作用,为人们的生产和生活带来更多便利和安全。

  • 发表了主题帖: 【翌创ET6001】-01-开箱以及环境的搭建的注意事项说明

    周六到的快递,然后今天来到公司就做了开箱,想着第一时间展示给大家,在搭建环境的时候还是遇到了一些问题,所以这里和大家锁一下如何避免这些问题,其实M7的内核还是有一些注意事项的,希望对大家有所帮助,后面我也会把自己的工程发给你大家一起来学习一下。 整体包装   介绍卡片 开发板整体外观 整体来说开发板的外设还是比较齐全的,串口、ADC、CAN、关键是所有的引脚都引出来了,这样的话还是会比较方便的,对于芯片测试来说可以尽量保证测试的完整性。   那么我来说一下这个使用中注意事项把。 1:关于建立工程,如果是要挪到其他地方做编译的话,还需要添加Crotex-M7的内核文件, 2:下载算法需要复制到KEIL的这个目录下。   3:关于建立工程,还需要选择初始化文件,初始化文件在例程里面是有的,需要拷贝过来,并在KEIL里面设置路径和名称   好了,完成了这个的话就可以开心的玩耍了,另外一点就是,原理图上以及PCB板上很多都是需要做跳线的,才能完成硬件连接,多看看原理图。    

  • 2024-10-16
  • 回复了主题帖: 测评入围名单: 国产高性能 双核M7 MCU,翌创ET6001

    个人信息无误,确认可以完成测评分享计划。

  • 2024-10-08
  • 回复了主题帖: 邀您云逛展《TE Connectivity 线上工博会》报名有好礼!

  • 2024-09-26
  • 发表了主题帖: 《智能驾驶之激光雷达算法详解》-激光雷达的实际应用案例以及未来发展趋势

      其实对于我个人来说,我所知道的激光雷达的应用案例并不多,而且大多数的激光雷达的应用是在汽车行业,和物流行业,但是对于激光雷达的应用我想肯定不止这些,我从书中获得的消息以及我从网上查阅的一些资料来看,激光雷达的应用领域是非常广的,从汽车、物流、医疗、航天、机器人行业都有较大范围的应用,那么我们就来说说具体的东西吧。 激光雷达作为一种先进的多用途技术,已经在多个领域展现了其强大的应用潜力。以下是几个激光雷达的实际应用案例: 1. 自动驾驶汽车 高精度导航与避障:激光雷达通过发射激光脉冲并测量反射时间来精确测量周围物体的距离和速度,为自动驾驶汽车提供高精度导航和避障能力。例如,问界M9搭载的华为192线激光雷达,具有250米的识别距离和184万点/秒的成像能力,能够显著提升自动驾驶的安全性和可靠性。 环境感知:激光雷达能够生成详细的环境点云图,帮助自动驾驶系统实时感知周围环境,包括道路、车辆、行人等,从而做出正确的驾驶决策。 2. 航空航天 机身检测:在航空制造业中,激光雷达被用于检测飞机机身和机翼的精确尺寸和形状。例如,波音787的机身段和起落架舱门检测就采用了激光雷达技术,显著提高了检测效率和精度。 空间测量:激光雷达还可以用于空间测量,如测量大型结构物的尺寸和形状,为航空航天领域的精密制造提供支持。 3. 智能制造 非接触式测量:在铸造业中,激光雷达的自动测量功能可以实现对铸造工件的非接触式测量,避免了传统测量方式可能带来的损伤和误差。同时,激光雷达还可以与CAD理论数模进行比较,获得实际工件与理论数据的误差值。 生产线自动化:激光雷达的自动化测量能力可以显著提升生产线的自动化水平,降低人工成本,提高生产效率。 4. 环境保护 大气监测:激光雷达在环境保护领域也有重要应用。例如,通过垂直监测和水平扫描,激光雷达可以实时监测大气中的颗粒物浓度和分布,为环保部门提供及时、准确的数据支持。 污染源定位:激光雷达还可以安装在监测车上进行走航监测,通过高精度GPS信息与雷达监测数据的同步记录,实现对污染源的精确定位和高值区域分布监测。 5. 医疗领域 疾病诊断:激光雷达在医疗领域的应用也逐渐兴起。其高精度、高分辨率和非接触式的特点使其成为疾病诊断的理想工具。例如,激光雷达技术可以通过测量肺部组织的反射光谱来检测肺癌早期病变,甚至在患者出现症状之前进行筛查。 手术规划:激光雷达还可以用于手术规划,通过生成高分辨率的三维图像来提供详细的解剖结构信息,帮助医生制定更精确的手术方案。 综上所述,激光雷达在自动驾驶汽车、航空航天、智能制造、环境保护和医疗领域等多个方面都有广泛的应用案例,并且随着技术的不断进步和应用场景的不断拓展,其应用前景将更加广阔。

  • 2024-09-11
  • 回复了主题帖: 中秋芯积分兑换月饼、实用工具健身器材啦!

    可惜我没有积分,我积分不够没可能一直未论坛做着贡献却往届积分这件事情了……是我失误了,对不起大家了。

  • 2024-09-08
  • 发表了主题帖: 《智能驾驶之激光雷达算法详解》-关于激光雷达的算法

           说到激光雷达的算法,其实是有一个过程的,按照我们人类的感知去做一件事情,激光雷达就好像人类的眼睛一样,我们再去了解眼前的物体的时候,我们通常的做法是用眼睛去观察,那么激光雷达的做法是一致的,我们首相要对物体进行扫描,在对物体进行学习对比,经过对比之后再去确定这个物体是什么,其中有两点需要注意,一个是对比的对象以及对比的知识库从哪里来的?我们从小孩开始的时候都会有父母引导我们去了解周边的事物,我们的 父母也是我们的老师,给到你一件事情的对与错的答案,对于机器学习,那么我们人类给到的训练就是我们对比的数据库,我们将如何去对比,以及对比的特征点告诉了激光雷达,激光雷达首先是整体做一次扫描,然后根据扫描的结果组成一个3D的数据模型,相当于一个坐标点集合一样,以上的是我看了书之后的观点,但是没有实际的论据证明这些,而我们的书中从第三章开始,从激光雷达的扫描、外参标定、地平面分割,聚类分割,这些基础的图像扫描再到深度学习,,目标检测以及目标跟踪,最终到组合定位,多传感器的融合的阶段,是作者对于整个激光雷达的期盼,我今天就和大家来一起学习以下关于激光雷达的一些算法吧。   首先说一下,关于激光雷达的应用,通常的情况下是二维的应用,和3维的应用,二维和三维的应用是完全不一样的,对应的算分等级也是差距非常大的,在专业术语中被称为单线激光雷达算法和多线激光雷达算法其特点如下: 单线激光雷达算法: 主要应用于平面运动场景,构建的是二维地图。 典型的算法包括gmapping、hector、karto、cartographer等,这些算法都是基于粒子滤波或优化方法构建的二维栅格地图。 多线激光雷达算法: 可应用于三维运动场景,能够构建三维环境地图。 较为知名的算法有LOAM、LeGO-LOAM、LOAM-livox等,这些算法侧重于从多线激光雷达数据中提取特征点,并进行帧间匹配和地图构建。 我们书中提到的多是3D的激光累的的算法。 第一阶段:     在该阶段的标定中,SSAC算法根据地面点云求解俯仰角pitch、横滚角ro和纵向位移(即高度)4。如图3-3所示,我们注意到,当LDAR坐标系和车体坐标系有角度偏差时例如在 pitch 角度分量有顺时针方向的俯仰角,则水平地面在LiDAR坐标系下将呈现逆时针方向的倾角y。这是第一阶段的基本步骤,然后就是建立粒子群优化工作,按照算法流程进行不断地迭代,直到数据达到一个设定的阈值。   第二阶段: 在该阶段的标定中,SSAC算法仅考虑激光雷达相对车体偏航角的标定。具体过程如下假设车辆沿着世界坐标系的x轴直线行驶,记录车辆行驶过程中包含同一个标定杆的激光点云,通过高程滤波等方式提取出标定杆,再采用K均值算法得到标定杆的点云聚类中心,在世界坐标系的OX一维平面上,将每标定杆中心经最小二乘法拟合,得到一条真线, 上面的两个阶段主要是完成了扫描和粒子关系的建立,以及粒子集合的运算。 接下来就是根据上面获得的粒子的数据,进行坐标的建立以及方位的标定 在本书中使用的是基于手眼模型的LIDAR外参标定,然后使用NaVY算法求解手眼模型,,这样的话就可以建立出一个3D的模型,       实际上,激光雷达的算法分类并不是孤立的,很多算法都是基于多种技术和方法的综合应用。例如,一个完整的激光雷达系统可能同时包含障碍物检测、目标识别、运动估计和地图构建等多种算法,这些算法之间会相互协作,共同完成复杂的环境感知任务。激光雷达的算法分类是一个复杂而多元的领域,涵盖了从单线到多线、从二维到三维、从障碍物检测到地图构建等多个方面。随着技术的不断发展,激光雷达算法也在不断演进和完善,为自动驾驶、机器人导航等领域提供了强大的技术支持。       好了,今天主要和大家讲的是3D模型里面的基础理论,我自己也还是不太懂里面的算法和具体的公式的来源推导,但是算是了解了激光雷达的基本运行原理以及模型的建立,后面会根据自己的学习再来进行分享。                                                                                                                                                                                                                                                                                                                                                                    

  • 2024-08-27
  • 回复了主题帖: >>征集 | 使用 MCU,哪些问题最令你头大?

    1、各家IC设计逻辑不互通,开发习惯不便 2、配置顺序有差异,开发习惯不便于 3、MCU同质化严重,外设接口和处理性能相差无几,解决范围并无扩展 4、各家追求通用型,但是外设性能不曾提高,例如多数使用12bitADC,可能实际也只有十位半,而我想进行更高精度分辨,则依旧要外挂一个16bit或24bit的专用IC,性能与空间的浪费和上升了成本,提别是在如今12bit基本已经算半退前沿市场了,12bitADC将来恐怕基本鸡肋,或者无法打出差异化市场。

  • 发表了主题帖: 《智能驾驶之激光雷达算法详解》-全书整体观感

        非常高兴有机会能够试用《智能驾驶之激光雷达算法详解》这本书,因为自己也在研究AGV小车,从硬件到结构到软件,自己都是非常感兴趣的,所以做了这本书的申请阅读,也非常感谢EEworld能够给我这一次的试用的机会,让我可以更深入的了解到激光雷达的一些基础应用性的东西。     在阅读了《智能驾驶之激光雷达算法详解》一书后,我深感此书对于智能驾驶技术,特别是激光雷达在其中的应用,提供了全面而深入的解析。这本书不仅覆盖了激光雷达的基本原理、发展历程,还详细阐述了激光雷达在智能驾驶中的标定、感知和定位算法,为读者提供了宝贵的理论和实践指导,整个书籍的架构也是非常的明确,从最开始的“激光雷达初识”,再到基础的算法讲解,激光云的聚类分割,再到由激光云形成3D云图,从而引申到算法,并对算法进行了深入的讲解,最后以展望整个激光雷达的使用未来进行了定位,可以说结构衔接非常精密,裸机思维非常的严密。     首先,书中对激光雷达的基本原理和发展历程进行了详尽的介绍。激光雷达(LiDAR)作为光探测和测距技术,通过发射激光束并测量反射回来的光波,从而确定物体的位置、距离和形状。这一技术的独特之处在于其高精度和抗干扰性,特别是在恶劣天气条件下的表现尤为突出。书中通过生动的描述和图示,让我对激光雷达的工作原理有了更加直观的理解。在标定算法部分,书中详细介绍了激光雷达与车体的外参标定算法以及激光雷达和相机间的外参标定算法。这些标定算法是确保激光雷达数据准确性的关键步骤,直接关系到后续的数据处理和分析。书中不仅介绍了传统的基于标定物的标定方法,还探讨了无标定物的动态在线标定算法,如AOCCL算法等。这些算法的创新性和实用性让我深受启发,也让我意识到标定算法在智能驾驶中的重要性。      感知算法部分是本书的重点之一。书中详细介绍了基于激光雷达进行地面检测、障碍物聚类、目标检测、多目标跟踪、路沿检测等代表性算法。这些算法通过处理激光雷达获取的点云数据,实现了对周围环境的精确感知。特别是基于3D激光点云的地面分割和聚类分割算法,如级联地面分割算法、SLR聚类算法等,让我对激光雷达的感知能力有了更加深入的认识。同时,书中还介绍了基于深度学习的目标检测算法,如PointNet和PointRCNN网络,这些算法利用深度学习的强大能力,进一步提高了目标检测的准确性和鲁棒性。定位算法部分则介绍了激光里程计、激光雷达+IMU组合定位算法以及多传感器融合定位与建图算法。这些算法是确定车辆在地图中位置和姿态的关键,对于实现智能驾驶的自主导航具有重要意义。书中详细阐述了各种定位算法的原理和应用场景,让我对定位算法有了更加全面的了解。      此外,书中还探讨了激光雷达在恶劣环境下的应用难点和解决方案。例如,在大雨、雾霾等能见度极低的环境下,激光雷达的感知能力会受到一定影响。为此,书中介绍了结合灰尘/雨雾过滤的AI智能算法,通过大量的对比实验计算,提高了激光雷达在恶劣环境下的感知能力和探测精度。这一部分内容让我深刻认识到,技术的不断进步和创新是解决实际问题、推动智能驾驶技术发展的关键。     总的来说,《智能驾驶之激光雷达算法详解》是一本内容丰富、技术前沿的著作。它不仅为我提供了关于激光雷达算法的全面知识,还激发了我对智能驾驶技术的浓厚兴趣。我相信,在未来的学习和工作中,这本书将成为我不可或缺的参考和指导。同时,我也期待随着技术的不断进步和创新,智能驾驶技术能够为我们带来更加安全、便捷、高效的出行体验。

  • 发表了日志: 《智能驾驶之激光雷达算法详解》-全书整体观感

最近访客

< 1/6 >

统计信息

已有197人来访过

  • 芯积分:425
  • 好友:2
  • 主题:30
  • 回复:143

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言