【AirSim】05.四旋翼的简单动作指令

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

为实现四旋翼在AirSim仿真环境中的自主飞行,需要掌握通过程序API控制四旋翼执行前进、升降、转向等基本动作的方法。本文即为探索该方法的过程总结。

一、AirSim提供了哪些和移动有关的API?

通过查看源代码client.py,发现提供了大量的API用于四旋翼的控制,如图:
在这里插入图片描述
但是,源代码中既没有函数的实现,也没有给出相对详细的注释。因此,现在的问题转化为:明确这些APIs的原理,学会使用这些APIs。

其中,moveByVelocity()有一些简短的参数说明,如下:

    def moveByVelocityAsync(self, vx, vy, vz, duration, drivetrain = DrivetrainType.MaxDegreeOfFreedom, yaw_mode = YawMode(), vehicle_name = ''):
        """
        Args: 参数:
            vx (float): desired velocity in world (NED) X axis 世界坐标系下x轴方向,期望的速度
            vy (float): desired velocity in world (NED) Y axis 世界坐标系下y轴方向,期望的速度
            vz (float): desired velocity in world (NED) Z axis 世界坐标系下z轴方向,期望的速度
            duration (float): Desired amount of time (seconds), to send this command for 发送该指令 期望的时间?
            drivetrain (DrivetrainType, optional):
            yaw_mode (YawMode, optional):
            vehicle_name (str, optional): Name of the multirotor to send this command to

        Returns:
            msgpackrpc.future.Future: future. call .join() to wait for method to finish. Example: client.METHOD().join()
        """
        return self.client.call_async('moveByVelocity', vx, vy, vz, duration, drivetrain, yaw_mode, vehicle_name)

很正常地,就会有个疑问,moveByVelocityZ()moveByVelocity()有什么区别呢?
Issue #880中,找到了答案,二者的主要区别在于:moveByVelocityZ()将海拔保持在固定的Z坐标上,即具有高度保持的能力。

PS. takeoff()的注释:

    def takeoffAsync(self, timeout_sec = 20, vehicle_name = ''):
        """
        Takeoff vehicle to 3m above ground. Vehicle should not be moving when this API is used 四旋翼飞到距离地面3m的高度。当该API使用的时候,四旋翼不应该移动。

        Args:
            timeout_sec (int, optional): Timeout for the vehicle to reach desired altitude
            vehicle_name (str, optional): Name of the vehicle to send this command to

        Returns:
            msgpackrpc.future.Future: future. call .join() to wait for method to finish. Example: client.METHOD().join()
        """
        return self.client.call_async('takeoff', timeout_sec, vehicle_name)

在issue中搜索moveByVelocityZ
controlling via Roll, pitch, yaw, throttle inputs
How to control the drone accurately?
write a function that will move the drone w.r.t its own referential?
Yaw and move continuously

二、用好moveByVelocityZ()

例子:

start = client.getMultirotorState().kinematics_estimated.position

vx = 3; vy = 3; z = start.z_val; duration = 6  # start.z_val
client.moveByVelocityZAsync(vx, vy, z, duration,airsim.DrivetrainType.ForwardOnly,airsim.YawMode(False,0.0)).join() # 2020-12-02 如何保持固定高度飞行?UE4中的世界坐标系是怎样的?

首先获取四旋翼的当前位置(用来设置z值),然后定义vxvyzduration,最后调用函数。其中,默认参数使用了ForwardOnlyYawMode(False,0.0)

总结

目前实现的四旋翼的移动控制还非常简单,只做简单的了解,后续结合具体路径进一步探讨移动控制。(20201205)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Matlab是一种功能强大的编程语言和环境,广泛用于科学计算、数据处理和工程仿真等领域。在Matlab中,可以使用Simulink模块进行系统建模和仿真。关于四旋翼无人机的建模和仿真,以下是一个参考过程: 1. 坐标系建立:在建模四旋翼无人机之前,需要建立适当的坐标系。常用的坐标系包括全局坐标系和机体坐标系。全局坐标系通常用于描述地面和环境,而机体坐标系用于描述无人机的运动和姿态。 2. 四旋翼无人机的建模:建立四旋翼无人机的模型是仿真的关键步骤。可以使用刚体动力学方程来描述四旋翼无人机的运动。方程包括平衡力、力矩和运动方程等。可以使用传统的欧拉角表示无人机的姿态,也可以使用四元数等其他表示方法。 3. 传感器建模:四旋翼无人机通常搭载多种传感器,如加速度计、陀螺仪和磁力计等。在建模过程中,需要考虑传感器的测量误差和噪声,并将其纳入系统模型中。 4. 控制系统设计:为了实现期望的飞行任务,需要设计适当的控制系统。常见的控制方法包括PID控制、模糊控制和模型预测控制等。控制系统可以通过调整参数来达到期望的飞行性能。 5. 仿真和验证:在建立完四旋翼无人机的模型和控制系统后,可以使用Matlab的Simulink模块进行仿真。通过对系统的各种输入和环境条件进行仿真,可以验证系统的性能和稳定性。 总结来说,建模和仿真四旋翼无人机的过程包括坐标系建立、建模、传感器建模、控制系统设计和仿真验证等步骤。这个过程可以帮助研究人员和工程师更好地理解和优化四旋翼无人机的飞行性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值