自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(74)
  • 收藏
  • 关注

原创 2025.04最新PyTorch 安装超详细教程(含多系统、多场景、避坑指南)

**PyTorch 安装超详细教程(含多系统、多场景、避坑指南)**,涵盖**CPU/GPU版本选择、环境配置、验证测试、问题解决**全流程,附命令行示例和图文说明:

2025-04-02 10:05:30 1597

原创 Anaconda Windows安装与使用的超详细指南(2025.04最新)——新手避坑细节、深度操作技巧、全流程演示

通过以上步骤,你不仅能完成安装,还能熟练管理复杂项目环境,避免 90% 的 Python 依赖问题。遇到卡住的问题,记得在 Anaconda Prompt 中输入 `conda --help` 或访问 [Conda 官方文档]

2025-04-01 15:07:27 724

原创 从静态到动态:D * 算法如何革新机器人路径规划

D*(Dynamic A*)由Anthony Stentz于1994年提出,核心目标是高效处理动态环境中的路径更新,通过反向搜索和代价增量更新机制,显著减少重新规划的计算量。

2025-03-31 09:49:59 943

原创 卡尔曼滤波:从原理到无人机定位应用实例

在众多滤波算法中,卡尔曼滤波占据着举足轻重的地位。它是最优线性滤波算法中的经典之作,犹如一颗璀璨的明珠,在工程、物理、机器人等诸多领域散发着耀眼光芒。在工程领域,卡尔曼滤波广泛应用于飞机、船舶的导航系统。通过融合陀螺仪、加速度计等多种传感器的数据,它能够实时、精准地计算出飞行器或船舶的位置、速度与姿态信息,为安全、高效的航行提供坚实保障。在物理学研究中,卡尔曼滤波助力科学家分析实验数据。例如在粒子物理实验里,探测器采集的数据充满噪声,利用卡尔曼滤波,能够精确推断粒子的运动轨迹,从而推动科学研究的深入发展。

2025-03-26 09:38:20 632

原创 离散时间LQR控制器设计

LQR通过最小化二次型性能指标,得到最优线性反馈控制器。其核心是求解黎卡提方程,得到反馈增益矩阵。当系统为无限时域且稳定时,

2025-03-24 15:29:31 690

原创 OSI 模型详解及详细知识总结

功能:负责处理物理介质上的信号传输,包括电缆、光纤、无线等。它定义了接口的电气、机械、功能和过程特性,确保比特流能够在物理介质上正确传输。示例:网线、光纤、网卡等硬件设备工作在这一层,它们将数字信号转换为适合在物理介质上传输的电信号、光信号或无线电信号。物理层:作为基础层,负责在物理介质(如电缆、光纤、无线信号)上传输原始的比特流。它规定了诸如电压、信号编码、线缆规格、接口类型等物理特性,保障比特流能在不同设备间可靠传输。数据链路层。

2025-03-24 14:23:55 846

原创 TCP/IP 协议栈深度解析

数据链路层: 添加MAC首部与FCS。传输层: 添加TCP/UDP首部。:提供端到端的数据包路由与寻址。:提供进程间通信的端到端可靠性。:提供用户级网络服务接口。TCP/IP协议栈采用。网络层: 添加IP首部。物理层: 比特流传输。

2025-03-24 10:06:21 1124

原创 TCP 三次握手与四次挥手过程

TCP 作为一种面向连接的、可靠的传输层协议,其连接管理机制对于保障数据的可靠传输至关重要。

2025-03-24 10:02:26 1189

原创 双环 PID 控制:从理论到实践的动态性能优化指南

响应速度与稳态精度的矛盾单环PID通过单一控制器平衡比例(P)、积分(I)、微分(D)参数。增大比例增益可加快响应,但易导致超调;增加积分项虽能消除稳态误差,但会降低系统响应速度。例如在电机调速系统中,单环PID难以同时满足快速启停和精准定位的需求。抗干扰能力不足单环控制对外部扰动(如负载突变、摩擦变化)的抑制能力有限。当扰动直接作用于被控对象时,PID控制器需通过误差反馈间接调整,可能导致动态过程振荡或恢复缓慢。非线性系统适应性差单环PID基于线性模型设计,对非线性特性(如死区、饱和)敏感。

