Hero Image
在无显示屏状态下登录树莓派

查找树莓派IP地址 当树莓派没有连接到显示屏时,需要借助第三方工具查找树莓派IP地址。 Advanced IP Scanner 下载地址:https://www.advanced-ip-scanner.com/ 备用下载地址:https://pan.baidu.com/s/1Gn4WzB7eWj082HQvlFAz_Q?pwd=y29q 下载后启动软件,在树莓派关机和开机状态下各扫描一次,看哪个设备为新增的设备,则该IP地址大概率是树莓派IP地址。 登录树莓派 ssh rpi@树莓派的IP地址 修改静态IP地址 编辑网络配置文件 sudo nano /etc/dhcpcd.conf 在文件末尾添加以下配置 # 配置静态IP地址 interface eth0 # 有线网络接口 static ip_address=192.168.1.100/24 # 设置静态IP地址和子网掩码 static routers=192.168.1.1 # 设置网关地址 static domain_name_servers=8.8.8.8 8.8.4.4 # 设置DNS服务器 # 如果使用WiFi,则配置wlan0接口 interface wlan0 # WiFi网络接口 static ip_address=192.168.1.101/24 static routers=192.168.1.1 static domain_name_servers=8.8.8.8 8.8.4.4 保存并退出 按 Ctrl + X 按 Y 确认保存 按 Enter 确认文件名 重启网络服务 sudo systemctl restart dhcpcd Ping 在笔记本电脑上通过Ping指令验证是否修改成功,需要提前确认该网络下没有IP地址冲突。 开启 VNC 方法一:通过raspi-config配置(推荐) 进入配置界面 sudo raspi-config 启用VNC服务 选择 Interface Options 选择 VNC 选择 Yes 启用VNC 选择 Finish 退出 设置VNC分辨率 再次进入 raspi-config 选择 Display Options 选择 VNC Resolution 选择合适的分辨率(如1920x1080或1280x720) 连接VNC客户端 Windows用户: 下载VNC Viewer

Hero Image
YOLOV8训练结果解析

YOLOV8 训练结果分析 概念理解 box_loss 优化边界框的位置和大小 Box Loss为边界框损失,是目标检测中用于衡量预测边界框与真实边界框之间差异的损失函数,用来衡量模型预测的边界框位置和大小的准确性,通常使用以下损失函数。值越小越好,接近0表示完美的边界框预测。 # IoU Loss交并比损失: IoU = intersection_area / union_area IoU_loss = 1 - IoU # CIoU Loss完整IoU损失,考虑了预测与实际的中心点距离、以及长宽比等,YOLOV8默认采用CIoU完整IoU损失。 CIoU_loss = IoU_loss + distance_loss + aspect_ratio_loss cls_loss 优化目标类别的识别准确性 Cls Loss为分类损失,是目标检测中用于衡量模型对目标类别预测准确性的损失函数,用来衡量模型正确识别目标类别(如鸭子)的能力。通常使用交叉熵损失函数。值越小越好,接近0表示完美的分类预测。 # Cross Entropy Loss交叉熵损失: CE_loss = -∑(y_true * log(y_pred)) # Focal Loss焦点损失,用于处理类别不平衡问题: Focal_loss = -α * (1 - y_pred)^γ * y_true * log(y_pred) dfl_loss 优化边界框坐标的分布预测精度 Dfl Loss为分布焦点损失(Distribution Focal Loss),是YOLOv8中用于优化边界框回归的损失函数,通过建模边界框坐标的分布来提升回归精度。它比传统的回归损失更稳定,能更好地处理边界框预测的不确定性。值越小越好,接近0表示完美的分布预测。 # Distribution Focal Loss分布焦点损失: # 将边界框坐标建模为分布,而不是单一值 DFL_loss = -log(softmax(pred_distribution)) * target_distribution # 具体实现: # 1. 将边界框坐标离散化为多个bin # 2. 预测每个bin的概率分布 # 3. 计算预测分布与目标分布的焦点损失 precision 关注检测的准确性,避免误检

