[小冬搞开发]-研究篇-飞控开发系列(六)

小冬搞机之强化与迁移学习

Posted by Lordon on March 19, 2020

大江东去浪淘尽千古风流人物,要数风流人物还看今朝啊~

关于本文

跟老板交流所记录内容:
用基于神经网络的策略控制器取代传统的基于模型的运动规划和跟踪控制器。此策略网络将映射结果作为输入,并直接计算控制操作。
实验结果表明这种基于神经网络的控制策略确实能够达到与传统的运动规划器和跟踪控制器相当的精度和稳定性。此外,通过强化学习对网络进行微调,在某些性能上优于传统的基于模型的方法,说明我们的模拟强化框架比基于模型的方法具有更高的性能。

用网络来拟合飞控

虽然港科大去年已经有人在做了…紧随其后研究下

当前进展:

  • 在wim使用tensorflow搭建了五个全连接层的神经网络,输入为position_error(3×1),velocity_error(3×1)以及euler_error(3×1),输出为四电机angle_velocity(4×1).数据通过控制之前在gazebo中仿真的四旋翼随机飞行采集所得.通过对近万个数据进行反复训练后loss下降比较可观,当然炼金调参对现阶段还不适合,进而采取下一步动作.

  • ROS与tensorflow的结合使用在古月的机器人制作一书中已经有所介绍,大部分都是使用摄像头调用opencv识别物体,网友们也都是基于此开源项目展开研究的.此类项目与我们所研究的重合点在于编写python脚本读取无人机的odom话题message通过我们第一步训练过的网络计算出四个电机角速度,这一向量返回发布到speed_control话题上.
    3.21
  • 这两天因为没在ubuntu写的程序bug挺多,根据思路复现的代码确实不可信,调崩了gazebo之后换新代码立马见效。 Rotors代码结构写的特别棒值得深入研究,上午使用python脚本读取ros运行时话题数据,在消息类型上吃了大亏,反复topic info测试了好几遍才读取成功,接下来 就是数据转存与处理.

上午/script/test.py 读取msgs数据成功

  • 读取完ros结点的数据接下来就是跑模型预测控制量,通过初始化自定义rosnode:rostensorflow发布motor_vel话题,自定义float64类型msgs,rosrun脚本之后rostopic list确实生成了话题,rostopic echo moter_vel显示接口设置成功。

下午rostopic echo moter_vel成功

  • 晚上因为白天修改了代码调用tensorflow模型总是出错,重新复现逐句调试后才成功跑通,至此ros与tensorflow脚本调用部分顺利接通,能够实现根据采集到的仿真环境中传感器采集数值调用tensorflow预训练模型得到四个电机转速控制量,接下来便是roscpp部分读取motors_vel话题上的电机转速控制量来控制电机转动。

晚上 调用模型预测电机控制量成功

3.22
  • 在roscpp部分发布电机转速控制后gazebo中飞机并不运动,gazebo与command有话题数据均显示正常,飞机乱飞..到此均已完成,下午整理文档后面再进行优化.

罕见的吐槽

我的渣渣笔记本当初虽然已经尽可能预留了空间,但是如今ubuntu剩余空间已不足20G,加上显卡又渣,屏幕又小拿着还沉…疯狂暗示:P,所以我现在对这个(搞深度学习)也不是那么感冒.
老王今天(3.19)说开学可能要5月初了,实验室的服务器他会想办法分配一下,后面几天用起来会方便一点,近期就不是很想做这方面的工作,不过师兄对这个很感兴趣一直在调试,等有进展再继续完善.

4.3 最新进展

三月份训练的方式确实欠妥,使用了9个变量作为输入参数,四个电机控制量作为输出,在仿真环境中只起到了证明训练出来的网络能应用到ROS中的作用。为此老王特地开会讨论了这个问题,老王提出了他的state transform 想法💡.

4.13 新的方向

这一次我们使用前一时刻的状态作为输入,这次我们使用了13个量,输出为下一时刻的状态量,使用RNN却得了很好的效果。 这个比较早了,现在时间到了十天后,之前纯状态转移网络取得了不错的效果,在gazebo中同时显示两个飞机能够几乎同步运动,但是 缺点在于解耦后状态转移只是预测了当前时刻之后一个状态,没有进行累加预测,所以看起来效果还可以? 不过问题不大,今天把刚训练的模型拉到新程序里遛遛,下面是当前使用iThoughtsX控制思路导图 :

网络首先由m100数据训练,利用仿真环境获取m100模型的传感器数据,训练控制策略;

这一部分参考:数据采集以及处理参考开发系列四.

这部分都弄完之后尝试一下小样本迁移学习