2025-03-24 09:41:54 517

原创 如何把全局坐标系转到机器人本体坐标系

轴的旋转时,该矩阵可通过数学上的旋转变换,将全局坐标系下的位置关系转换到机器人本体坐标系。将全局坐标系下的位置关系转换到机器人本体坐标系。因此,当机器人本体坐标系相对全局坐标系仅存在绕。轴方向在两个坐标系中一致(若有。轴在全局坐标系中的投影;轴在全局坐标系中的投影;轴旋转,需更复杂矩阵)。

2025-03-21 10:56:57 824

原创 25. K 个一组翻转链表(C++)

int val;这里定义了链表节点的结构ListNode,每个节点包含一个整数值val和一个指向下一个节点的指针next。构造函数用于初始化节点的值,并将next指针设为nullptr。

2025-03-18 20:39:08 637 1

原创 MPC算法路径跟踪_Matlab实现

函数名输入参数path:一个二维矩阵,每一行代表路径上一个点的坐标,通常为[x, y]形式。n:一个正整数,表示插值的次数。输出参数path_new:经过n次插值操作后的新路径,同样是一个二维矩阵,行数比原路径更多,路径更加平滑。

2025-03-18 09:52:35 547

原创 约束下的精准控制:MPC(模型预测控制)基本原理与数学推导及案例分析

年提出的一种基于数值优化的算法。模型预测控制的基本实现是根据对象的约束条件和控制目标,使用成本函数来评价系统的行为,当得到优化问题的最优解后,再将这个控制策略的第一个动作应用到对象上,然后重复这个步骤。模型预测控制在对系统进行优化时,能够将处理约束的过程与优化的过程结合在一起,可以减小扰动引起的不确定性。虽然实时性是模型预测控制的一个缺点,但是随着近年来计算机性能的提高、算法结构的改进、计算工具的优化,模型预测控制的实时性得到很大的改善,已被广泛地应用于无人机、无人车及无人船的路径规划中去。

2025-03-17 15:46:20 845

原创 206. 反转链表(C++)

递归方法的核心思想是将链表分成两部分:当前节点和剩余部分,先递归地反转剩余部分,然后再将当前节点插入到反转后的剩余部分的末尾。迭代方法的核心思想是通过遍历链表,依次改变每个节点的指针方向,从而实现链表的反转。指针方向,为了避免丢失原链表中当前节点的下一个节点,需要用一个临时指针。给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。指针指向的就是反转后链表的头节点,将其返回。输入:head = [1,2,3,4,5]之后的链表,返回反转后链表的头节点。输出:[5,4,3,2,1]

2025-03-14 09:09:54 890

原创 链表的定义、节点结构、基本操作(C++)

在 C++ 中,我们通常使用结构体(struct)或类(class)来定义链表节点的结构。int val;// 存储节点的数据,这里假设为整数类型// 指向下一个节点的指针ListNode(int x) : val(x), next(nullptr) {} // 构造函数,用于初始化节点在这个定义中,val是节点存储的数据,next是指向下一个节点的指针。构造函数用于创建一个新节点,并将其数据初始化为xnext指针初始化为nullptr,表示该节点目前没有后续节点。

2025-03-13 16:15:01 456

原创 48. 旋转图像(C++)

输入:matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]]输出:[[15,13,2,5],[14,3,4,1],[12,6,8,9],[16,7,10,11]]你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[[7,4,1],[8,5,2],[9,6,3]]

2025-03-12 20:38:31 704

原创 54. 螺旋矩阵(C++)

