请选择 进入手机版 | 继续访问电脑版

11

阿木币

0

精华

20 小时

在线时间

老司机

Rank: 2

发表于 2020-5-13 10:15:12 10269 浏览 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)怎么获取的。
1589335331(1).jpg 这个 r_page_controls 里面应该就存了力矩量吧,但是找了好久也没找到怎么把力矩量传进去的。

另外,还有一个 r_page_actuators 不知道是什么量,好像是类似这个 r_page_controls 的一个量。

我的理解可能也存在错误,请大佬们为我答疑解惑,欢迎交流。

chasing已获得悬赏 1 阿木币

最佳答案

这个就根据程序一点一点查找吧,总有地方赋值的。我对输出这部分并没有深入了解过,沿着你的思路找了下,仅供参考 从上图中可以看出变量的赋值过程 ...

扫一扫浏览分享
回复

使用道具 举报

185

阿木币

3

精华

71 小时

在线时间

技术大V

Rank: 4

发表于 2020-5-14 09:48:46
应该是不能赋值力矩量的吧,从头到尾都是归一化的量啊
回复 点赞 1

使用道具 举报

11

阿木币

0

精华

20 小时

在线时间

老司机

Rank: 2

 楼主| 发表于 2020-5-13 10:18:10
对了,上面那个图是 src/modules/px4iofirmware/mixer.cpp 里第 404 行
回复 点赞

使用道具 举报

0

阿木币

0

精华

182 小时

在线时间

技术大V

Rank: 4

发表于 2020-5-13 17:16:16
本帖最后由 chasing 于 2020-5-13 17:18 编辑

这个就根据程序一点一点查找吧,总有地方赋值的。我对输出这部分并没有深入了解过,沿着你的思路找了下,仅供参考 无标题.png 无标题.png 无标题.png
从上图中可以看出变量的赋值过程
回复 点赞

使用道具 举报

11

阿木币

0

精华

20 小时

在线时间

老司机

Rank: 2

 楼主| 发表于 2020-5-14 17:00:30
chasing 发表于 2020-5-13 17:16
这个就根据程序一点一点查找吧,总有地方赋值的。我对输出这部分并没有深入了解过,沿着你的思路找了下,仅 ...

是啊,我找调用register_set的过程,就找到了这里,那个dma_packet可能是从 FMU 接收的数据包(的地址)??不确定。。
那个 dma_packet.regs 是在哪里赋值的就不知道了。。。
回复 点赞

使用道具 举报

11

阿木币

0

精华

20 小时

在线时间

老司机

Rank: 2

 楼主| 发表于 2020-5-14 17:09:29
AmovlabQYP 发表于 2020-5-14 09:48
应该是不能赋值力矩量的吧,从头到尾都是归一化的量啊

1589445797(1).jpg

那请问这里的MultiCopterRateControl算出来这个actuator.control是怎么到 px4io 里进行分配的呢??我是把这个理解成了期望力矩(当然,前三个是期望力矩,最后一个是期望合力)

因为按照我的理解以及读完 linux_PWM_output 和 snapdragon_PWM_output 的认识,这个 actuator.control 是通过 mixerCallback 函数传进 mixer 里进行控制分配的



回复 点赞

使用道具 举报

185

阿木币

3

精华

71 小时

在线时间

技术大V

Rank: 4

发表于 2020-5-15 11:41:14
Jacob 发表于 2020-5-14 17:09
那请问这里的MultiCopterRateControl算出来这个actuator.control是怎么到 px4io 里进行分配的呢??我 ...

比较复杂,几句话说不清。
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

具体的你自己看吧,我后续可能会把我整理的资料发出来,但暂时还不方便
回复 点赞

使用道具 举报

185

阿木币

3

精华

71 小时

在线时间

技术大V

Rank: 4

发表于 2020-5-15 11:43:18
Jacob 发表于 2020-5-14 17:09
那请问这里的MultiCopterRateControl算出来这个actuator.control是怎么到 px4io 里进行分配的呢??我 ...

对了 如果你是想做姿态环控制器替换的话,最好及早换换思路,这样意义不大。
回复 点赞

使用道具 举报

3

阿木币

0

精华

25 小时

在线时间

应届白菜

Rank: 1

发表于 2020-6-4 09:28:32
AmovlabQYP 发表于 2020-5-15 11:43
对了 如果你是想做姿态环控制器替换的话,最好及早换换思路,这样意义不大。 ...

老哥,我不太认同你的说法,要想做复杂非线性控制算法,必须要把控制指令分配搞清楚,不可能还按照线性控制三通道解耦分配指令,单纯的改姿态控制算法无法改变线性解耦控制的本质,四个电机的输入才是真实系统输入。
回复 点赞

使用道具 举报

185

阿木币

3

精华

71 小时

在线时间

技术大V

Rank: 4

发表于 2020-6-5 10:14:02
18670033683 发表于 2020-6-4 09:28
老哥,我不太认同你的说法,要想做复杂非线性控制算法,必须要把控制指令分配搞清楚,不可能还按照线性控 ...

姿态算法和分配本来就是解耦的。。。你前面再复杂也不会影响到分配的
回复 点赞

使用道具 举报

下一页 »
12下一页
返回列表
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表