import airsim
# connect to the AirSim simulator
client = airsim.MultirotorClient()
client.confirmConnection()
# get control
client.enableApiControl(True)
# unlock
client.armDisarm(True)
# Async methods returns Future. Call join() to wait for task to complete.
client.takeoffAsync().join()
client.landAsync().join()
# lock
client.armDisarm(False)
# release control
client.enableApiControl(False)
client = airsim.MultirotorClient(),连接AirSim函数值给client,
client.confirmConnection()确认是否连接成功,成功之后会print
Connected!
Client Ver:1 (Min Req: 1), Server Ver:1 (Min Req: 1)
可以用来判断AirSIm连接是否成功。
# get control
client.enableApiControl(True)
# release control
client.enableApiControl(False)
API权限获取和释放,默认没有API权限,是在遥控器手柄的。
关于isApiControlEnabled 现在还没弄明白怎么个用法,好像Airsim库里也没有定义它
官方这么说
client.armDisarm(True) # 解锁
client.armDisarm(False) # 上锁
解锁控制旋翼转动,上锁停转。
client.takeoffAsync().join() # 起飞
client.landAsync().join() # 降落
Asyn “异步接口”,一般以Asyn为结尾的函数会立即返回,就算任务没有执行完毕,函数也会立即返回值,那么程序就可以接着执行下去不用等待,这里如果就会导致无人机还没起飞就直接降落,如果需要等待,在函数后边加.join()即可。
import airsim
import time
# connect to the AirSim simulator
client = airsim.MultirotorClient()
client.enableApiControl(True) # get control
client.armDisarm(True) # unlock
client.takeoffAsync().join() # takeoff
# square flight
client.moveToZAsync(-3, 1).join() # 上升到3m高度
client.moveToPositionAsync(5, 0, -3, 1).join() # 飞到(5,0)点坐标
client.moveToPositionAsync(5, 5, -3, 1).join() # 飞到(5,5)点坐标
client.moveToPositionAsync(0, 5, -3, 1).join() # 飞到(0,5)点坐标
client.moveToPositionAsync(0, 0, -3, 1).join() # 回到(0,0)点坐标
client.landAsync().join() # land
client.armDisarm(False) # lock
client.enableApiControl(False) # release control
moveToZAsync(z, velocity) 是高度控制 API
client.moveToZAsync(-3, 1).join()是1m/s飞到3m高度
moveToPositionAsync(x, y, z, velocity) 是水平位置控制 API
def moveToPositionAsync(
self,
x,
y,
z,
velocity,
timeout_sec = 3e+38,
drivetrain = DrivetrainType.MaxDegreeOfFreedom,
yaw_mode = YawMode(),
lookahead = -1,
adaptive_lookahead = 1,
vehicle_name = ''):
return self.client.call_async('moveToPosition', x, y, z, velocity, timeout_sec, drivetrain, yaw_mode, lookahead, adaptive_lookahead, vehicle_name)
timeout_sec超时时间,默认3e+38,
drivetrain是飞行朝向模式,
class DrivetrainType:
MaxDegreeOfFreedom = 0
ForwardOnly = 1
yaw_mode是偏航角模式
class YawMode(MsgpackMixin):
is_rate = True
yaw_or_rate = 0.0
def __init__(self, is_rate = True, yaw_or_rate = 0.0):
self.is_rate = is_rate
self.yaw_or_rate = yaw_or_rate
类 YawMode有两个属性is_rate和yaw_or_rate,两个都要设置,但是要注意不能和前边drivetrain参数冲突,MaxDegreeOfFreedom是自己设置飞行朝向模式,这时候可以自由选择YawMode的两个参数,ForwardOnly时始终根据速度方向偏航,此时YawMode的第一个参数is_rate只能是False,意思是选择了速度方向偏航,就不能再选择按照固定的角速度偏转,否则无法成功飞行。