上一期分享了四旋翼无人机如何实现追踪目标并撞击的算法开发思路,有很多人想验证一下这个打击算法思路的可行性。前段时间比较忙,今天空下来点时间来验证一下这个代码,在仿真中用四旋翼无人机打击目标。
上期中写了主要思路是
(1)感知模块
训练目标信息,载荷装在无人机上,获取目标信息,发送目标位置等信息
(2)规划模块
规划航线、局部避障、末端快速打击
(3)控制模块
跟踪航线、期望姿态指令。
今天在个人笔记本对上述算法进行快速验证一下
一、部署环境
(1)系统:ubuntu20.04
(2)ros2foxy
(3)px4 sitl 软件在环仿真
(4)Micro xrcedds ros2 转uorb插件
(5)qgc地面站
(6)gazebo classic

二、模型与世界
模型与世界选用原则:简单、好用、免费。符合无人机自由开发坊作风。
(1)无人机模型选择四旋翼无人机经典模型iris,用的最多的,也是最简单的

(2)打击目标用的行走的人,今天先打击静态人,哪天有空给人的模型加个行走插件,打击动目标,动目标对算法调参要求较高,比较耗费时间

(3)世界模型选用sonoma raceway 经典模型

三、算法架构

Image
依旧如上期内容:目标检测、订阅位置、制导计算、控制输出
今天的目标识别模块由于时间问题,没有用yolo等做目标训练识别,这个有时间可以做一下,不算复杂。结果都是输出目标位姿态等信息。今天采用模型位置信息发布作为代替。
由于ubuntu20不太好用,要么不更新了,要么很多模式更好适配ros1.但是由于最近开发用ros2 比较多,习惯了,所以今天还是用ros2.但是确实今天弄人的模型发布ros2话题的实时位置比较麻烦,还有插件都不支持,tips1:最后研究半天是用了这个插件libgazebo_ros_p3d.so,可以发布ros2话题的实时位置,试了好多个。
c
<!-- Gazebo ROS2 Foxy原生插件:libgazebo_ros_p3d.so 发布位姿/里程计话题 -->
<plugin name="gazebo_ros_p3d_person" filename="/opt/ros/foxy/lib/libgazebo_ros_p3d.so">
<!-- ************************ 需修改的参数 ************************ -->
<ros_node_name>person_p3d_publisher</ros_node_name> <!-- 节点名,自定义,含模型名即可 -->
<!-- 新增命名空间:兜底实现自定义话题名,核心 -->
<ns>/gazebo/person</ns>
<topic_name>/gazebo/person/personodom</topic_name> <!-- 发布的ROS2话题名,自定义 -->
<body_name>link</body_name> <!-- 模型的基连杆,PX4模型固定为base_link,target模型若无则写模型名(如target) -->
<!-- ************************************************************* -->
<!-- 固定配置:适配PX4-Gazebo仿真 -->
<update_rate>10.0</update_rate> <!-- 发布频率,PX4建议100Hz -->
<gaussian_noise>0.001</gaussian_noise> <!-- 噪声值,仿真可设小一点 -->
<publish_odometry>true</publish_odometry> <!-- 发布Odometry话题,固定true -->
<publish_tf>false</publish_tf> <!-- 是否发布TF变换,若需RViz2可视化可设true -->
<frame_name>world</frame_name> <!-- 参考坐标系,Gazebo世界坐标系,固定world -->
<child_frame_name>person_walking/link</child_frame_name><!-- TF子坐标系,含模型名,自定义 -->
</plugin>
广播实时位置,然后订阅位置,计算控制输出,通过px4_msgs offboard模式控制px4无人机。
平面速度是16m/s,垂向是4m/s。
对了今天还有个插曲是,我个人笔记本的px4版本比较老,px4_msgs与新的不太一致,导致microxrcedds的发布的无人机局部位置信息无法反序列化,这个也浪费了点时间。tips2:记得PX4飞控代码和ROS2工程依赖的头文件保持一致。
四、开始仿真
1)无人机起飞到10米
(2)订阅到目标位置
(3)飞到距离目标30m距离
(4)发动末端导引,快速撞击目标
打击策略比较重要,横向和纵向加速度参数、高度控制节点掌控,需要好好花费时间调试打击策略和参数。
vokoscreen-2026-02-01_22-32-27
特写镜头,16m/s的速度,没有加速
vokoscreen-2026-02-01_22-36-43

后续可以添加目标倒下或者毁灭的效果,有时间的可以尝试。
本期的主要内容就是对上期分享的打击算法进行简单复现一下。主要省略了目标识别和动态目标打击,后续会继续复现,原理也不复杂,操作也不繁琐。今天抽了点时间简单复现,场景过于简单请不要介意。
打击算法和仿真流程全套代码 斯我(10Y)