文章标题

来源:互联网 发布:网络方面 证书 编辑:程序博客网 时间:2024/06/08 08:34

第一种思路:

不管手动还是自动,发送的都是期望航向,航速,深度。

优点:同时能解决缓慢增加转速的问题。

MiniROV运动控制操作说明

[键盘说明]

[触摸屏说明]

[手柄说明]

1、纯手动控制

1.1 简介

手动控制分为四个命令:

  1. 拐弯命令:yaw
  2. 前进命令:thro
  3. 升降命令:lift
  4. 电机命令:go

按下转弯键时,ROV将进行拐弯,也就是改变当前的航向。

按下前进键时,ROV将进行前进后退。

按下升降键时,ROV将进行上升下潜。

发送电机命令时,ROV的三个电机按照给定的转速转动。

1.2 实现

首先,电机命令是用来调试的,用户如果用的话,也是在使用ROV之前,对ROV的三个电机进行检查,在使用过程中,不会发送电机命令,因此我们在逻辑上不需要考虑电机命令。接下来我们的分析只对拐弯命令,前进命令,升降命令进行讨论。

还有一点需要说明,根据档位的不同,发送的参数值的比例也不同,这也不在接下来的讨论范围之内。我们的讨论只限定在固定档位上。

流程图为:

手动控制流程图

1.2.1 单一拐弯命令

当按下拐弯键后,发送拐弯命令,根据其后带的参数乘以比例系数得出一值trg_yaw,对左右电机分别加上减去该值(一加一减),实现拐弯。当松开拐弯键后,发送拐弯命令,其后带的参数为0,所以松开后,对左右电机加减的值也为0,此时ROV停止拐弯。

1.2.2 单一前进命令

当按下前进键后,发送前进命令,根据其后带的参数乘以比例系数得出一直trg_thro,对左右电机分别加上该值(全加),实现前进或后退。当松开前进键后,发送前进命令,其后带的参数为0,所以松开后,对左右电机加减的值也为0,此时ROV停止前进后退。

1.2.3 单一升降命令

当按下升降键后,发送升降命令,根据其后带的参数乘以比例系数得出一直trg_lift,对垂直电机加上减去该值,实现升或降。当松开升降键后,发送升降命令,其后带的参数为0,所以松开后,对垂直电机加减的值也为0,此时ROV停止前进升降(0浮力前提下)。

1.2.4 拐弯加前进命令

因为拐弯和前进命令都是控制的左右电机,而升降命令是控制的垂直电机。所以我们在手动控制中的组合控制下,只需要考虑拐弯加前进命令。

这里我们采用的逻辑是,将yaw和thro放到同一个命令处理流程中,为或的关系,最后统一控制左右推进器的值。当收到yaw命令时,更新trg_yaw的值,当收到thro命令时,更新trg_thro的值,这样在两个命令处理完后更新左右推进器的值。实现前进或后退的同时实现拐弯。

期间,停止拐弯命令时,发送的yaw参数为0,则trg_yaw为0,最后的更新只更新trg_thro值;停止前进命令时,发送的thro参数为0,则trg_thro为0,最后的更新只更新trg_yaw值。

2、纯自动控制

2.1 简介

自动控制分为:

  • 航向保持
  • 深度保持
  • 航速保持

航向保持

通过点击界面航向保持,来实现打开或关闭航向保持。红色为打开,白色为关闭。通过点击开关打开航向保持,是保持当前的航向,另外也可以指定要保持的航向。

为了便于下面的讨论,我们定一个标志位headingHoldEnable。

深度保持

通过点击界面深度保持,来实现打开或关闭深度保持。红色为打开,白色为关闭。通过点击开关打开深度保持,是保持当前的深度,另外也可以指定要保持的深度。

为了便于下面的讨论,我们定一个标志位depthHoldEnable。

航速保持

通过点击界面航速保持,来实现打开或关闭航速保持。红色为打开,白色为关闭。通过点击开关打开航速保持,是保持当前的航速,另外也可以指定要保持的航速。

为了便于下面的讨论,我们定一个标志位speedHoldEnable。

2.2 实现

2.2.1 单一航向保持

当从界面收到航向保持开关命令holdHeading_toggle时,将headingHoldEnable设置成之前相反的状态,即false变为true,true变为false。

2.2.2 单一航速保持

2.2.3 单一深度保持

2.2.4 航向和航速同时保持

3、自动控制时加入手动控制

用户在什么时候回使用自动控制时再手动控制:

  1. 希望改变当前的期望航向
  2. 希望改变当前的期望深度
  3. 希望改变当前的期望航速

  4. 航向保持时,收到拐弯命令,改变当前保持的航向值。

  5. 深度保持时,收到升降命令,改变当前保持的深度值。
  6. 航速保持时,收到前进命令,改变当前保持的航速值。
  7. 航向保持+航速保持时,收到拐弯命令,改变当前保持的航向值,当前保持的航速值不变。
  8. 航向保持+航速保持时,收到前进命令,改变当前保持的航速值,当前保持的航向值不变。

因此,在自动控制时同时加入手动控制,我们应该做的是改变期望航向,期望深度,期望航速。

3.1 方案一

在自动控制的时候收到手动控制命令,改变目标值。具体为:

  1. 航向保持时,收到拐弯命令,将目标航向加减一定的角度,如4度。
  2. 深度保持时,收到升降命令,将目标深度加减一定的深度,如4cm。
  3. 速度保持时,收到前进命令,将目标转速加减一定的转速,如20转。

3.1.1 缺点:

手动控制的拐弯命令,升降命令,前进命令,一直按着时,也只是发送一次命令。也就是航向保持时,如果用户想要改变大于4度的航向时,需要按多次拐弯命令。需增加学习成本。

3.1.2 实现方法

具体来看,我们对航向保持,深度保持,航速保持,设置三个标志位,为后面讨论方便,暂定为headingHoldEnable,depthHoldEnable,speedHoldEnbale。

目前为航向保持时:

此时,headingHoldEnable为true。

当此时收到拐弯命令(yaw)时,在yaw命令的执行中,加入对headingHoldEnable的判断,如果为false,则执行普通的手动控制流程,如果为true时,则执行对目标航向加4度。此时因为headingHoldEnbale为true,因此在循环中,我们还是可以走航向保持的流程。

当此时收到前进命令(thro)时,

当收到手动控制命令,前进命令(thro),拐弯命令(yaw),升降命令(lift)后,我们需要判断标志位,根据保持的开关,来执行不同的命令。

航向保持时:航向保持标志位_depthHoldEnbale为true。当收到拐弯命令(yaw)后,判断_depthHoldEnbale状态,若为true,(则对目标航向加4度不应该加4度,因为yaw命令只发送一次,因此应该是对航向差),不若为false,则执行普通的拐弯命令。

1 0
原创粉丝点击