当前位置: 首页 > news >正文

实例教程:BBDB为AHRS算法开发提供完善的支撑环境(上)

1. 概述

本教程将结合程序代码及CSS控制站工程,讲述如何基于PH47代码框架的BBDB固件版本,为开发自己的AHRS姿态解算算法提供完善支撑环境,以及数据分析手段。

BBDB固件已内置了一套姿态解算算法。对于需要进行AHRS算法开发研究的开发者,可在BBDB已有AHRS算法基础上另行增加自己的算法进行性能比对,或使用自己的算法模块替换预置AHRS解算模块。

本节教程就在PH47代码框架的应用层实现AHRS算法开发环境,以及如何使用CSS控制站工程显示、分析、记录相关算法数据进行讲述。关于在算法层实现对AHRS算法的支撑,以及如何使用自己的AHRS算法替换BBDB预置的算法模块,将在下节教程讲述。

2. BBDB基础上为算法实现提供支撑方式一:应用层实现

2.1. 代码初始化与解算代码的实现位置

通常我们的算法都以模块化方式实现,既方便程序设计,又利于将来代码复用。算法模块能够以一个或多个C++函数的方式进行组织,也能够通过封装为C++类的方式进行实现。

基于PH47代码框架BBDB固件版本,用户的AHRS算法模块既可以简便的在的应用层(Application)实现;又可以进行更好的封装后在算法层(Algorithms)中实现。本节就首先对在应用层的实现方式进行讲解。

此方式下,用户的AHRS代码可在BBDB的应用层实现类CAppBBDB(\DevStudio\Application\App_BBDB.cpp/.h)中实现或调用。具体如下:

函数名称

AHRS代码实现

CAppBBDB.

Init()

PH47框架初始化函数。

用于AHRS算法初始化功能实现。本函数在PH47代码框架初始化过程调用,可安全使用PH47的各项调试或其他功能函数。

注意:

在本函数调用之前快速线程函数如FastThread_1000Hz(),