Hero Image
使用CUBEMX配置CANFD

3. 配置CANFD 3.1 波特率计算 波特率 波特率 = FDCAN时钟频率 / (NominalPrescaler × (1 + NominalTimeSeg1 + NominalTimeSeg2)) 时间量子(TQ) 时间量子也就是一个Tick的时间 时间量子 = FDCAN时钟频率 / NominalPrescaler 位时间 这里的1就是同步段NominalSyncJumpWidth,同步段一般设置为固定的1TQ; NominalTimeSeg1决定了采样点的位置,采样点在NominalTimeSeg1段的结束处; NominalTimeSeg2是采样点到位结束的距离,越大对抖动的容忍度越高。 位时间 = 1 + NominalTimeSeg1 + NominalTimeSeg2 个时间量子 采样点 采样点一般设置在75%左右。 采样点位置 = (1 + NominalTimeSeg1) / (1 + NominalTimeSeg1 + NominalTimeSeg2) 波特率设置注意事项 1. NominalPrescaler应该尽可能小,以提高采样精度,减少误差; 2. CANFD推荐仲裁域NominalPrescaler <= 数据域NominalPrescaler; 3. SJW应尽量大,尽量保持与TSEG2一致,以提高位宽容忍度; 4. 波特率大于800K,推荐采样点在75%;波特率大于500K,推荐采样点在80%;波特率小于500K,推荐采样点在87.5%; 5. 尽量保证总线上所有节点的采样点一致,CANFD的仲裁域和数据域采样点不要求一致; 6. CANFD仲裁域与数据域的波特率之比应该大于等于1/8. 3.2 配置参数 在这里我们目标是使用CANFD的加速模式,仲裁域波特率为1M,数据域波特率为2M。 Frame Format Classic mode : 标准的can模式,非CANFD,单帧数据最多8个字节。 FD mode without BitRate Switching:CANFD模式,仲裁域和数据域波特率相同,CANFD单帧数据可扩展至64个字节。 FD mode with BitRate Switching:CANFD加速模式,数据域波特率可与仲裁域波特率不同,数据域波特率大于仲裁域波特率。 Data Prescaler 这里是数据域的波特率设置,在CANFD加速模式下有效。

Hero Image
使用CUBEMX配置单片机时钟

STM32开发记录 1. 配置时钟 开发流程是先使用STM32CubeMX软件生成项目框架,然后再使用Keil进行软件开发。 1. STM32CubeMX 1.1 配置Debug信息 在Pinout&Configuration下点击 Trace and Debug->DEBUG 选择Serial Wire。 Serial Wire Debug (SWD) 是ARM Cortex-M系列微控制器的一种调试接口,它是JTAG接口的简化版本。 1.2 配置系统时钟 控制板采用的是24MHZ无源晶振,在Pinout&Configuration选择RCC->HSE选择Crystal/Ceramic Resonator。其中HSE为外部时钟,LSE 为内部时钟,使用外部时钟能比内部时钟更加稳定高效。Crystal/Ceramic Resonator为无源晶振;BYPASS Clock Source为有源晶振。 切换到Clock Configuration修改Input frequency的频率为24,其他参数按照下图修改。 1.2.1 总线时钟 总线时钟是整个系统中非常重要的一个时钟信号,为许多核心外设和总线提供了时钟源。和单片机的功耗有直接关系。 AHB总线时钟在CUBEMX中的位置如下图红色框出部分所示。 1.2.2 功耗 芯片的功耗和设置的总线时钟源相关,具体可以参考对应芯片的数据手册,在手册中搜索Supply current characteristics,查看对应的表格。 有上表可见,系统的功耗和芯片所处的VOS(稳压器电压调试等级)相关,默认VOS0可以提供全功率,调节VOS等级可以使得功耗得到优化。在cubemx中设置好时钟源之后,可以在Pinout & Configuration -> System Core -> RCC 下设置对应的VOS等级。如下图所示。 1.3 配置代码生成 点击右上角 GENERATE CODE 生成 KEIL项目代码。