为了实现这个目标,我们采用了一种边界控制的方法,通过定义矩阵的四个边界(左、右、上、下),并按照顺时针方向依次遍历这些边界上的元素,同时不断收缩边界,直到遍历完整个矩阵。给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]

2025-03-11 20:39:20 806

原创 解析动态窗口法:机器人避障的智能 “导航仪”

动态窗口法,全称为 Dynamic Window Approach,是一种应用于机器人路径规划与运动控制的经典算法。它聚焦于机器人当下的速度、加速度等动态参数,在速度空间内构建一个随时间实时变化的 “窗口”。这个窗口涵盖了机器人在当前时刻,基于自身运动学与动力学约束,能够安全且合理达到的速度集合。在每一个控制周期里,算法都会对动态窗口内的众多速度组合进行评估,从中筛选出最优解,以此驱动机器人运动,使其既能朝着目标点稳步前进,又能巧妙避开途中的各类障碍物。

2025-03-11 09:42:08 1630

原创 240. 搜索二维矩阵 II(C++)

算法选择从矩阵的右上角开始搜索(当然,从左下角开始搜索也是可行的,原理类似)。,由于当前列的元素是从上到下升序排列的,所以当前列中所有位于当前元素下方的元素都必然大于。,因为当前行的元素是从左到右升序排列的,所以当前行中所有位于当前元素左侧的元素都必然小于。,即第一行的最后一列元素。减 1,向左移动一列,继续进行搜索。从起始位置开始,将当前位置的元素。,说明已经找到了目标值,直接返回。加 1,向下移动一行,继续搜索。每列的所有元素从上到下升序排列。每行的元素从左到右升序排列。每列的元素从上到下升序排列。

2025-03-10 09:39:23 828

原创 88. 合并两个有序数组(C++)

注意,因为 m = 0 ,所以 nums1 中没有元素。nums1 中仅存的 0 仅仅是为了确保合并结果可以顺利存放到 nums1 中。合并结果是 [1,2,2,3,5,6] ,其中斜体加粗标注的为 nums1 中的元素。解释:需要合并 [1,2,3] 和 [2,5,6]。中,使合并后的数组同样按 非递减顺序 排列。解释:需要合并的数组是 [] 和 [1]。解释:需要合并 [1] 和 []。中的元素,将较大的元素依次放入。个元素表示应合并的元素,后。合并结果是 [1]。合并结果是 [1]。

2025-03-10 08:57:56 476

原创 A*算法路径规划_MATLAB实现

节点:在路径规划问题中,地图或空间被抽象为由一系列节点组成。每个节点代表一个特定的位置或状态,例如在二维地图中,每个节点可以是一个坐标点。开放列表(Open List):是一个存储待评估节点的列表。算法开始时,开放列表中通常只包含起点节点。随着算法的进行,新发现的未评估节点会被加入到开放列表中。开放列表中的节点是算法后续可能扩展和探索的候选节点。关闭列表(Closed List):用于存储已经评估过的节点。

2025-03-04 09:32:46 1705

原创 解决报错:未定义标识符 “M_PI“

包含了头文件,但是在使用M_PI时依旧报错说未定义。库中的 M_PI 是一个条件宏,需要。使用C++编译,已经用。

2025-01-16 20:03:28 661 1

原创 无法打开源文件eigen3/Eigen/Dense----解决办法

