ArduPilot-Mocap转换解析

24 篇文章 6 订阅
7 篇文章 1 订阅
针对小直升机在optitrack移植过程中出现的两个Bug进行解析:

1)高度的控制如何实现,在直升机中,存在油门和总螺距的一起联动问题。
2)在切换的瞬间,会有一个大的偏差,需要查看log并想办法修复这个问题.

问题1) 解答:

loiter模式下, 摇杆的位置对应的是给定的target_climb_rate, 详见代码如下:
在这里插入图片描述
对应语句为

target_climb_rate = get_pilot_desired_climb_rate(channel_throttle->get_control_in());

其中考虑了遥控器的死区.
然后通过upodate_z_controller()函数计算出需要的油门控制量, 由于loiter模式下有几个子模式,仅截取其中一个子模式进行说明
在这里插入图片描述
上图中 pos_control->set_alt_target_from_climb_rate_ff(target_climb_rate, G_Dt, false); 函数中,会将上面计算出来的target_climb_rate转换成 _pos_target 或者_vel_desired
同时,遥控器的油门通道值还会影响高度通道acc的积分值, 详细见下图中_attitude_control.get_throttle_in()函数
在这里插入图片描述
再次跳转进入run_z_controller()函数中,可以看到由于之前油门值影响了_pos_target 或者_vel_desired, 进而_pos_error.z开始起作用,后面的PID运算开始发挥作用
在这里插入图片描述
直到下图的内容, 最终将计算出来 thr_out 送出去
在这里插入图片描述
因此,通过前面的分析,可以,得到如下结论: 通过油门摇杆的改变, 间接改变了油门的输出量, 其中用到PID控制器, 油门量对应的给定的爬上速率.
而我们需要将联动的两个通道也和 thr_out关联起来即可.
在ArduPilot中修改直升机 主桨转速 的函数在 copter.cpp中的 throttle_loop中 50Hz, heli_update_rotor_speed_targets();
在这里插入图片描述
跳转进该函数, 可得到下图:
在这里插入图片描述
这其中的get_pilot_desired_rotor_speed()函数 为获取辅助通道的值
在这里插入图片描述
通过仿真测试得到如果输入值为1800则对应的值为0.8, 猜测为 ( 1800 − 1000 ) ∗ 0.001 = 0.8 (1800-1000)*0.001 = 0.8 (18001000)0.001=0.8
上文中提到的油门通道的thr_out 平衡点的输出值为 0.5

问题2) 解答:

在模式的切换时候, 是有Bug的.
在模式切换的时候, 下图的loiter_nav->init_target():
在这里插入图片描述
跳转进去会有一个xy_controller的初始化函数,如下

_pos_control.init_xy_controller();

继续跳转进去得
在这里插入图片描述
上图显示的是已经修改后的loiter模式初始化部分,可以看出对于四旋翼, 其悬停的时候_ahrs.roll_sensor是在零度附近的. 而直升机在悬停的时候,是有一个可以设置的参数来进行调节的, 默认为3度. 故在这个地方,也就是模式的切换初期,我们需要先将这个数值给减去,(后面可以看到, 还会再次进行这个值的累加, 因此这个地方时还是有必要先减去这个数值的)
同时, 在 void AC_PosControl::run_xy_controller(float dt)函数中( AC_PosControl.cpp文件中)
在这里插入图片描述
这个两个计算vel_xy_i的地方也需要进行首次进入的积分值清零, 如下图中的reset_I(); 所示. 对于Vector2f AC_PID_2D::get_i_shrink() 也需要做同样的处理.
在这里插入图片描述
这样在后面的给定姿态角度的时候,就不会出现突变的问题了
在这里插入图片描述
注:在高度控制中,check_for_ekf_z_reset()中, shift_alt_target()函数,在模式切换的时候,会对高度通道产生影响,需要针对小直升机进行屏蔽,另外, 实际飞机测试中,由于小直升机存在“围绕原点”画圈的现象,通过增大位置环的D值,可以实现定点效果。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kinect Mocap插件是一种通过Kinect传感器进行动作捕捉的工具。Kinect是一种由微软开发的深度感应摄像头,可以实时捕捉人体的运动和姿势。Kinect Mocap插件可以帮助用户将这些运动数据转换为计算机图形中的虚拟角色动作。 这个插件为用户提供了一个简单易用的界面,让他们能够轻松地与Kinect传感器进行连接和交互。使用Kinect Mocap插件,用户只需要站在Kinect传感器前方进行动作,插件就会自动捕捉和记录用户的运动数据。 Kinect Mocap插件具有广泛的应用。在游戏开发中,它可以帮助开发者更加快速和准确地创建角色动画。在虚拟现实和增强现实领域,它可以用来跟踪用户的动作和姿势,实现身临其境的互动体验。在影视制作中,Kinect Mocap插件可以用来创建特效动画,提高电影和电视节目的制作效率。 Kinect Mocap插件的优点是它具有较低的成本和易用性。相比于传统的动作捕捉系统,Kinect Mocap不需要昂贵的设备和复杂的设置,用户只需要一台Kinect传感器和一个支持插件的计算机即可。此外,这个插件的界面简单直观,用户可以快速上手,无需专业的技能和经验。 综上所述,Kinect Mocap插件是一种通过Kinect传感器进行动作捕捉的工具,具有广泛的应用领域,成本低廉且易于使用。它为用户提供了一种快速和准确地记录和转换运动数据的方法,是数字媒体制作和互动体验领域的重要工具之一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值