|
发表于 2020-5-13 10:15:12
17985 浏览 15 回复
px4 里关于电机output的生成
看完阿木实验室的中级课程之后,最近在看 px4 姿态控制后面的部分。也就是内环姿态角误差生成期望力矩之后如何计算分配四个电机的pwm指令。
我看的是最新的版本,v11.0 beta 。。
在 lib/mixer 里的关于分配函数我是看的差不多了,drivers/linux_pwm_output 里和 snapdragon_pwm_output 里的pwm指令生成流程也算是看明白了,
但是这个 modules/px4iofirmware 里的 px4.c 的 pwm 指令生成流程没怎么看懂,不知道那个 mixer 回调函数(mixer_callback)里的 力矩指令(control)怎么获取的。
这个 r_page_controls 里面应该就存了力矩量吧,但是找了好久也没找到怎么把力矩量传进去的。
另外,还有一个 r_page_actuators 不知道是什么量,好像是类似这个 r_page_controls 的一个量。
我的理解可能也存在错误,请大佬们为我答疑解惑,欢迎交流。
chasing已获得悬赏 1 阿木币最佳答案
这个就根据程序一点一点查找吧,总有地方赋值的。我对输出这部分并没有深入了解过,沿着你的思路找了下,仅供参考
从上图中可以看出变量的赋值过程
...
|
扫一扫浏览分享
|
|
|
|
|
|
|
发表于 2020-5-14 09:48:46
应该是不能赋值力矩量的吧,从头到尾都是归一化的量啊 |
|
|
|
|
|
|
|
楼主|
发表于 2020-5-13 10:18:10
对了,上面那个图是 src/modules/px4iofirmware/mixer.cpp 里第 404 行 |
|
|
|
|
|
|
|
发表于 2020-5-13 17:16:16
|
|
|
|
|
|
|
楼主|
发表于 2020-5-14 17:00:30
是啊,我找调用register_set的过程,就找到了这里,那个dma_packet可能是从 FMU 接收的数据包(的地址)??不确定。。
那个 dma_packet.regs 是在哪里赋值的就不知道了。。。 |
|
|
|
|
|
|
|
楼主|
发表于 2020-5-14 17:09:29
那请问这里的MultiCopterRateControl算出来这个actuator.control是怎么到 px4io 里进行分配的呢??我是把这个理解成了期望力矩(当然,前三个是期望力矩,最后一个是期望合力)
因为按照我的理解以及读完 linux_PWM_output 和 snapdragon_PWM_output 的认识,这个 actuator.control 是通过 mixerCallback 函数传进 mixer 里进行控制分配的
|
|
|
|
|
|
|
|
发表于 2020-5-15 11:41:14
比较复杂,几句话说不清。
acuator_controls是期望力矩,但他没有单位,是归一化的量。
具体的你想知道他是怎么最终变成pwm输出的,需要看好几个文件,按照输入输出的关系一点点去查。
我之前整理过一阵,也只理了个大概,里面涉及到一些底层代码,也看不太明白。
列几个文件名给你
- drivers/px4io/px4oi.cpp
- src/modules/px4iofirmware/mixer.cpp
- src/lib/mixer/geometries/quad_x.toml
- src/lin/mixer/mixer_multirotor.cpp
具体的你自己看吧,我后续可能会把我整理的资料发出来,但暂时还不方便 |
|
|
|
|
|
|
|
发表于 2020-5-15 11:43:18
对了 如果你是想做姿态环控制器替换的话,最好及早换换思路,这样意义不大。 |
|
|
|
|
|
|
|
发表于 2020-6-4 09:28:32
老哥,我不太认同你的说法,要想做复杂非线性控制算法,必须要把控制指令分配搞清楚,不可能还按照线性控制三通道解耦分配指令,单纯的改姿态控制算法无法改变线性解耦控制的本质,四个电机的输入才是真实系统输入。 |
|
|
|
|
|
|
|
发表于 2020-6-5 10:14:02
姿态算法和分配本来就是解耦的。。。你前面再复杂也不会影响到分配的 |
|
|
|
|
|
|
|