1.Psensor – 监控Linux硬件温度 [主板和CPU]
2.STM32F207çDevKit1207ç主è¦ç¹ç¹
3.Intel integrated sensor solutionè½å å
4.5.AMCL包源码分析 | 粒子滤波器模型与pf文件夹(一)
5.4.AMCL包源码分析 | 传感器模型与sensor文件夹
6.Cartographer源码详解|(2)Cartographer_ros
Psensor – 监控Linux硬件温度 [主板和CPU]
Psensor是一款基于GTK+的Linux硬件监控工具,能够实时显示和绘制温度数据图表。为了使用Psensor,需要先确保系统中安装了两个依赖包:lm-sensor和hddtemp。在大多数Linux发行版中,这两个包从默认存储库提供,送菜商城源码但若在基于RHEL的系统上,需先安装并启用epel-release存储库。对于Fedora Linux用户,将yum替换为dnf。在基于Debian的系统上,使用apt命令安装。对于Arch和OpenSuse,安装过程如图所示。完成依赖安装后,可通过命令在类Debian系统、Arch和OpenSuse上安装Psensor。不幸的是,基于RedHat的系统上,Psensor不在默认存储库中提供,因此需要从源代码编译安装。raw os源码安装过程包括下载最新稳定的Psensor源码压缩包,然后使用命令编译。如果计划查看远程服务器的温度和风扇速度,需额外安装Psensor Server。
对于那些希望从命令行监控Linux硬件温度的用户,可以使用sensors-detect通过传感器诊断硬件并运行sensors命令,键入默认选项'Yes'直到熟悉流程。Psensor的GUI版本允许用户从桌面应用程序菜单运行软件,选中所有传感器以绘制图表,并注意到颜色编码。Psensor的自定义功能丰富,用户可在界面、温度单位、传感器表位置、启动时行为、窗口大小、前景/背景颜色、监控持续时间、更新间隔、传感器设置以及所有传感器的ble app源码启用/禁用配置等选项进行调整。
Psensor是硬件温度监控的强大工具,它有助于避免由于过热导致的硬件损坏和系统崩溃,从而保护宝贵的数据和避免高昂的重建成本。随身携带Psensor或类似工具,确保系统稳定运行,始终是一个明智之举。
STMFçDevKitç主è¦ç¹ç¹
***é ç½®3.5寸工ä¸çº§LCD触æ¸å±ï¼æ¯æ4线触æ¸ã***1è·¯USB2.0 OTG Full-Speedï¼1è·¯USB2.0 OTG High-Speedã
***G-Sensorä¸è½´å éåº¦ä¼ æå¨ã
***IEEE v2ç/ Mbps以太ç½æ¥å£ã
***æ¯æUCOS II_v2. & UCGUI_v3.a,并æä¾BSPæºç ã
***æ¯æFatFs_vR0.a æ件系ç»(ç¨äºUçï¼SDå¡çæ件系ç»)ã
***æ¯æLwIP_v1.3.2åè®®æ ã
***å·¥ä¸çº§çå¨ä»¶éåãä»å®é åºç¨çè§åº¦èèï¼æéåå¨ä»¶çè´§æºä»¥
åä¾è´§å¨æé½æ足å¤çå¸åºä¿éã å¤çå¨
STMFIGT6ï¼ARM -bit Cortex-M3ï¼æé«è¿è¡é¢ç为MHz
å é¨éæ1 MBFlash memory,+4KB SRAM
æ¯æçå¤Flash, SRAM, PSRAM, NORåNAND Flash
LCD 并è¡æ¥å£ï¼/ 模å¼
USB 2.0 Full-speed/High-speed Device/Host/OTG
/ Ethernet MAC.ï¼æ¯æ硬件IEEE v2ï¼MII/RMIIï¼
2è·¯CAN2.0Bï¼4è·¯UARTï¼2è·¯å ¨åå·¥I2Sï¼3è·¯I2Cï¼3è·¯SPIæé«Mbit
8å° bit 并è¡æå头æ¥å£ï¼æé«è¾¾Mbyte/s
1/4/8bit SD/MMC/SDIO主æºæ¥å£ï¼æé«å®¹éå¯æ¯æGB
é«è¾¾ä¸ªI/Oå£ï¼æé«é¢çMHz
个å®æ¶å¨ï¼å ¶ä¸2个为ä½ï¼ï¼æé«è®¡æ°é¢ç为MHz
3è·¯-bit é«è¾¾2Mç A/Dã2è·¯-bit D/A
模æéæºæ°çæå¨
è¶ ä½åèï¼æ¯æç¡ç ãåæºãå¾ æºä¸ç§æ¨¡å¼
æ¯æFlashãç³»ç»å ååSRAMä¸ç§å¯å¨æ¹å¼
æ¯æISPåIAPç¼ç¨
åå¨å¨
æ¿è½½I2Cæ¥å£ç2Kbits EEPROM
å¤æ©Micro SDå¡åå¨
é³é¢æ¥å£
ä¸è·¯ç«ä½å£°é³é¢HeadPhoneè¾åºæ¥å£ ä¸è·¯æ¬å£°å¨è¾åºæ¥å£
ä¸è·¯é³é¢DACè¾åºæ¥å£
液æ¶è§¦æ¸å±æ¥å£
å辨çï¼ (W) x (H) dots
RGBï¼ colors
bit 并è¡æ¥å£
4线触æ¸å±
亮度å¯è°ï¼PWMæ§å¶ï¼
ä¼ è¾æ¥å£
1è·¯5线串å£ï¼RSçµå¹³
USBæ¥å£ï¼ 1 x USB2.0 OTG/device/host,High-speed,Mbps
1 x USB2.0 OTG/device/host,Full-speed,Mbps
1è·¯TFCARDæ¥å£
ç½ç»æ¥å£ï¼ç¡¬ä»¶IEEE v2ç/Mbps以太ç½æ¥å£ï¼æ åRJ è¿æ¥å¨
1è·¯CAN2.0Bæ¥å£
1è·¯IrDAæ¶åå¨
è¾å ¥æ¥å£
1è·¯AD转æ¢æ¥å£ï¼çµä½å¨å¯è°çµé»æ¨¡æè¾å ¥ï¼ 2个ç¨æ·æé®ï¼1个å¤ä½æé®,1个å¤éæé®
pinæ åJTAGè°è¯æ¥å£
RTC
ä¸è·¯RTCæ座
LEDæ示ç¯
1个çµæºæ示ç¯
2个USB OTG FSæ示ç¯
2个USB OTG HSæ示ç¯
4个ç¨æ·èªå®ä¹ç¯
çµæ°ç¹æ§
æä½æ¸©åº¦ : - â ~ â
æä½æ¹¿åº¦ : % ~ %
ç³»ç»ç¹æ§
æ¯æuCOS-II_v2.以åFreeRTOS_v6.1.0å®æ¶æä½ç³»ç»
æ¯æUCGUI_v3.a
æ¯æFatFs_vR0.a æ件系ç»
æ¯æLWIP _v1.3.2åè®®æ
驱å¨ç¨åº&åºç¨å±èä¾ï¼(ä¸è½½DevKitè¯ä¼°å¥ä»¶æ¦è¿°ï¼å¯äºè§£æ´å¤)
DevKitè¯ä¼°å¥ä»¶æä¾å®åç驱å¨æ¯æ以å丰å¯çåºç¨èä¾ã帮å©å®¢æ·å¿«éè¿å ¥äº§åçäºæ¬¡å¼åï¼èçå¼åæ¶é´ã主è¦å 容å¦ä¸ï¼
åºæ¬é©±å¨ä¾ç¨ï¼ADC, CAN, CRC, DAC, DMA, EXTI, FLASH, GPIO, I2C, I2S, IWDG, LCD-Touch, Lib_DEBUG, NVIC, PWR, RCC, RNG, RTC, SDIO, SysTick, TIM, USART, WWDG
IRDA红å¤é©±å¨ä¾ç¨
I2Sè¯é³ææ¾é©±å¨ä¾ç¨
G-Sensor(ä¸è½´å é度计)åºç¨ä¾ç¨
SDå¡æ¯æFatFs_vR0.aæ件系ç»åºç¨ä¾ç¨
USB Host/Device/OTGåºç¨ä¾ç¨
Ethernetåºç¨ä¾ç¨
uCOS-II_V2. & UCGUI_v3.aæä½ç³»ç»ç§»æ¤ä¾ç¨ å»ç产å
å·¥ä¸èªå¨å
æºè½ä»ªè¡¨
æ¶è´¹çµå
楼å®å®é²
Intel integrated sensor solutionè½å å
å¯ä»¥å é¤ï¼C驱å¨å¨ä¸çIntelæ件夹æ¯å®è£ Intel驱å¨ç¨åºæ¶å©ä¸çæ件夹ãå®å å«è±ç¹å°äº§å设å¤ç驱å¨ç¨åºæ件ãå·²å®è£ 计ç®æºé©±å¨ç¨åºï¼åå¯ä»¥å°å ¶å é¤ãå é¤å¦ä¸ï¼
1ãé¦å æå¼è®¡ç®æºä¸çæ¬å°ç£çï¼ç¶åæ¾å°C驱å¨å¨ã
2ãç¹å»è¿å ¥Cçï¼å¯ä»¥çå°Cçä¸çintelæ件夹ï¼
3ãéæ©intelæ件夹ï¼ç¶åéæ©âå é¤âï¼
4ãç¶åï¼å¨C驱å¨å¨ä¸çä¸å°intelæ件夹ã
æ©å±èµæï¼
设å¤é©±å¨ç¨åºç¨æ¥å°ç¡¬ä»¶æ¬èº«çåè½åè¯æä½ç³»ç»ï¼å®æ硬件设å¤çµåä¿¡å·ä¸æä½ç³»ç»å软件çé«çº§ç¼ç¨è¯è¨ä¹é´çäºç¸ç¿»è¯ã
设å¤é©±å¨ç¨åºé常ä¼å å°ï¼ 以ä¸ä»½é¢çæä½ç³»ç»å æ ¸æºç ï¼ä¸è®¾å¤é©±å¨ç¨åºçæ´æ°ç»´æ¤å¾å¾ä¼çµæ¶å°è¶ è¿ï¼ çæºç ä¿®æ¹ï¼æ èä¿æ设å¤é©±å¨ç¨åºä¸æä½ç³»ç»å æ ¸ä¸æååçå ¶ä½é¨åçä¸è´æ§æ¯æä½ç³»ç»å æ ¸å¼åçä¸é¡¹é¾é¢
5.AMCL包源码分析 | 粒子滤波器模型与pf文件夹(一)
粒子滤波器这部分内容较为复杂,涉及众多理论与数据结构,我们将分多个部分进行介绍。本部分内容主要对pf文件夹进行简要分析,包括蒙特卡罗定位在pf中的代码实现、KLD采样算法的理论介绍及其在pf中的具体实现。
pf文件夹主要由以下部分组成:3✖3对称矩阵的特征值和特征向量的分解、kdtree的创建与维护方法、Gaussian模型与概率密度模型采样生成粒子、三维列向量、三维矩阵、实现pose的向量运算、局部到全局坐标的转换以及全局坐标到局部坐标的转换。
接下来,源码 反码 补码我们将对各个头文件进行简要分析。
粒子滤波器是AMCL定位的理论基础,属于粒子滤波的一种。关于粒子滤波的原理及代码效果演示,可以参考相关资料。
AMCL包中的粒子滤波器作用如下:首先,参考pf.cpp中的pf_update_action函数,了解sample_motion_model代码实现;其次,参考pf.cpp中的pf_update_sensor函数,了解measurement_model的代码实现。
AMCL引入KLD采样理论,对蒙特卡罗定位进行再次改进。参考《概率机器人》第8章,讨论粒子滤波器的效率及采样集大小的重要性。KLD采样是蒙特卡罗定位的一个变种,它能随时间改变粒子数,降低计算资源的浪费。
3.1 KLD_Sampling_MCL算法介绍:算法将以前的采样集合、地图和最新的控制及测量作为输入,要求统计误差界限err和sigma。转转麻将 源码在满足统计界限之前,KLD采样将一直产生粒子。算法产生新粒子,直到粒子数M超过Mx和使用者定义的最小值Mx(min)。
3.2 KLD采样算法在AMCL包中的具体应用:代码在pf.cpp中的pf_update_resample函数中实现。接下来,我们将详细分析pf文件夹里每个CPP文件的代码逻辑。
4.AMCL包源码分析 | 传感器模型与sensor文件夹
AMCL包在机器人定位中扮演关键角色,通过粒子滤波器实现对机器人位姿的估计。本文将深入探讨AMCL包的核心组成部分:运动模型与观测模型,以及它们对输出位姿的影响机制。运动模型与观测模型共同协作,确保粒子滤波器能够准确地跟随机器人运动,并通过观测更新粒子的权重,最终输出机器人在环境中的估计位姿。
在AMCL包中,传感器模型主要体现在两个重要类的定义:AMCLSensor和AMCLSensorData。AMCLSensor类提供了一组接口,用于根据运动模型更新粒子滤波器,同时定义运动模型中的位姿。与此并行的是AMCLSensorData类,它负责组织AMCLSensor类的实例,确保它们能够协同工作以实现高效的粒子滤波。
运动模型是AMCL包中的核心组件之一,它主要关注于根据机器人当前的运动类型(如差分驱动或全向驱动)来选择相应的运动模型。这些模型通过更新粒子样本的位姿来反映机器人的运动情况。运动模型通常涉及定义不同输入参数,并通过模拟机器人的物理运动来更新粒子滤波器的状态。
观测模型则负责对粒子滤波器进行观测更新,即根据传感器输入(如激光雷达或里程计数据)计算每个粒子样本的权重。观测模型的选择通常取决于所使用的传感器类型,例如激光雷达传感器可能采用波束模型、似然域模型或极大似然域模型等。在实现中,观测模型通过定义测量值、最大测量距离和激光射线数目等参数来描述传感器特性,并基于这些参数计算粒子样本的权重。
运动模型与观测模型之间的关系至关重要。运动模型通过更新粒子样本的位姿来反映机器人的运动,而观测模型则基于这些更新后的位姿计算权重。两者相辅相成,共同驱动粒子滤波器的迭代更新,最终输出机器人在环境中的估计位姿。
在AMCL包中,运动模型和观测模型的实现涉及多个层次的细节,包括对运动模型的参数化、对观测模型的选择和配置、以及粒子滤波器的更新算法。这些组件共同协作,确保AMCL包能够提供准确、实时的机器人定位和定位修正能力。
综上所述,AMCL包通过运动模型和观测模型的协同作用,为机器人提供了强大的定位能力。这些模型在实现中紧密集成,确保了粒子滤波器的高效运行和准确性。AMCL包的传感器部分不仅提供了对运动和观测的详细建模,还为后续的机器人定位应用提供了坚实的基础。
Cartographer源码详解|(2)Cartographer_ros
上一篇文章深入分析了传感器数据的流向,接下来让我们继续探讨传感器格式的转换与类型变换。这部分内容在sensor_bridge.cc文件中。在处理传感器的坐标变换时,我们需要运用三维空间刚体运动的知识,先进行简要回顾,以助于理解代码。
三维空间刚体运动涉及向量内积与外积。向量内积的计算公式如下,表示两个向量的点乘。向量外积则是一个向量,其方向垂直于两个向量,大小为两向量张成四边形的有向面积,计算公式如下。
旋转和平移是欧氏变换的两个关键部分。旋转涉及单位正交基的变换,形成旋转矩阵(Rotation matrix),该矩阵的各分量由两组基之间的内积组成,反映了旋转前后同一向量坐标的变化关系。平移则通过向旋转后的坐标中加入平移向量t实现。通过旋转矩阵R和平移向量t,我们可以完整描述欧氏空间中的坐标变换关系。
为了简化变换过程,引入齐次坐标和变换矩阵。在三维向量末尾添加1形成四维向量,进行线性变换。变换矩阵T能够将两次变换叠加简化为一个操作,便于后续计算。
Cartographer的坐标转换程序位于transform文件夹下的rigid_transform中,用于求解变换矩阵的逆。
在sensor_bridge类中,构造函数将传入配置参数,对里程计数据进行处理。首先将ros时间转换为ICU时间,然后利用tf_bridge_.LookupToTracking函数找到tracking坐标系与里程计child_frame_id之间的坐标变换。在ToOdometryData函数中,将里程计的footprint的pose转换为tracking_frame的pose,并最终将结果转换为carto::sensor::OdometryData的数据类型。
HandleOdometryMessage函数将传感器数据类型与坐标系转换完成后,调用trajectory_builder_->AddSensorData进行数据处理。对于雷达数据,首先转换为点云格式,然后对点云进行坐标变换,并调用trajectory_builder_->AddSensorData进行数据处理。
IMU数据处理中,要求平移分量小于1e-5,然后调用trajectory_builder_->AddSensorData对数据进行处理。
在雷达数据处理部分,首先将点云数据分段,然后传给HandleRangefinder处理,将点云坐标变换到tracking_frame坐标系下,调用trajectory_builder_->AddSensorData函数进行数据处理。
总结本章内容,我们详细解析了SensorBridge类,对传感器数据进行了转换和传输。通过Node类、MapBuilderBridge类和SensorBridge类,我们对Cartographer_ros部分的代码有了基本了解。接下来,我们将深入学习cartographer。