目录
主要面对分布式的控制
ROS通信系统
UAV1在话题中开辟(subscibe)一个话题(topic),将位置P1和速度V1发送到话题中; UAV2可以去订阅(advertise)UAV1的话题来进行通信
如图,UAV1提交信息到话题,UAV2订阅UAV1的话题;UAV2提交话题,UAV3订阅UAV2的话题,并提交UAV3的话题;UAV4订阅UAV1和UAV2的信息
ROS控制
无人机的协同控制本质就是协同执导
因此可将连续的控制器 转换成 离散的控制器
如图是连续系统的位置P,速度v的控制器。u是加速度
转为离散系统的控制器:
通过设计Ui来进行输入
转成离散系统的控制器方便编程
因此可以通过订阅自己的位置信息Pi,其他无人机的位置信息Pj,通过输入到控制器ctrler,获得下一个位置Pi(t+▲t),然后回馈
控制器采用的是PX4,PX4可以将控制信息输入到无人机中来控制无人机
先考虑多智能体系统MAS,不考虑PX4
所以重点考虑以下公式:
图1
UPi(t)=▲t*Vi(t)是设计的速度
ai(t)=uvi是设计的加速度
上图中第一个式子是一致性跟踪,第二个式子是加入了领导者
上式是领导者编队,收敛到hij等
通过将ai(t)输入到图1中的(2)式,获取Pi和Vi,然后提交话题,然后被订阅
因此在编程中,需要关注①提交和订阅谁,②实现(2)式,③实现控制器
在ROS中的main函数中会把上述的三个内容包含在while循环中一直进行循环
代码实现
launch:把MAS启动打包了,不用一个一个的启动
msg:相关信息,比如时间戳
output:中间产生的数据记录在此文件夹,生成matlab文件
param:存放和群相关的参数
src:源代码,包含领导者,跟随着,控制器
readme
cd uav_ws:进入工作空间
catkin_make:编译文件
roslaunch uavs_package multi_agent.launch:一个例子,(1领导者3跟随者),运行文件(打包了很多ROS指令)
roslaunch uavs_package multi_agent_1l5f.launch:一个例子(1领导者5跟随者),运行文件
运行完成,output文件夹中生成matlab文件,导入matlab,运行,结果如下:
main
第一行:控制器,公式2、提交和订阅集成到network中
if循环:输出到控制台,方便调试
rate.sleep:每20ms一次