NormalThread_250Hz() 已经开始运行,所以位于上述函数中的代码应对初始化完成情况进行判断(借助标志变量core.blSysInitCompleted或全局状态变量S_INIT_COMPLETE

CAppBBDB.

FastThread_1000Hz()

PH47框架快速线程函数。

可用于AHRS解算代码的具体实现。根据控制板mcu不同型号,调用频率在400-500hz间波动。可通过相关函数获取两次调用间的时间间隔(后面详述)。

注意

AHRS解算时间必须小于函数调用周期(2-2.5ms),事实上,由于在该线程中还有框架自身的函数运行,故实际解算时间要更短。

关于本线程全部的运行耗时,可通过在调试串口输入”freemem;”命令进行查询。

CAppBBDB.

NormalThread_250Hz()

PH47框架普通线程函数。

可用于AHRS解算代码的具体实现。调用频率固定为250hz。

关于对AHRS运行时间的要求与FastThread_1000Hz()函数相同。

2.2. AHRS相关的输入数据

AHRS算法部分以模块化方式实现,那么模块的输入输出数据交换就是必要的一个环节。PH47代码框架以数据总线、全局状态变量、机载控制参数3种不同的形式将相关的数据提供给各功能模块使用。

除了框架提供的数据之外,用户还可以根据自己的需要,向数据总线、全局状态变量、机载控制参数中加入自己定制的数据。

与AHRS解算模块的相关输入数据如下(如无特殊说明,数据单位均为国际标准单位,以下均同):

IMU相关数据

数据类型

数据说明

IMU.GyrRaw

Vector3f

陀螺原始角速度(x,y.z三轴,下同)

IMU.GyrFilted

Vector3f

陀螺滤波后角速度

IMU.AccRaw

Vector3f

加速度计原始加速度

IMU.AccFilted

Vector3f

加速度计滤波后加速度

IMU.MagRaw

Vector3f

磁强计原始磁强(无单位)

IMU.MagAvg

Vector3f

磁强计平均磁强(无单位)

IMU.Temp

IMU_TEMPERATURE

IMU温度数据(Gyro温度x3,A储存温度x1)

GPS相关数据

数据类型

数据说明

sGps.fix_type

uint8_t_

gps锁定类型(无单位)

sGps.sat_num

uint8_t_

卫星数量(无单位)

sGps.loc  

Location

当前定位数据,

Location.lng,Location.lat单位为1e-7degree,

Location.alt单位为mm

sGps.vel

Vector3f

当前gps 3维速度矢量

sGps.eph

float

垂直定位精度

sGps.epv

float

水平定位精度

sGps.groundspeed

float

地速

sGps.speed_acc

float

速度精度

sGps.p_dop

float

位置定位精度

sGps.cog

float

gps航迹角

sGps.time_ms

uint32_t

sGps.

locked_time_ms

uint32_t

sGps.locked_dt

float

全局状态变量

数据说明

S_IMU_ENABLE

IMU初始化工作完成标志,true表示初始化成功

S_MAG_ENBALE

磁强计初始化标志,true表示初始化完成

S_COMPASS_BE_USED

磁强计数据有效标志

true表示根据磁强数据计算的航向角误差在允许范围内

2.3. AHRS解算后输出数据

经AHRS解算后的数据同样可以返回到数据总线、全局状态变量、机载控制参数当中。框架中与AHRS输出相关的预置数据如下:

AHRS输出数据

数据类型

数据说明

AngleRate

Vector3f

机体平台三轴转动角速率

AccelBody

Vector3f

机体坐标系三轴加速度

AccelNed

Vector3f

North-East-Down坐标系三轴加速度

sAhrs.Roll

float

机体滚转角

sAhrs.Pitch

float

机体俯仰角

sAhrs.Yaw

float

机体航向角

sAhrs.SinRoll

float

滚转角正弦值

sAhrs.SinPitch

float

俯仰角正弦值

sAhrs.SinYaw

float

航向角正弦值

sAhrs.CosRoll

float

滚转角余弦值

sAhrs.CosPitch

float

俯仰角余弦值

sAhrs.CosYaw

float

航向角余弦值

sAhrs.dcm

float

方向余弦矩阵

2.4. 解算频率,及对数据时间间隔的使用

AHRS解算循环当中的时间间隔数据对算法实现非常重要,如前文所述,CAppBBDB.FastThread_1000Hz()函数运行频率是一个在1000-1500hz之间波动的一个数值(波动范围根据控制板MCU不同而不同),但实际上,在基于PH47框架的程序开发中:

强烈不推荐使用循环函数的设计运行频率来计算循环时间间隔。

建议使用实际测量的循环时间间隔,或者使用总线数据设置时间间隔来作为算法设计所需要的时间间隔。框架提供了一个简单的类CLoopDt用于循环时间间隔的测量,示例代码如下:

// Step1:在.h文件中定义CloopDt类对象 _QuatDt
CloopDt _QuatDt;        
// Step2 在.cpp文件的循环代码中获取当前时刻距离上一次调用本函数时刻的
// 时间差,以ms为单位,精确到小数点后三位
// 如果过获取的dt为0,则返回 false
if( _QuatDt.GetLocalDt_ms(_fDt_Sec) )_fDt_Sec /= 1000.0f;               // 将获取时间间隔从ms转换为sec

通过上述代码即可精确的获取循环运行时间间隔。通过此方式获取的时间间隔,一般称为本地时间间隔。与之相对应的是原始时间间隔。

原始时间间隔是指通过总线数据的时间戳计算获取的时间间隔,因为该时间戳是总线数据被设置时刻记录的时间(精确到us),故总线数据两次被设置之间的间隔就称为原始时间间隔。通过简单函数调用就可获得总线数据的原始时间间隔:

// 获取陀螺仪原始角速度的设置时间间隔
float fRawGyrDt_ms = bus.sImu.GyrRaw.GetDt2Prev_us()/1000.0f;  

在AHRS算法实现过程中,应当仔细和小心的确定在什么时候使用本地时间间隔,在什么时候该使用原始时间间隔。

2.5. 应用层代码框架示例

若我们在应用层进行AHRS算法模块的开发,那么该模块的初始化函数为InitMyAHRS(),在CAppBBDB.Init() 函数中被调用。

姿态解算函数为UpdateMyAHRS(),在CAppBBDB.FastThread_1000Hz(),或是在CAppBBDB.NormalThread_250Hz()函数中被调用。

在App_BBDB.h文件中对函数进行声明。当然,AHRS解算必须的一些成员变量也可以在.h文件中进行声明。

// AHRS 应用层框架代码
void InitMyAHRS();
bool UpdateMyAHRS();// AHRS解算所需的成员变量声明…
// ...

在App_BBDB.cpp文件中实现函数InitMyAHRS()UpdateMyAHRS()

通过上述代码框架框架实现,用户即可在上述框架中实现自己的姿态解算算法,并将于姿态相关的各种数据,通过如下数据帧下行发送至CSS进行显示、记录、回放,以及后续数据分析使用:

数据帧

(mavlink message)

id

(msg id)

包含字段

(Field of mavlink message)

GPS_RAW_INT

0x18

lat, Lon, alt

eph, epv, vel, cog, fix_type, satellites_visi

RAW_IMU

0x1b

xacc, yacc, zacc,

xgyro, ygyro, zgyro,

xmag, ymag, zmag

ATTITUDE

0x1e

roll, pitch, yaw,

rollspeed, pitchspeed, yawspeed

PILOT_DBG_1

0xf7

fvalue_0 – fvalue_9

PILOT_DBG_2

0xf8

fvalue_0 – fvalue_9

备注:

  1. 以上数据帧仅为BBDB固件默认的下行数据,若需要增加新的下行数据,可使用通用数据帧USER_DEF_DATA(0x7a)COMMAND_LONG(0x4c)进行下行传输
  2. 上述数据帧当中所包含的字段定义,可参见CSS帧编辑器。
void CAppBBDB::InitMyAHRS()
{/******************************************************AHRS 算法初始化函数本函数在系统初始化过程中调用函数调用顺序: CThreadCtrl_BBDB.InitAfterThreadStart() ==> CAppBBDB.Init()==> CAppBBDB.InitMyAHRS()******************************************************//*******************************************************	AHRS 初始化过程实现 ...******************************************************/
}bool CAppBBDB::UpdateMyAHRS()
{/******************************************************AHRS 算法实现函数本函数在 CAppBBDB.FastThread_1000Hz() 或 CAppBBDB.NormalThread_250Hz() 函数中被调用******************************************************/// 若系统初始化(即包含了 InitMyAHRS() 初始化)还未完成,则暂不进行 AHRS 解算过程if(core.blSysInitCompleted == false)return false;// 获取陀螺仪原始角速度的设置时间间隔// imu 当中的 AccRaw, GyrRaw 数据在 CThreadCtrl_BBDB.IdleLoop() 函数中被近乎同时的进行设置(< 1us)// 故可用 AccRaw, GyrRaw 当中的任一原始时间间隔作为这两个数据被设置的时间间隔 float fDt_ms_RawGyr = bus.sImu.GyrRaw.GetDt2Prev_us() / 1000.0f;Vector3f vGyrRaw = bus.sImu.GyrRaw.Get();	// 获取陀螺仪原始角速度Vector3f vAccRaw = bus.sImu.AccRaw.Get();	// 获取加速度计原始数据Vector3f vMagAvg = bus.sImu.MagAvg.Get();	// 获取磁强计测量的平均磁强float fCog = bus.sGps.cog.Get();			// 获取GPS计算的飞行航迹角// 其他 AHRS 解算所需数据 ...bool blImuInit = gGetStatus(S_IMU_ENABLE);	// 获取 imu 初始化完成标志// 其他全局状态变量获取 ...float fGyrLPF = core.para.Get(P_SENSOR_GYR_LPF_Hz);		// 获取陀螺仪低通滤波器截止频率// 其他机载控制参数获取 .../******************************************************* ...* AHRS 解算过程实现 ...* ...******************************************************//******************************************************* AHRS 输出数据设置 ...bus.sAhrs.dcm.Set(_dcm);bus.sAhrs.Roll.Set(_euler.x);...******************************************************//******************************************************* 如有必要, 对调试数据赋值 ...bus.arDbg_1[0].Set(_fDbg_x);bus.arDbg_1[6].Set(_fDbg_y);bus.arDbg_2[1].Set(_fDbg_z);******************************************************//******************************************************* 如有必要, 根据 AHRS 解算结果设置全局变量 ...gSetStatus(S_MY_STATUS);******************************************************/return true;
}

3. 使用CSS的BBDB控制站工程提进行观测分析

在BBDB固件的支持下,AHRS算法设计中的相关数据通过前述预设数据帧下行发送到地面控制站(CSS),并通过对应的控制站工程CssDemo_BBDB进行解析、显示、记录,以及后续的分析。关于CSS的使用方法,可参见《Control Station Studio控制站开发平台概述》。以下仅简单讲述:

3.1. 接收并记录BBP控制板下行数据

选择“自动记录”模式后点击“GCS启动”启动CSS,开始接收、解析、显示、记录来自于BBP控制板的下行数据。

3.2. 使用仪表控件对AHRS数据进行显示

控制站工程CssDemo_BBDB能够以数字、姿态显示仪表、波形图等多种方式显示与AHRS相关的各种数据。若现有控件不足以满足数据观测需求,可对已有控件的显示属性进行修改,或增加新的控件(如增加新的波形图控件叠加显示多路数据)。

3.3. 对AHRS数据进行初步分析

将CSS切换到“数据分析”页面,打开先前的数据记录文件,选择一个或多个需要进行分析的数据(数据帧中字段)绘制数据曲线供分析使用。在分析过程中,可通过设定曲线的原点、缩放比例等方式进行辅助。

3.4. 导出记录数供进一步分析

切换“数据分析”页面,点击“导出txt”按钮,打开对应的数据记录文件,选择需要包含导出数据的数据帧,选择确定后即可将控制板记录数据导出为txt格式供进一步分析使用。


更多内容见CSDN博客专栏:无人机飞控icon-default.png?t=O83Ahttps://blog.csdn.net/ss15/category_9690939.html?spm=1001.2014.3001.5482相关资源:PH47: PH47运动控制代码框架.icon-default.png?t=O83Ahttps://gitee.com/ss15/ph47

相关文章:

实例教程:BBDB为AHRS算法开发提供完善的支撑环境(上)

1. 概述 本教程将结合程序代码及CSS控制站工程&#xff0c;讲述如何基于PH47代码框架的BBDB固件版本&#xff0c;为开发自己的AHRS姿态解算算法提供完善支撑环境&#xff0c;以及数据分析手段。 BBDB固件已内置了一套姿态解算算法。对于需要进行AHRS算法开发研究的开发者&…...

k8s搭建1.23版本

文章目录 1、前期准备1、关闭防火墙和selinux2、关闭交换分区3、修改主机名和免密登录4、内核参数5、安装docker6、安装k8s源 2、安装1、安装k8s软件包2、初始化k8s3、安装calico网络插件4、检查 1、前期准备 以下操作所有主机都要运行的 1、关闭防火墙和selinux systemctl …...

【MYSQL】分库分表

一、什么是分库分表 分库分表就是指在一个数据库在存储数据过大&#xff0c;或者一个表存储数据过多的情况下&#xff0c;为了提高数据存储的可持续性&#xff0c;查询数据的性能而进行的将单一库或者表分成多个库&#xff0c;表使用。 二、为什么要分库分表 分库分表其实是两…...

CSS基础知识05(弹性盒子、布局详解,动画,3D转换,calc)

目录 0、弹性盒子、布局 0.1.弹性盒子的基本概念 0.2.弹性盒子的主轴和交叉轴 0.3.弹性盒子的属性 flex-direction row row-reverse column column-reverse flex-wrap nowrap wrap wrap-reverse flex-dirction和flex-wrap的组合简写模式 justify-content flex-s…...

常见error集合

Cannot use import statement outside a module 原因&#xff1a;在commonJS中用了es6的语法&#xff0c;import。分析&#xff1a; 一般我们的运行环境按照模块化标准来分&#xff0c;可以分为es6和commonJS两种&#xff0c;在es6中引入模块用import&#xff0c;在commonJS中…...

建筑施工特种作业人员安全生产知识试题

1.因生产安全事故受损害的从业人员&#xff0c;除依法享有工伤社会保验外。依照有关民事法律尚有获得赔偿的权利&#xff0c;有权向本单位提出&#xff08;D&#xff09;。 A.任何要求 B.保护要求 C.辞职要求 D.赔偿要求 2.为了加强建设工程安全监督管理&…...

2024140读书笔记|《作家榜名著:生如夏花·泰戈尔经典诗选》——你从世界的生命的溪流浮泛而下,终于停泊在我的心头

2024140读书笔记|《作家榜名著&#xff1a;生如夏花泰戈尔经典诗选》——你从世界的生命的溪流浮泛而下&#xff0c;终于停泊在我的心头 《作家榜名著&#xff1a;生如夏花泰戈尔经典诗选》[印]泰戈尔&#xff0c;郑振铎译&#xff0c;泰戈尔的诗有的清丽&#xff0c;有的童真&…...

JSP是如何被执行的?

JSP&#xff08;JavaServer Pages&#xff09;是一种用于构建动态Web页面的技术&#xff0c;它允许开发者在HTML、XML或其他文本格式的文档中嵌入Java代码。JSP页面在服务器端被编译成Servlet&#xff0c;然后由Servlet容器&#xff08;如Tomcat&#xff09;执行。以下是JSP页面…...

用python中的tkinter包实现进度条

python中的tkinter包是一种常见的设计程序的GUI界面用的包。本文主要介绍这里面的一个组件&#xff1a;进度条&#xff08;Progressbar&#xff09;。Tkinter Progressbar里面对进度条组件已经做了一定的介绍&#xff0c;但比较抽象。本文以另一种方式介绍这个组件及其常用用法…...

oneplus3t-lineageos-16.1编译-android9

本仓库开发已经完毕,使用请直接从4.2开始 ** LineageOS16_oneplus3t仓库群克隆 、 编译 、 刷机** 编译过程若ctrlc强制终止&#xff0c;请重新从头编译 LineageOS16_oneplus3t仓库群克隆过程 LineageOS16_oneplus3t仓库群克隆过程描述: LineageOS16_oneplus3t_gitRepoLs_c…...

VSCode+ESP-IDF开发ESP32-S3-DevKitC-1(1)开发环境搭建

VSCodeESP-IDF开发ESP32-S3-DevKitC-1&#xff08;1&#xff09;开发环境搭建 1.开发环境搭建&#xff08;安装ESP-IDF&#xff09;2.开发环境搭建&#xff08;安装VS Code&#xff09;3.开发环境搭建&#xff08;VSCode中安装ESP-IDF插件及配置&#xff09; 1.开发环境搭建&am…...

LeetCode --- 143周赛

题目列表 3345. 最小可整除数位乘积 I 3346. 执行操作后元素的最高频率 I 3347. 执行操作后元素的最高频率 II 3348. 最小可整除数位乘积 II 一、最小可整除数位成绩I 由于本题的数据范围比较小&#xff0c;我们直接暴力枚举即可&#xff0c;代码如下 class Solution { p…...

[AI] 【提高认知】自动翻译技术的演变:从规则系统到深度学习的崛起

机器自动翻译 (MT) 是人工智能历史上最早的应用之一,尤其是在英语和俄语之间的翻译应用。自诞生以来,自动翻译技术从符号系统逐步演化到依赖大数据和深度学习的先进模型。本文将深入探讨机器翻译的早期方法、统计方法和现代神经网络方法的演变过程,帮助大家了解自动翻译技术…...

python机器人Agent编程——多Agent框架的底层逻辑(上)

目录 一、前言二、两个核心概念2.1 Routines&#xff08;1&#xff09;清晰的Prompt&#xff08;2&#xff09;工具调用json schema自动生成&#xff08;3&#xff09;解析模型的toolcall指令&#xff08;4&#xff09;单Agent的循环决策与输出 PS.扩展阅读ps1.六自由度机器人相…...

渑池县中药材产业党委莅临河南广宇企业管理集团有限公司参观交流

11月14日&#xff0c;渑池县人大副主任、工商联主席杨航率县中药材产业党委代表团一行13人&#xff0c;莅临河南广宇集团参观交流。河南广宇集团总经理王峰、副总经理王培等领导热情接待并陪同参观、座谈。 代表团一行首先参观了集团旗下郑州美信中医院&#xff08;庚贤堂中医药…...

学习日志011--模块,迭代器与生成器,正则表达式

一、python模块 在之前学习c语言时&#xff0c;我们学了分文件编辑&#xff0c;那么在python中是否存在类似的编写方式&#xff1f;答案是肯定的。python中同样可以实现分文件编辑。甚至还有更多的好处&#xff1a; ‌提高代码的可维护性‌&#xff1a;当代码被分成多个文件时…...

ChatGPT 搜索 vs Google 搜索

原文&#xff1a;Amanda Caswell - 2024.11.01 随着 OpenAI 推出的实时搜索功能&#xff0c;ChatGPT 正在逐步成为像 Google 这样的传统搜索引擎的竞争对手。ChatGPT 以其对话式的回答方式而闻名&#xff0c;它能够在没有广告干扰的情况下提供实时的上下文信息。 我迫不及待地…...

一文简单了解Android中的input流程

在 Android 中&#xff0c;输入事件&#xff08;例如触摸、按键&#xff09;从硬件传递到应用程序并最终由应用层消费。整个过程涉及多个系统层次&#xff0c;包括硬件层、Linux 内核、Native 层、Framework 层和应用层。我们将深入解析这一流程&#xff0c;并结合代码逐步了解…...

【MySQL】SQL语言

【MySQL】SQL语言 文章目录 【MySQL】SQL语言前言一、SQL的通用语法二、SQL的分类三、SQLDDLDMLDQLDCL 总结 前言 本篇文章将讲到SQL语言&#xff0c;包括SQL的通用语法,SQL的分类,以及SQL语言的DDL,DML,DQL,DCL。 一、SQL的通用语法 在学习具体的SQL语句之前&#xff0c;先来…...

5.4.2-1 编写Java程序在HDFS上创建文件

本次实战涉及使用Java操作Hadoop HDFS&#xff0c;包括创建文件、判断文件存在性及异常处理。通过手动添加依赖、启动HDFS服务&#xff0c;成功在HDFS上创建和检查文件。进一步探索了文件操作的最佳实践&#xff0c;如检查文件存在性以避免重复创建&#xff0c;以及处理HDFS安全…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级

在互联网的快速发展中&#xff0c;高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司&#xff0c;近期做出了一个重大技术决策&#xff1a;弃用长期使用的 Nginx&#xff0c;转而采用其内部开发…...

基于PHP的连锁酒店管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...

Java并发编程实战 Day 11:并发设计模式

【Java并发编程实战 Day 11】并发设计模式 开篇 这是"Java并发编程实战"系列的第11天&#xff0c;今天我们聚焦于并发设计模式。并发设计模式是解决多线程环境下常见问题的经典解决方案&#xff0c;它们不仅提供了优雅的设计思路&#xff0c;还能显著提升系统的性能…...

从实验室到产业:IndexTTS 在六大核心场景的落地实践

一、内容创作&#xff1a;重构数字内容生产范式 在短视频创作领域&#xff0c;IndexTTS 的语音克隆技术彻底改变了配音流程。B 站 UP 主通过 5 秒参考音频即可克隆出郭老师音色&#xff0c;生成的 “各位吴彦祖们大家好” 语音相似度达 97%&#xff0c;单条视频播放量突破百万…...

python可视化:俄乌战争时间线关键节点与深层原因

俄乌战争时间线可视化分析&#xff1a;关键节点与深层原因 俄乌战争是21世纪欧洲最具影响力的地缘政治冲突之一&#xff0c;自2022年2月爆发以来已持续超过3年。 本文将通过Python可视化工具&#xff0c;系统分析这场战争的时间线、关键节点及其背后的深层原因&#xff0c;全面…...

虚拟机网络不通的问题(这里以win10的问题为主,模式NAT)

当我们网关配置好了&#xff0c;DNS也配置好了&#xff0c;最后在虚拟机里还是无法访问百度的网址。 第一种情况&#xff1a; 我们先考虑一下&#xff0c;网关的IP是否和虚拟机编辑器里的IP一样不&#xff0c;如果不一样需要更改一下&#xff0c;因为我们访问百度需要从物理机…...

盲盒一番赏小程序:引领盲盒新潮流

在盲盒市场日益火爆的今天&#xff0c;如何才能在众多盲盒产品中脱颖而出&#xff1f;盲盒一番赏小程序给出了答案&#xff0c;它以创新的玩法和优质的服务&#xff0c;引领着盲盒新潮流。 一番赏小程序的最大特色在于其独特的赏品分级制度。赏品分为多个等级&#xff0c;从普…...