自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 无人机开发分享——无人机异构集群开源仿真系统搭建方法分享

在建立的无人机开发群里加入了很多新的开发爱好者们(有需要再进入的文末加V),有很大一部分刚开始学习无人机相关知识,对无人机组装、手飞,还有无人机仿真系统搭建还不太熟悉,因此最近几期我将增加对无人机基础知识的介绍和分享,让刚入门的开发者入手一下。(2)熟练软件开发,也有无人机和开发硬件,但是飞行成本和飞行保障成本较高(尤其是手搓无人机和开源无人机,做过无人机飞行的都知道,验证软件算法的前提的无人机平台本身稳定,但这个稳定就足够消耗很大精力),因此需要集群仿真系统来验证算法,稳定后再户外实飞。

2025-12-14 16:56:23 630

原创 无人机开发分享——基于强化学习的无人机端到端飞行控制算法开发

之前分享过很多关于机载智能软件的开发方法,今天的分享主题是飞控算法。目前人工智能算法应用广泛,应用场景更多的用在了感知、决策等方向。想必很多搞飞控的人都会思考,传统的控制算法亘古不变,如何求得创新,如何结合时兴的人工智能搞一搞。今天就来分享下这个主题。人工智能和飞控结合,有几个方向可选,比如思路 1:AI 增强传统控制,用 AI 解决传统控制的 “建模难、抗干扰弱” 问题,保留传统控制的稳定性(如 PID、MPC);思路 2:强化学习(RL)端到端控制,无需系统模型,通过强化学习训练智能体(Agent

2025-12-01 18:48:28 1264 1

原创 无人机开发分享——基于行为树的无人机集群机载自主决策算法框架搭建及开发

* 在之前的开发分享中,我们分享了机载端开发任务管理、协同控制、无人机平台接口等一系列模块软件,但是要想实现真正的无人机高度智能化,机载的自主决策模块功能必不可少。机载自主决策模块主要实现无人机集群任务过程中地面任务获取分析、战场实时态势分析与自主决策,可在断连或自主模式时对作业中的无人机集群进行决策与控制,减少地面交互,提升任务效率。下面我们对机载自主决策模块的开发进行介绍。**

2025-08-06 16:47:17 897

原创 【Linux/Ubuntu】VIM指令大全

Vim 是一款功能强大的文本编辑器,掌握其常用操作指令可以极大提高编辑效率。

2025-07-25 10:12:20 837

原创 无人机开发分享——基于一致性算法的无人机集群协同避障与目标跟踪算法开发

本文研究了基于一致性算法的无人机集群协同控制方法。通过一致性算法实现编队形状和速度同步,结合人工势场法进行机间避障,并设计目标跟踪机制引导编队移动。文章详细介绍了系统架构和算法原理,包括一致性控制、避障算法和目标跟踪的设计思路。通过ROS2框架实现分布式控制,代码展示了无人机状态管理、邻居通信和控制指令发布的实现细节。该方案实现了无人机集群的协同避障与目标跟踪功能,为分布式协同控制提供了有效解决方案。

2025-06-25 12:55:17 610

原创 无人机开发分享——基于分布式模型预测控制(DMPC)的无人机集群协同控制软件开发

MPC模型预测控制是基于无人机动力学模型,在有限时域内预测未来状态,通过优化目标函数(如轨迹跟踪误差、能耗)求解最优控制输入,并滚动优化。DMPC将 MPC 扩展到多智能体系统,每个无人机仅考虑自身及邻居的约束,通过交互局部优化结果达成全局最优。分布式模型预测控制(DMPC)是处理多无人机协同控制的有效方法,它在保持MPC优化性能的同时,通过分布式架构降低计算负担。下面我将详细介绍如何在ROS2中实现DMPC算法并将控制信息发送给飞控。一、系统架构设计1. 总体架构ROS2节点层。

2025-06-21 16:57:41 1095

原创 无人机开发分享——无人机集群基于braft实现长机动态推选算法

无人机集群长机动态推举算法开发分享

2025-06-16 16:12:38 752

原创 在NVIDIA板载设备(如Jetson系列)上使用Docker容器化技术开发无人机智能软件

通过以上步骤,你可以在NVIDIA板载设备上使用Docker容器化技术开发、部署和管理无人机智能软件,充分利用GPU加速AI算法,同时确保环境一致性和系统稳定性。智能化是未来无人机发展的重要方向,因此无人机的机载智能软件的开发十分重要,大家可以着手对该方向进行研究,同时可以共同沟通分享开发经验。后期的开发经验将会继续分享,文章转自我的公众号(无人机自由开发坊),或者加入我的开发群共同讨论开发经验。以Jetson平台的ROS 2和CUDA环境为例,创建。更多开发分享可关注公众号:无人机自由开发坊。

2025-06-12 16:39:55 1525 6

原创 无人机开发分享——机载ROS2系统通过DDS实现对开源飞控PX4在线规划与控制

分享如何在机载ROS2系统上开发机载程序对开源飞控PX4实现规划与控制。

2025-06-09 11:08:36 1801

原创 网络通讯知识——通讯分层介绍,gRPC,RabbitMQ分层

作为应用层的 RPC 框架,gRPC 通过。

2025-06-05 11:38:40 1110

原创 无人机开发分享——大疆无人机PSDK机载智能模块开发方法

分享如何加装机载智能模块来通过大疆的psdk协议对大疆无人机进行群体、智能控制

2025-06-01 10:20:59 3997

原创 无人机飞控运行在stm32上的RTOS实时操作系统上,而不是linux这种非实时操作系统的必要性

对于无人机这类需要高频率、低延迟、高可靠性的控制系统,RTOS能确保关键任务(如姿态解算、电机驱动)在严格时间约束内完成,而Linux更适合处理非实时的高层任务(如图传、路径规划)。两者可通过异构计算架构(如Linux+RTOS协同)结合,但实时控制部分仍需依赖RTOS。飞控程序需要运行在STM32等微控制器(MCU)的实时操作系统(RTOS)而非Linux等非实时操作系统(如通用Linux内核),主要原因在于实时性、资源占用、硬件适配性以及系统可靠性等方面的实质性差异。

2025-04-21 14:53:37 2369

原创 C++ std::function的含义、意义和用法,与std::bind的区别

在 C++ 中,是一个通用的多态函数包装器,它是 C++ 标准库头文件中的一部分。下面从含义、意义和用法三个方面详细介绍。

2025-04-18 11:19:34 682

原创 C++ 类的成员变量和成员函数加static的意义

普通成员变量的定义和对象的创建紧密相关,在类内定义普通成员变量可以清晰地描述对象的结构,符合面向对象编程中类的封装特性。普通成员变量的内存分配和初始化是在对象创建时完成的,不需要在类外单独定义。

2025-04-17 18:26:35 787

原创 C++ static静态成员变量初始化问题

在 C++ 里,类的静态成员变量属于整个类,而非类的某个对象,所有对象共享同一个静态成员变量。静态成员变量的初始化有其特定规则,下面详细介绍不同情况下的初始化位置与方式。

2025-04-17 16:03:01 672

原创 C++中const的不同使用方法和意义

在 C++ 里,const。

2025-04-17 16:00:24 359

原创 C++ static的使用方法及不同作用

在 C++ 里,static。

2025-04-17 15:49:14 705

原创 `std::unique_ptr`、`std::shared_ptr` 和 `std::weak_ptr`区别

在 C++ 中,和是标准库提供的智能指针,用于管理动态分配的内存,避免内存泄漏。

2025-04-15 13:43:36 516

原创 c++ deque queue vector list circle_buffer的区别

在 C++ 中,std::dequestd::queuestd::list和boost。

2025-04-09 14:54:18 717

原创 ROS2终端常用指令

是你要查看信息的节点名称,执行后会显示该节点发布和订阅的话题、提供的服务等信息。是你要查看信息的功能包名称,执行后会显示该功能包的详细信息,如描述、依赖等。是你要订阅的话题名称,执行后会实时显示该话题发布的消息内容。是你要查看参数的节点名称,执行后会列出该节点的所有参数名称。为你要查看类型的话题名称,执行后会显示该话题的数据类型。是你要查看频率的话题名称,执行后会显示该话题的发布频率。是你要查看类型的服务名称,执行后会显示该服务的数据类型。是参数名称,执行后会显示该参数的当前值。

2025-04-08 15:44:06 1410

原创 linux硬件指令

若有 usbserial,说明系统支持;若没有,可能需要加载相关驱动模块。查看串口设备文件:在终端中输入 ls /dev/ttyS* 或 ls /dev/ttyUSB* 查看系统中的串口设备文件。其中,/dev/ttyS* 通常对应普通串口设备,/dev/ttyUSB* 对应 USB 转串口设备。查看串口连接信息:使用 dmesg | grep ttyS* 或 dmesg | grep ttyUSB* 命令查看从系统启动到现在串口插入拔出的信息,可通过此方法确定新插入的串口线对应的串口号。

2025-04-01 11:21:00 370

原创 【GIT 常用指令】

初始化本地 Git 仓库git init# 添加远程仓库地址# 添加文件到暂存区git add .# 提交文件到本地仓库# 推送文件到远程仓库#获取远程仓库的最新内容(不合并)合并# 同步仓库内容到本地。

2025-04-01 11:20:40 734

原创 ROS2 功能包创建和编译

但这个指令并不会编译该包的依赖,往往会报错。可以用下面这条指令进行包和其依赖编译。

2025-04-01 11:20:18 581

原创 linux/ubuntu 解压zip、tar、gz指令

是 Linux 中用于处理文件归档和压缩的重要工具,它可以将多个文件或目录打包成一个文件,并且能与不同的压缩算法结合使用。文件,这两种格式在 Windows 和 Linux 中都广泛使用。用于压缩单个文件,使用 DEFLATE 压缩算法。是一种压缩率很高的压缩工具,只能压缩单个文件。也是用于压缩单个文件的工具,压缩率比。用于压缩单个文件,压缩文件的后缀为。高,但压缩速度较慢。,不过现在使用较少。

2025-04-01 11:14:51 1330

原创 【PX4-GAZEBO半实物仿真平台——添加三轴可控云台完成视频采集并编码后发送到机载端】

在为无人机添加三轴云台控制模型时,可以先从PX4的模型库中找相应的载荷模型,由于PX4代码中没有对于的三轴云台模型,但有一款名为Typhoon H480 (Hexrotor)的六旋翼的sitl软件在环仿真的模型。此时我们去查看这个模型的SDF文件,可以看到这个SDF文件包括了无人机机体和载荷,是写在了一起,与以往的无人机和载荷分开写不太一致。由于之前的脚本的sitl软件在环仿真的,半实物hitl是由真实硬件飞控为载体,因此不同之处还是有很多的,这点可以对照着sitl的代码逻辑去看。实现对三轴云台的控制。

2024-07-31 18:00:20 1527

原创 【PX4-Gazebo半实物仿真系统情报分析——视频流由Gazebo编码后通过UDP传到机载端解码(Gstream)】

rk3588使用gstream:参考:项目场景:在PX4+GAZEBO半实物仿真系统中,载荷视频已由Gstream推流到固定udp端口上,需要机载端接收。

2024-07-31 16:59:55 408

原创 【MAVLINK收发测试——Linux/ubuntu中端口查看与数据抓包工具】

参考:参考:tcpdump 是一款强大的网络抓包工具,它使用 libpcap 库来抓取网络数据包,这个库在几乎在所有的 Linux/Unix 中都有。

2024-07-31 16:07:01 892

原创 C++ 使用指针的意义及智能指针(动态内存)的作用

指针(Pointer),从其英文字面上来理解就是一个指向某一物件的东西,在程序中就是指向数据的地址(Address)。计算机的内存可以看作是一个紧密排列的数据序列,每一小块数据序列,每一小块数据(也就是字节)的旁边都有一个编号代表数据地址。这在现实中可以用房屋的地址来理解,我们可以说这一栋房子是小李家,也可以说一栋房子是xx路xxx号(指针表示)//指针的含义int main()i < 5;i++)cout

2024-01-27 15:21:54 1331

原创 C++ 构造函数、析构函数与虚函数

此外class B的公共成员中还有一个属于自己的函数 void func2(),注意,这里面的函数func2虽然与class A中的函数func2同名,但是他们是互补相关的两个函数,也不存在谁覆盖谁,因为他们并没有将该同名函数申明为virture function(虚函数),所以class B的对象在调用void func2()的时候,它只能调用到class B自身公共成员函数中的void func2()函数,而无法调用到class A 中的void func2()函数。其次,调用构造函数。

2024-01-23 19:13:52 1601 1

原创 C++中的explicit的使用笔记

官方定义:1.指定构造函数或转换函数 (C++11起)为显式, 即它不能用于隐式转换和复制初始化.2.explicit 指定符可以与常量表达式一同使用. 函数若且唯若该常量表达式求值为 true 才为显式. (C++20起)3.被声明为explicit的构造函数通常比其 non-explicit 兄弟更受欢迎, 因为它们禁止编译器执行非预期 (往往也不被期望) 的类型转换. 除非我有一个好理由允许构造函数被用于隐式类型转换, 否则我会把它声明为explicit. 我鼓励你遵循相同的政策.

2024-01-23 16:26:54 493 1

原创 【PX4与QGC通信----Mavlink学习笔记】

(4)custom_mode:自定义模式,也是必不可少的。自定义模式有一些预定义的值,其中0表示手动飞行模式,4表示引导模式,10表示自动模式,11表示RTL模式,9表示LAND模式,2表示ALT_HOLD,5表示LOITER。根据最新规范,在MAV_TYPE中定义了33种预定义类型,包括四旋翼(MAV_TYPE_QUADROTOR = 2),直升机(MAV_TYPE_HELICOPTER = 4),固定翼(MAV_TYPE_FIXED_WING = 1),以及其他几种。用户不可编辑,由协议设置。

2024-01-18 15:47:53 3293 2

原创 基于Gazebo+ROS+PX4+QGC+深度相机实现无人机HITL半实物仿真

官方参考链接:(2)设置参数,打开Tools/simulation/gazebo-classic/sitl_gazebo-classic/models/iris_hitl/iris_hitl.sdf).找到文件的 mavlink_interface plugin 分区,将 serialEnabled 和 hil_mode 参数更改为 true。(3)配置环境变量(4)启动Gazebo(5)转发mavlink到其他电脑最后一个为server,前面为client。

2024-01-17 15:37:48 2659 3

原创 【C++ template的使用】

template与template一般情况下这两个通用,但有一个特例,就是当 T 是一个类,而这个类又有子类(假设名为 innerClass) 时,应该用 template:这里的 typename 告诉编译器,T::innerClass 是一个类,程序要声明一个 T::innerClass 类的对象,而不是声明 T 的静态成员,而 typename 如果换成 class 则语法错误。

2024-01-17 10:53:27 504

原创 C++ this 的使用

在 C++ 中,this 指针是一个特殊的指针,它指向当前对象的实例。在 C++ 中,每一个对象都能通过 this 指针来访问自己的地址。this是一个隐藏的指针,可以在类的成员函数中使用,它可以用来指向调用对象。当一个对象的成员函数被调用时,编译器会隐式地传递该对象的地址作为 this 指针。友元函数没有 this 指针,因为友元不是类的成员,只有成员函数才有 this 指针。

2024-01-16 16:17:24 732

原创 ERROR: No matching distribution found for setuptools>=40.8.0

解决:pip install --upgrade -I setuptools。

2023-03-28 15:12:57 1036

空空如也

空空如也

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

TA关注的人

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