Hero Image
搭建数据库

Docker-Mysql 1. 新建数据库 sudo docker pull mysql 2. 启动数据库 --name your-mysql-container:指定容器的名称。 -e MYSQL_ROOT_PASSWORD=yourpassword:设置 MySQL 的根用户密码(替换为你想要的密码)。 -p 3306:3306:将主机的 3306 端口映射到容器的 3306 端口。 -d:以分离模式运行容器。 sudo docker run --name mysql -e MYSQL_ROOT_PASSWORD=数据库密码 -p 3306:3306 -d mysql 3. 备份数据库 mysqldump -u your_username -p your_database_name > database_backup.sql 4. 注意事项 安装Mysql后设置lower_case_table_names属性报错 在MySQL8.0版本中,必须在初始化MySQL服务器之前将lower_case_table_names设置为所需要的值,这需要在首次启动MySQL服务器之前在MySQL配置文件中设置lower_case_table_names。但是在使用ubuntu的apt源安装MySQL时,系统会自动配置并启动MySQL服务器,这就需要在安装前提前设置好配置文件。具体操作步骤如下: <!--设置 Mysql 初始化环境--> sudo mkdir/etc/mysql/mysql.conf.d sudo vim mysqld.cnf <!--编辑mysqld.cnf文件--> [mysqld] # 0[Linux默认]:区分大小写; # 1[Windows默认]:不区分大小写; # 2[Mac默认]:存储时区分大小写,比较时不区分大小写。 lower_case_table_names=1 innodb_log_file_size = 512M innodb_strict_mode = 0 sql_mode = "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" <!--安装Mysql,在安装过程中会提示存在配置文件,此时选择‘N’选项采用已经存在的配置文件--> sudo apt install mysql-server <!--Mysql配置,可根据需求设定--> sudo mysql_secure_installation <!--设置root账号密码,第一次设置时默认无密码,直接进入mysql--> sudo mysql -u root <!--登录后设置root密码--> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mysql密码'; <!--刷新设置--> FLUSH PRIVILEGES; <!--重启Mysql服务--> sudo systemctl restart mysql <!--使用密码登录root账号--> sudo mysql -u root -p <!--输入密码--> <!--进入Mysql环境--> 设置用户可以远程登录MySQL <!--使用密码登录root账号--> sudo mysql -u root -p <!--输入密码--> <!--进入Mysql环境--> <!--设置root用户可远程访问--> UPDATE mysql.user SET Host='%' WHERE User='root' AND Host='localhost'; <!--刷新权限--> FLUSH PRIVILEGES; <!--查看权限--> SELECT Host, User FROM mysql.user; ubuntu18.04 安装mysql8.0报错 错误:1 http://repo.mysql.com/apt/ubuntu bionic InRelease 由于没有公钥,无法验证下列签名: NO_PUBKEY B7B3B788A8D3785C 解决办法: 切换为交大源。 sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys B7B3B788A8D3785C ERROR 1819 (HY000): Your password does not satisfy the current policy requirements SHOW VARIABLES LIKE 'validate_password%'; SET GLOBAL validate_password.policy = LOW; -- 选择 LOW, MEDIUM 或 STRONG SET GLOBAL validate_password.length = 6; -- 设置最小长度 ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourNewStrongPassword123!'; 忘记密码 停止mysql服务 sudo systemctl stop mysql 启动 MySQL 的安全模式 sudo mysqld_safe --skip-grant-tables & 使用 root 登录 MySQL mysql -u root 修改密码 USE mysql; ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码'; FLUSH PRIVILEGES; 退出并重启mysql服务 sudo systemctl start mysql