- 博客(167)
- 收藏
- 关注
原创 CMake 详解:跨平台构建系统的入门与进阶
CMake 是一个开源的跨平台构建工具,它能够通过简单的描述文件来生成标准化的构建系统。它的主要目标是简化构建过程,特别是在多平台和多编译器的环境下。CMake 可以自动处理编译器设置、依赖关系、目标生成等任务,避免了手动配置Makefile的复杂性,因为在复杂工程文件中,Makefile的依赖关系难以确定,手动编写复杂性很高。CMake 的优势之一是支持多种操作系统平台,包括 Windows、Linux 和 macOS,这使得它成为了跨平台开发中不可或缺的工具。
2025-03-24 20:40:27
715
原创 ROS实践(五)机器人自动导航(robot_navigation)
机器人导航是指机器人在环境中自主地从一个地点移动到另一个地点的过程。这个过程涉及到多个关键技术,包括定位、路径规划、避障等。机器人导航通常包括以下几个重要部分。
2025-03-13 14:42:17
957
原创 ROS实践(四)机器人SLAM建图(gmapping)
在运行gmapping节点时,它会订阅指定的传感器数据和里程计信息,并输出构建的地图数据。通过测量轮子的旋转角度计算机器人在平面上的运动轨迹,适用于短时间内的相对位置估计,但存在累积误差,因此常与IMU、LiDAR、视觉SLAM结合使用以提高定位精度,广泛应用于移动机器人、自主导航、AGV(自动导引车)等。即同时定位与地图构建,是一种概念,旨在让机器人从未知环境的未知地点出发,在运动过程中通过重复观测到的环境特征定位自身位置和姿态,再根据自身位置构建周围环境的增量式地图,从而达到同时定位和地图构建的目的。
2025-03-11 17:51:13
1473
原创 ROS实践(三)机器人描述文件xacro(urdf扩展)
你可以在xacro文件中定义变量(参数),这些变量可以在宏中使用,也可以传递给其它部分。这使得配置变得更加灵活和动态。在这个例子中,是一个参数,表示轮子的半径。在后续的代码中,可以直接使用这个参数。功能:这段代码描述了一个机器人(mybot)的 物理模型和结构,代码通过定义多个链接(link)和关节(joint)来描述机器人的组成部分,包括主体、轮子、支撑轮、激光雷达等。当我们构建不同的机器人模型时,都可以引用之前的仿真配置。-- 引入外部的 xacro 文件,用于包含 Gazebo 仿真配置 -->
2025-03-11 12:13:37
1128
原创 ROS实践(二)机器人模型描述文件urdf
URDF(Unified Robot Description Format)是一种基于XML的格式,用于描述机器人模型的结构、关节、连杆和传感器信息,并可以与Gazebo、RViz等仿真环境结合使用。
2025-03-10 10:11:43
927
原创 ROS分布式部署通信
用于在多台计算机之间共享 ROS 话题(topics)、服务(services)和参数(parameters)。这在机器人系统中非常常见,例如:一台主控电脑(主机) 运行计算任务,多个机器人或设备(从机) 负责执行任务。ROS 使用作为中央协调节点,所有假设我们有一台PC虚拟机和一台树莓派,它们都运行相同的操作系统,并处于同一局域网中。在这种配置下,我们可以将树莓派连接到小车,利用树莓派来控制小车的运动。
2025-03-08 16:58:24
1066
原创 ROS实践(一)虚拟仿真平台Stage/Gazebo(虚实结合)
答:机器人模型是在虚拟地图文件.world文件中定义的,它会自动来读取/cmd_vel这个话题的内容来控制自身运动。如果只有一个机器人,默认读取 /cmd_vel这个话题。
2025-03-07 17:48:04
599
原创 嘉立创EDA一自画元件及其封装
在嘉立创(JLCPCB)的EDA工具中,自画元件及其封装是一个非常重要的操作,尤其是在设计一些比较独特或者非标准的元件时。,然后在实际PCB设计中使用。通过这些步骤,你可以为自己的项目创建个性化的元件和封装,确保电路板设计符合特定需求。
2025-02-23 22:27:45
1147
原创 嵌入式八股文(五)硬件电路篇
假设你想用一个LED灯,它的工作电流是20mA,而电源电压是5V。假设你有一个直流电源,它的波动为50Hz,你可以在电源输出端并联一个电容,它会对50Hz的波动提供“短路”作用,从而将电压波动抑制到最低。在电源电路中,电容常用于平滑交流电源的波动。比如整流后的直流电源有一定的波动,电容可以将这些波动滤除,提供更稳定的电压输出。在并联电路中,元件的两端分别连接到相同的电压源,即并联电路中元件的。① 串联电路总电压等于各元件电压之和,总阻值为各个元件阻值总和。在电路中,电阻常用于控制电流、分压、限流等。
2025-02-23 10:59:33
2205
原创 贴片式TF卡测评体验(雷龙)
使用pSLC技术,拥有高容量的同时兼具SLC的特性,不用写驱动程序自带坏块管理的NAND Flash(贴片式TF卡),尺寸小巧,简单易用,兼容性强,稳定可靠,固件可定制,LGA-8封装,标准SDIO接口,兼容SPI,兼容拔插式TF卡/SD卡,可替代普通TF卡/SD卡,尺寸6.2x8mm,内置平均读写算法,通过1万次随机掉电测试,耐高低温,机贴手贴都非常方便,速度级别Class10,标准的SD 2.0协议使得用户可以直接移植标准驱动代码,省去了驱动代码编程环节。
2025-02-20 11:28:48
667
2
原创 嵌入式八股文(三)操作系统篇
死锁是指两个或多个进程因争夺资源而导致相互等待的现象,这些进程无法继续执行下去,形成了一个“僵局”。死锁产生的四个必要条件(1)互斥条件:至少有一个资源是以非共享模式分配的,即每次只有一个进程能够占用该资源。(2)持有并等待条件:一个进程至少持有一个资源,并等待获取其他进程持有的资源。(3)不剥夺条件:已经分配给进程的资源,在没有使用完成之前,不能被强制剥夺。(4)循环等待条件:存在一种进程资源的循环等待关系,即进程 A 等待进程 B 持有的资源,进程 B 又等待进程 A 持有的资源。
2025-02-12 10:52:02
356
原创 嵌入式八股文(一)C语言概念
定义不仅告知编译器变量的类型和名字,还会分配内存空间。声明只是告诉编译器变量的名字和类型,但并不为它分配内存空间。使用extern来修饰。告诉编译器这个变量的定义在其他地方,这里使用此变量。函数定义提供了函数的具体实现,它包括了函数的返回类型、函数名、参数类型以及函数体的内容。函数声明告知编译器函数的返回类型、函数名及其参数类型,但并不提供函数的具体实现。
2025-02-03 14:20:28
1329
2
原创 Linux内核编程(二十一)USB驱动开发-键盘驱动
USB 驱动开发主要分为两种:主机侧的驱动程序和设备侧的驱动程序。主机侧驱动程序用于控制插入到主机中的 USB 设备,而设备侧驱动程序则负责控制 USB 设备如何与主机通信。由于设备侧驱动程序通常与设备功能紧密相关,因此常常被称为 USB gadget 驱动程序。USB gadget 驱动程序的作用是定义如何通过 USB 协议栈与主机端进行通信,确保设备能够正确响应主机的请求。在 USB 系统中,主机侧和设备侧有各自不同的控制器。
2025-01-20 17:17:30
1438
原创 Linux应用编程(五)USB应用开发-libusb库
USB接口(UniversalSerialBus)是一种通用串行总线,广泛使用的接口标准,主要用于连接计算机与外围设备(如键盘、鼠标、打印机、存储设备等)之间的数据传输和电力供应。它旨在简化计算机与外部设备之间的连接方式,同时提供更高的传输速度和更好的兼容性。这些接口虽然在当时各自具有一定的专用性和高效性,但也存在很多问题,随着技术的发展,通用性更强的接口逐渐成为主流,USB(UniversalSerialBus)便是这一发展潮流的代表。USB的诞生标志着计算机外围设备连接方式的革命性转变。
2025-01-18 09:44:18
1771
原创 嵌入式SD/TF卡通用协议-SDIO协议
为了驱动SD卡,首先的第一步就是观察SD卡引脚接线情况,通常我们在画原理图时,都是使用的SD卡卡槽与MCU进行接线。SD卡可以使用SDIO协议和SPI协议进行通信,这里我们主要介绍SDIO协议。下图中的TF卡只是容量小一点的SD卡。以F1C100S为例,接线图如下所示:我们发现上图中的TF卡使用的协议为SDIO协议,主要有4根数据线,1根命令线,1根时钟线组合而成。为了驱动这个SD/TF卡我们就需要去了解SDIO协议的时序。
2025-01-08 10:01:50
1005
2
原创 FPGA(二)组成结构基础内容
FPGA主要由以下部分组成:(1)可编程逻辑单元(CLB):CLB是FPGA中最基本的逻辑单元,由查找表(LUT)和触发器组成,可实现任意逻辑功能。查找表本质上是一个RAM,用于存储逻辑电路的所有可能结果,并根据输入直接查找并输出结果。(2)输入输出块(IOB):IOB用于连接FPGA芯片和外部电路,负责FPGA数据信号的收录和传输。为了便于管理和适应多种电器标准,FPGA的IOB被划分为若干个组(Bank),每个Bank的接口标准由其接口电压VCCO决定。
2025-01-02 13:58:41
482
原创 FPGA(一)verilog语句基础
是一种硬件描述语言(HDL),常用于数字电路的设计、模拟和验证,特别是用于和的设计。Verilog 让设计者能够描述和模拟硬件系统的行为和结构,最终将其转化为硬件电路。
2024-12-23 14:44:20
1107
原创 嵌入式GUI图形界面编程一LVGL基础
GUI,全称为图形用户界面(Graphical User Interface),是一种允许用户通过图形元素与计算机软件进行交互的界面。与传统的命令行界面(CLI)不同,GUI使用图标、按钮、窗口和菜单等视觉元素,使用户能够更加直观和便捷地操作程序。GUI库:图形用户界面库,只要调用GUI库的函数即可快速绘制出所需要的用户界面。嵌入式中常用的GUI库:emWin、LVGL、TouchGFX、QT等。本节课我们主要讲解LVGL库的使用。
2024-12-08 15:42:26
1531
1
原创 STM32一keil5更换芯片后报错问题的解决。
低容量:16KB 、32KB ,选择 startup_stm32f10x_ld.s 或 startup_stm32f10x_ld_vl.s。中容量 :64KB、128KB ,选择 startup_stm32f10x_md.s 或 startup_stm32f10x_md_vl.s。高容量: 256KB及以上 , 选择 startup_stm32f10x_hd.s 或 startup_stm32f10x_hd_vl.s。删除原来的启动文件,将我们选择的启动文件添加到工程中。这样我们就顺利编译通过啦!
2024-12-07 20:23:59
721
1
原创 RT-Thread软件环境配置/开发软件基础(包含全志SOC下载)
对于从SDK Manager下载的交叉编译器路径:找到安装的RT-Thread软件的路径,找到repo文件夹,一直进入到其子目录中:例如。我们安装的交叉编译器版本文件夹如下所示,进入所选的版本文件夹的。目录下就是编译器的可执行文件。
2024-12-02 16:39:10
369
原创 Linux内核编程(二十)RTC子系统一驱动rx8010
RTC,即实时时钟(Real-Time Clock),是一种用于保持精确时间的电子时钟模块。它能够提供当前的秒、分、时、日、月和年信息,并且通常具有独立的电池供电功能。这意味着即使设备断电,RTC模块也可以继续记录时间,确保系统在重新启动时获得正确的时间数据。RTC模块广泛应用于电子时钟、计算机、移动设备、家用电器等场景。例如,在计算机系统中,RTC能够保证系统时间在断电状态下不会丢失;在电子门禁和安防系统中,RTC可实现基于时间的事件控制和记录。这种可靠性使得RTC在生活和工业中均成为不可或缺的组件。
2024-11-11 11:24:37
1303
1
原创 基于Zynq FPGA对雷龙SD NAND的测试
进入测试程序前,首先会对SD卡初始化并初始化建立FATFS文件系统,随后进入测试SD卡测试程序,在测试程序中,会写入一定大小的文件,然后对写入文件的时间进行测量,得到写入时间;本来打算拿这些样片去试试信息安全领域是否有所应用,但发现其似乎内置了复位或初始化,导致无法提取上电时的不确定值,故无法提取该SD NAND的物理不可克隆特性,所以这方面的测试无法进行;本次测试主要针对4G和32G两个不同容量的SD卡,在Zynq FPGA上搭建SD卡读写回路,从而对SD卡读写速度进行测试,并检验读写一致性;
2024-11-07 09:00:57
1152
1
原创 Linux内核编程(十九)SPI子系统一驱动MCP2515(SPI转CAN模块)
mcp2515读寄存器的值,我们查看其手册发现,要想读寄存器的值需要先写入0x03命令,然后发送要读取寄存器的地址,再进行读取值。本框图中spi核心层和spi适配器驱动层不需要我们去关心,如果未来要去原厂工作的话,可以深入了解其工作原理和内容,这里我们不做过多介绍。通常,SPI 设备的片选和时钟频率都需要在设备树中进行配置,以便正确地初始化 SPI 设备。失败时:返回负的错误代码,通常为 -EINVAL(无效参数)或 -EIO(输入/输出错误)等。成功时:返回接收的字节数(通常是 len)。
2024-11-05 16:19:10
1505
原创 Linux内核编程(十八)ADC应用与驱动(IIO子系统)
例如rk3588开发板的adc电压测量范围为0~1.8v(参考电压或量程),为10位精度。那么根据公式可得,ADC的分辨率=1.8 / 2^10,再用这个分辨率×这个数值(1003)就得到了测量电压。这里不做基础知识的讲解。SARADC为逐次逼近型的ADC转换器,后续会多次看到这个。具体ADC知识点请查看。
2024-11-03 16:33:56
859
原创 “Flash闪存”基础 及 “SD NAND Flash”产品的测试
第二种闪存称为NAND闪存。NAND 闪存的存储单元采用串行结构,存储单元的读写是以页和块为单位来进行(一页包含若干字节,若干页则组成储存块, NAND 的存储块大小为 8 到 32KB ),这种结构最大的优点在于容量可以做得很大,超过 512MB 容量的 NAND 产品相当普遍, NAND 闪存的成本较低,有利于大规模普及。FLASH闪存可以执行的写操作次数有限,这意味着FLASH闪存厂商需要开发复杂的控制器技术,对写入FLASH闪存模块的方式进行管理,确保每个FLASH闪存单元接收相同的写请求。
2024-10-10 15:35:07
1607
1
原创 Linux必学知识点:单独编译、烧写构建某个镜像,打包Linux系统镜像
使用相同的Uboot和Kernel,加上不同的文件系统,构成不同的系统。
2024-09-26 11:50:42
1700
原创 Linux必学知识点:文件系统的构建
文件系统是用于组织、存储和管理计算机文件的结构和方法。它定义了文件如何在存储设备上布局,以及如何访问和操作这些文件。常见的文件系统类型包括NTFS、FAT32、ext4等,每种文件系统都有其特点和用途。
2024-09-24 11:58:02
1545
1
原创 Linux内核编程(十六)CAN总线驱动
CAN (Controller Area Network) 是博世公司于 1986 年开发的一种串行通信协议,主要应用于汽车领域。CAN 协议的诞生是为了减少汽车中线束的数量,使得汽车中的电子控制单元(ECU)能够互相通信。ECU 是汽车中的最小控制模块,通过 CAN 总线,各个 ECU 模块可以在同一个局域网内实现高效的数据传输和通信。CAN 总线就像是汽车电子的“局域网”,让不同模块之间能够无缝协作。
2024-09-16 10:42:26
2322
原创 NAND NOR FLASH闪存产品概述
芯片类产品有SD NAND,eMMC, SPI NAND. 他们共同特点是内部都带了针对NAND Flash的管理机制。随着国内对集成电路,特别是存储芯片的重视,前来咨询我们关于NOR Flash,NAND Flash,SD NAND, eMMC, Raw NAND的客户越来越多了。2,NAND Flash出厂时会有坏块(不用惊讶,原厂出厂的时候都会标识出来,而且比例是很低),在使用当中也可能产生坏块。NAND Flash产品本身存在一定的特性,要正常使用,必须配备对应的管理机制。目前主要有2D和3D。
2024-09-13 09:28:57
956
原创 Linux内核编程(十五)网络设备驱动
6 类线是一种用于千兆以太网(1000Mbps)的传输介质,采用了 250MHz的带宽,具有更高的传输速度和更低的信号衰减率。与之前的线缆相比,6类线在内部结构、材质和外部保护等方面都有所改进,以确保更高的传输质量和稳定性。超5类线是5类线的增强版,主要用于千兆以太网(1000Mbps),同时向下兼容百兆以太网。3 类线是早期的以太网电缆标准之一,主要用于传输 10Mbps的传统以太网。虽然它比3类线有所提升,但在实际应用中,由于性价比不高,4类线并未得到广泛应用,很快就被更先进的5类线所取代。
2024-09-05 17:03:33
1845
原创 Linux内核编程(十四)IIC总线驱动FT5X06触摸屏
答:首先我们确定使用哪个I2C控制器,每个控制器都在设备树通用文件中对应一个节点(内核以有)。假设我们使用i2c控制器1。这部分相当于平台总线的设备层代码,即用于描述硬件。当然可以使用设备树来替代。那么我们在使用设备树描述时该怎么写呢?对于IIC的基础知识,这里不做过多的介绍,详细情况查看下面的两篇文章。这里是一个简单示例,为了演示如何匹配。i2c_client设备树节点。
2024-08-30 16:02:02
693
原创 基于FPGA的SD卡的数据读写实现(SD NAND FLASH)
①概述SD卡的英文全称是Secure Digital Card,即安全数字卡(又叫安全数码卡),是在MMC 卡(Multimedia Card,多媒体卡)的基础上发展而来,主要增加了两个特色:更高的安全性和更快的读写速度。SD NAND,贴片式TF卡,贴片式SD卡,北京君正,nor flash,存储,芯片,主控,小尺寸emmc,大容量SLC Nand,语音芯片,语音识别,语音控制,语音模块,离线语音②容量标准和速度等级。
2024-08-26 17:08:23
1247
1
原创 Linux内核编程(补)字符设备驱动编写(字符设备框架)
我们在编写字符设备时,使用杂项设备框架会比使用字符设备框架编写更为简便。但是由于使用杂项设备框架会使得注册的设备变为杂项设备,虽然功能都一样,但是分类会不同。如果分类严格,则我们需要使用字符设备驱动框架来编写,这样注册的设备就被分到了字符设备列表中。如果你正在开发的设备需要明确地归类到字符设备中(例如在 /sys/class/char 中),或者你需要对设备号进行特殊的管理,那么使用字符设备框架是更合适的选择。优化:因为我们用到了设备号以及字符设备结构体等变量,我们可以将这些变量进行封装,方便操作管理。
2024-08-23 10:59:10
802
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人