ppo训练的方式为在线训练,在线训练的好处在于其存在2个网络,以降低对环境的拟合程度,也正因如此,可以使用ppo old网络作为试探网络,将其上传至px4飞控控制环作为数据收集的试探网络。而上午机则作为训练器,在一定时间步长后对网络进行更新,完成近似于在线自适应控制器的强化学习方法。
其核心在于对网络结构的解读与代码重写,好在作为随机梯度,对输出的误差要求不高,因此也能够实现在线训练过程。
不同于一般神经网络结构,ppo推理过程还包含一个随机状态选取过程,这通常需要单独的处理,将其加载到网络输出端,进而得到需要的结果。
将ppo checkpoint文件进行可视化,可以看出其实际是一个非常庞大的网络结构。
但实际用于推理的结构实际上占用网络结构的很小一部分,这就需要对网络结构进行冻结,其过程需要找到推理网络的入口,出口,如在这里
其输入为以上两个节点
出口则为以上节点,找到出口和入口后,就可以进行网络冻结,这里使用的是tf1.14,因此操作与其他版本可能不同。
到此就完成了推理模型的冻结,并获得了模型的网络结构。
具体参照源码,将其翻译为mat可识别的矩阵乘法,后搭建模型载入px4飞控。最终并可以获得在px4飞控板上实时运行的ppo网络,在125hz下占用px4cpu大概为10%,获取的数据也可进行实时上传。
通过端口实时获取数据。
收到数据: 0000484311e3df3e00c0a4440000aa4400c0ac4400e0994491eac84e1723d6be627868bf6c14afbc7e12623fdbf2d2bed0de653e51c259be94a0993d0868793f000000000000000051ab3740e10cafbd72f48dbde16e60be6a6be73d4072d4be6ffb463d (200.0, 0.43727925419807434, 1318.0, 1360.0, 1382.0, 1231.0, 1685407872.0, -0.41823646426200867, -0.908086895942688, -0.02137204259634018, 0.8830946683883667, -0.4120090901851654, 0.22448277473449707, -0.21265532076358795, 0.07501330971717834, 0.9742436408996582, 0.0, 0.0, 2.8698313236236572, -0.08547378331422806, -0.0693138986825943, -0.21917296946048737, 0.11299784481525421, -0.4149341583251953, 0.0485796295106411)
收到数据: 0000484311e3df3e0080a5440060a9440020ac4400409a44d0eac84eae60d6be996e68bf07d495bc730c623f66d0d2beeebb663e1c3459be1d25a03d625f793f00000000000000007cb837409d6eacbdb8ca8cbd743060be22f5cb3d7c19bcbefd3d123d (200.0, 0.43727925419807434, 1324.0, 1355.0, 1377.0, 1234.0, 1685415936.0, -0.41870635747909546, -0.9079375863075256, -0.018289579078555107, 0.8830024600028992, -0.41174620389938354, 0.225326269865036, -0.21211284399032593, 0.07819578796625137, 0.9741116762161255, 0.0, 0.0, 2.8706350326538086, -0.08419535309076309, -0.06874603033065796, -0.2189348340034485, 0.09958864748477936, -0.3673819303512573, 0.03570364788174629)
收到数据: 0000484311e3df3e0060a6440080a8440020ac4400a09a440eebc84e8e84d6be9c6968bf2e907fbcf608623f109fd2be48a6673e5ae058be2ae8a53ddf54793f0000000000000000c9c937404912a9bddff58cbdcb1360bea3d3ee3d03cba0be9e8b6f3d (200.0, 0.43727925419807434, 1331.0, 1348.0, 1377.0, 1237.0, 1685423872.0, -0.41898006200790405, -0.9078614711761475, -0.015598339959979057, 0.8829492330551147, -0.41136980056762695, 0.2262202501296997, -0.21179333329200745, 0.08100922405719757, 0.9739512801170349, 0.0, 0.0, 2.8716909885406494, -0.0825544074177742, -0.06882833689451218, -0.21882550418376923, 0.11661460250616074, -0.3140488564968109, 0.058482758700847626)
收到数据: 0000484311e3df3e0000a74400c0a7440040ab4400409b444debc84ea8a5d6be516468bf73a35abc8902623f5476d2be0c9e683e5cc858bed8e9aa3da648793f0000000000000000bdd93740eb50a9bdcc678cbd69ef60be4c6de73d54ae84be2266ef3c (200.0, 0.43727925419807434, 1336.0, 1342.0, 1370.0, 1242.0, 1685431936.0, -0.4192326068878174, -0.9077807068824768, -0.013344633392989635, 0.8828511834144592, -0.41105902194976807, 0.22716540098190308, -0.21170181035995483, 0.08345383405685425, 0.9737647771835327, 0.0, 0.0, 2.8726646900177, -0.08267387002706528, -0.06855735182762146, -0.21966327726840973, 0.11300143599510193, -0.25914251804351807, 0.029223505407571793)
收到数据: 0000484311e3df3e00a0a7440040a7440040aa4400009c448bebc84eece2d6becb5768bfd55a3dbc55f4613fe476d2bed278693ef0c258beb915af3d5c3d793f000000000000000055e8374083c6abbd28de8bbd9de860bef492ce3db42a5abe52e930bc (200.0, 0.43727925419807434, 1341.0, 1338.0, 1362.0, 1248.0, 1685439872.0, -0.419700026512146, -0.9075896143913269, -0.011557300575077534, 0.8826344609260559, -0.4110633134841919, 0.2279999554157257, -0.21168112754821777, 0.0854906514286995, 0.9735925197601318, 0.0, 0.0, 2.8735554218292236, -0.08387472480535507, -0.06829482316970825, -0.21963734924793243, 0.10086622834205627, -0.21305352449417114, -0.010797815397381783)
收到数据: 0000484311e3df3e00e0a74400c0a64400a0a94400809c44caebc84e4134d7be1f4668bf750825bcd9df613f5593d2bee04e6a3ea7d558be75c4b23de231793f000000000000000002f637402b53aebd2c9a8bbdde8a60be934cdc3d5fd03ebe6e3623bd (200.0, 0.43727925419807434, 1343.0, 1334.0, 1357.0, 1252.0, 1685447936.0, -0.4203205406665802, -0.907319962978363, -0.010072817094624043, 0.8823218941688538, -0.4112803041934967, 0.22881650924682617, -0.2117525190114975, 0.08728877454996109, 0.9734174013137817, 0.0, 0.0, 2.874390125274658, -0.0851195678114891, -0.06816515326499939, -0.21927973628044128, 0.1075679287314415, -0.18634174764156342, -0.03984683007001877)
可以看到,其延时为0.8毫秒,近于实时的运行在飞控板之上,这也为之后的神经网络部署提供了便利,无需考虑对延时的处理,此外,125hz或许并非其极限,这里125hz用于飞控完全胜任。