实现无人机测量脚本#
从 https://github.com/microsoft/AirSim/wiki/Implementing-a-Drone-Survey-script 移至此页面。
是否曾想捕获某个位置的许多俯视图片?Python API 使这变得非常简单。请参阅此处提供的代码。
假设我们想要以下变量:
变量 | 描述 |
---|---|
boxsize(箱体尺寸) | 要测量的方形箱体的总尺寸。 |
stripewidth(条带宽度) | 飞行航线的间隔距离,这可能取决于相机镜头类型,例如。 |
altitude(高度) | 进行测量的飞行高度。 |
speed(速度) | 测量的速度可能取决于您的相机拍摄照片的速度。 |
因此,有了这些变量,我们可以使用以下代码计算一个方形路径箱体:
path = []
distance = 0
while x < self.boxsize:
distance += self.boxsize
path.append(Vector3r(x, self.boxsize, z))
x += self.stripewidth
distance += self.stripewidth
path.append(Vector3r(x, self.boxsize, z))
distance += self.boxsize
path.append(Vector3r(x, -self.boxsize, z))
x += self.stripewidth
distance += self.stripewidth
path.append(Vector3r(x, -self.boxsize, z))
distance += self.boxsize
假设我们从箱体的一个角开始,将 x 增加条带宽度,然后沿 y 轴全尺寸从 -boxsize
飞到 +boxsize
。因此在这种情况下,boxsize
是我们将覆盖的实际箱体尺寸的一半。
一旦我们有了这个 Vector3r 对象列表,我们就可以通过以下调用非常简单地飞行此路径:
result = self.client.moveOnPath(path, self.velocity, trip_time, DrivetrainType.ForwardOnly,
YawMode(False,0), lookahead, 1)
我们可以通过将路径距离除以飞行速度来计算一个合适的 trip_time
超时。
为了平滑路径插值所需的 lookahead
可以通过 self.velocity + (self.velocity/2)
从速度计算出来。预见性越多,转弯越平滑。这就是为什么你在截图中看到每个飞行航线的末端都是平滑转弯而不是方形模式的原因。这也可以使你的相机拍摄的视频更流畅。
就是这样,很简单,对吧?
当然,你现在可以为此添加更多智能,让它避开地图上的已知障碍物,让它爬上爬下山坡以便你可以测量斜坡等等。有很多乐趣可以体验。