返回

航拍世界妙趣无穷:四旋翼丝滑“绕⼋”⾃主轨迹运动

人工智能

在⽆⼈机空中过程中,会不会觉得简单的指点⻜⾏过于简单,⻜⾏轨迹过于直板。 话不多说,先看视频效果:

[图片]

现在,开始讲解内容:

在 本⽂中,我们将探索如何让无人机执行绕⼋⻜⾏。绕⼋⻜⾏是一种⽆⼈机飞行的方式,它让⽆⼈机围绕一个点飞行,形成一个八字形的轨迹。这是一种非常适合于拍摄视频的⻜⾏方式,因为它可以让摄像机捕捉到不同的视角。

要让⽆⼈机执行绕⼋⻜⾏,我们需要使⽤ mavros 中的 set_position_target_local_ned() 函数。这个函数允许我们指定⽆⼈机的目标位置和速度。我们可以通过以下代码来实现:

# 导入必要的库
import rospy
from mavros_msgs.srv import CommandTOL
from mavros_msgs.msg import PositionTarget
from geometry_msgs.msg import Point, Twist, Vector3

# 初始化ROS节点
rospy.init_node('绕八字飞行')

# 创建一个发布者对象,用于发布目标位置和速度
target_pub = rospy.Publisher('/mavros/setpoint_raw/local', PositionTarget, queue_size=10)

# 设置目标位置和速度
target = PositionTarget()
target.coordinate_frame = PositionTarget.FRAME_LOCAL_NED
target.type_mask = PositionTarget.IGNORE_VX + PositionTarget.IGNORE_VY + PositionTarget.IGNORE_VZ \
                  + PositionTarget.IGNORE_AFX + PositionTarget.IGNORE_AFY + PositionTarget.IGNORE_AFZ \
                  + PositionTarget.FORCE

# 设置目标位置
target.position.x = 0.0
target.position.y = 0.0
target.position.z = 2.0

# 设置目标速度
target.velocity.x = 1.0
target.velocity.y = 1.0
target.velocity.z = 0.0

# 开始飞行
rospy.wait_for_service('/mavros/cmd/takeoff')
takeoff_client = rospy.ServiceProxy('/mavros/cmd/takeoff', CommandTOL)
takeoff_client(0, 0, 0, 0, 0)

# 循环发送目标位置和速度
while not rospy.is_shutdown():
    target_pub.publish(target)
    rospy.sleep(0.1)

# 降落
rospy.wait_for_service('/mavros/cmd/land')
land_client = rospy.ServiceProxy('/mavros/cmd/land', CommandTOL)
land_client(0, 0, 0, 0, 0)

运行此代码后,⽆⼈机将开始执行绕⼋⻜⾏。您可以使⽤地面站或其他软件来控制⽆⼈机的⻜⾏。

绕⼋⻜⾏是一种非常适合于拍摄视频的⻜⾏方式。它可以让摄像机捕捉到不同的视角,从而制作出更加丰富多彩的视频。如果您想拍摄⼀段精彩的航拍视频,不妨尝试⼀下绕⼋⻜⾏。