首先,确保你已经从 Eigen 的官方网站(http://eigen.tuxfamily.org)下载了 Eigen 库。将下载的库解压到你喜欢的位置,例如。你可以在代码中添加一段简单的测试代码,以确认 Eigen 库是否正确配置。确保你的 C++ 代码中的包含语句与你添加的路径匹配。例如,如果 Eigen 库在。点击get it下边的压缩包下载。

2025-01-16 19:51:20 708

原创 Ardusub源码剖析——GCS_Mavlink.h

代码#pragma once#include <GCS_MAVLink/GCS.h>class GCS_MAVLINK_Sub : public GCS_MAVLINK {public: using GCS_MAVLINK::GCS_MAVLINK;protected: uint32_t telem_delay() const override { return 0; }; MAV_RESULT handle_flight_

2024-12-02 20:08:52 348

原创 396.旋转函数(C++)

首先,我们需要明确什么是旋转函数。对于一个数组nums,其旋转函数F(k)定义为:其中表示取模运算,n是数组的长度。简单来说,F(k)是将数组从位置k开始旋转后,每个元素乘以其索引(从0开始)的总和。

2024-12-02 16:33:49 993

原创 Ardusub源码剖析——control_althold.cpp

如果期望的偏航速率不为零(即飞行员正在请求改变朝向),则调用姿态控制器,使用飞行员指定的横滚、俯仰和偏航速率。类将收到的四元数转换为欧拉角(Euler angles),即横滚(roll)、俯仰(pitch)和偏航(yaw)角度。如果潜水器到达了底部,初始化Z轴控制器,并将目标深度设置为当前高度加上10厘米,以保持潜水器在底部上方10厘米的位置。分别获取飞行员指定的前进和侧向通道的标准化输入值,并使用这些值来设置电机的推力方向。如果期望的偏航速率为零(即飞行员没有请求改变朝向),则尝试保持当前的朝向。

2024-12-02 15:36:42 1114

原创 Ardusub源码剖析——control_manual.cpp

这些行设置了潜水器的横滚(roll)、俯仰(pitch)和偏航(yaw)输入。输入值来自于对应的通道(channel),并且已经被标准化(normalized)处理,意味着它们是介于-1到1之间的值。如果电机未启动,函数将设置电机到地面空闲状态,将油门输出设为零,并且放松姿态控制器(为了减少静止时的抖动),然后立即退出函数。为了避免在手动控制模式下出现混乱的行为(特别是横滚和俯仰),需要将控制输入设置为中性。这意味着没有横滚、俯仰或偏航的输入,从而确保潜水器在手动控制开始时保持稳定,不会出现突然的动作。

2024-12-02 14:57:25 337

原创 Ardusub源码剖析——mode_guided.cpp

代码#include "Sub.h"/* * Init and run calls for guided flight mode */#define GUIDED_POSVEL_TIMEOUT_MS 3000 // guided mode's position-velocity controller times out after 3seconds with no new updates#define GUIDED_ATTITUDE_TIMEOUT_MS 1000 //

2024-12-02 11:00:40 1234

原创 四元数Quaternion的概念以及应用领域和处理方法

四元数是由爱尔兰数学家威廉·卢云·哈密顿(William Rowan Hamilton)在1843年发明的一种超复数结构,用于扩展复数以描述三维空间中的旋转。qwxiyjzkqwxiyjzk其中www是实部,xxxyyyzzz是虚部的系数,iiijjjkkki2j2k2−1ijkji−kjkikj−ikijik−ji2j2k2−1ijkji−kjkikj。

2024-11-29 10:14:01 1692

原创 Ardusub源码剖析(1)——AP_Arming_Sub

的例子,其中添加了一些基类的方法。的 C++ 类,它继承自。此类提供了一个子类化。.h代码定义了一个名为。

2024-11-27 10:40:51 1285

原创 C++条件编译指令

条件编译对于处理不同平台或配置下的代码变化非常有用,它可以避免不必要的代码执行,并允许同一源代码在不同的环境中编译和运行。是C和C++编程语言中的预处理指令,用于条件编译。这些指令允许编译器根据特定的条件包含或排除代码的一部分。

2024-11-27 10:34:34 696

原创 使用QTimer和SIGNAL/SLOT机制来实现系统时间的显示

例如,需要确保有一个标签控件(或其他适合显示时间的控件)在界面上,并且它的对象名称是。最后,你需要启动定时器,并设置一个时间间隔。来获取当前的日期和时间,然后将其转换为字符串,并设置到界面上的标签控件中。机制来实现系统时间的显示是一个常见的做法。这个函数应该获取当前的时间,并将其更新到用户界面上。信号连接到一个槽函数,这个槽函数将会在定时器超时时被调用。是一个定时器类,可以在指定的时间间隔后发出信号。是你要调用的槽函数,它应该更新系统时间的显示。对象的指针,它成为了定时器的父对象。在这个槽函数中,使用了。

2024-11-18 21:22:39 461

原创 反步法设计控制器(原理、步骤、适用系统)

首先,定义一个跟踪误差,以期望的轨迹或输出ydy_dyd​为目标。z1x1−ydz1​x1​−yd​反步法的目标是让误差z1z_1z1​收敛到零,即x1x_1x1​逐步接近期望轨迹ydy_dyd​。由于x2x_2x2​z2x2−αz2​x2​−α即,z2z_2z2​表示x2x_2x2​和虚拟控制量α\alphaα之间的误差。

2024-11-05 15:05:32 1944 1

原创 QGroundControl地面站调优界面中PID参数详解(Ardusub)

通过设置适当的加速度值,可以确保飞行器在航点之间的运动更加平稳,同时避免因加速度过大而导致的飞行不稳定或控制困难。通常,调优这一参数时,建议从较小的值开始,然后逐步增加,观察飞行器的响应情况,直到达到满意的控制效果。的值,可以控制飞行器在风或其他外力作用下的响应能力。当控制器在调整过程中,误差(例如偏差)长时间存在时,积分部分会不断累积,这可能会导致输出过大,从而影响系统的稳定性。修正预期速度与目标加速度之间的长期差异,可以优化无人机在水平飞行时的响应特性,确保其在定位和移动时的稳定性和精确性。

2024-11-04 16:25:44 1441

原创 S-Function模块概述(参数说明、使用方法、案例)

S-Function(System Function)是Simulink中一种强大的模块化构建工具,允许用户通过自定义的MATLAB或C语言代码来实现自己的动态系统模型。S-Function提供了灵活性和可扩展性,适合需要复杂逻辑或特定算法的应用。

2024-10-30 10:54:36 1198

原创 Linux系统设置开机自启动.py脚本(树莓派Ubuntu)

是现代Linux发行版中推荐的方式,具有更好的管理和监控功能。目录下创建一个新的服务文件,例如。目录下创建一个新的脚本,例如。方法简单易用,适合小脚本;以上方法各有优缺点,则适用于较老的系统。

2024-10-28 10:00:39 611

原创 PID控制算法原理及调参说明

*(K_p)**决定了系统的快速响应能力,但需要谨慎避免过高以免引发不稳定。**(K_i)**可以消除稳态误差,但过高会导致系统振荡。**(K_d)**提供了对误差变化的预测,有助于提高系统稳定性,但过低则可能导致过度反应。

2024-10-28 09:48:12 1575

原创 在Guided模式下给无人机发送命令设置位置速度

(在Guided和Guided_NoGPS模式下支持)本文仅对做介绍。

2024-10-22 11:07:36 1177

原创 Mavlink发送command_long类型消息介绍----解锁上锁为例

在构建COMMAND_LONG消息时,你需要查阅MAVLink协议的文档,了解你要发送的命令及其所需的参数。然后,使用MAVLink库提供的API来构建消息。

2024-10-21 10:04:11 739

原创 更新pip时报错Exception: Traceback (most recent call last): File “/usr/lib/python3/dist-packages/pip/bas

在更新pip时出现报错。

2024-10-08 20:54:31 2822

Ardupilot源码

Ardupilot源码

2024-11-27

SD卡格式化工具SDFormatter,将SD卡格式化为FAT32格式注意:格式化SD卡将删除其上的所有数据,请提前备份重要资料

SD卡格式化工具SDFormatter,将SD卡格式化为FAT32格式注意:格式化SD卡将删除其上的所有数据,请提前备份重要资料

2024-09-25

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除