首页 > 解决方案 > 使用 Python 在 Microsoft AirSim 上进行线程处理会引发类型错误

问题描述

注意:我最初在机器人论坛上发布了这个问题,但是,由于我没有收到任何答案,所以我也想在这里发布。实际上,我相信我收到的错误与我尝试使用我的线程有关。

希望每个人都做得很好。

我刚刚开始使用 AirSim 进行一些计算机视觉模拟。现在我正在尝试使用 Python 实现用于导航目的的线程。

作为起点,我想创建 2 个线程:其中一个将打印四轴飞行器的当前位置,而另一个将发送 moveOnPathAsync 命令。

这是我的代码:

import threading
from airsim.types import YawMode
from msgpackrpc.client import Client
import airsim
import time

client = airsim.MultirotorClient()
client.reset()
client.confirmConnection()
client.enableApiControl(True)

def logState():
    print(client.simGetGroundTruthKinematics().position)

def move():
    client.moveOnPath([airsim.Vector3r(125,0,-5),
                        airsim.Vector3r(125,-60,-5),
                        airsim.Vector3r(125,-90,-5),
                        airsim.Vector3r(125,0,-5)],
                12, 1000,
                airsim.DrivetrainType.ForwardOnly, airsim.YawMode(True,0), 20, 1).join()  


wind = airsim.Vector3r(-10, -10, -10)
client.simSetWind(wind)

camera_pose = airsim.Pose(airsim.Vector3r(0, 0, 0), airsim.to_quaternion(-1.57, 0, 0))
client.simSetCameraPose(0, camera_pose)

client.armDisarm(True)

print("Araç kalkışa hazırlanıyor...")
client.takeoffAsync().join()

time.sleep(0.2)

t2 = threading.Thread(target=move, args=[client])
t1 = threading.Thread(target=logState, args=[client])

t2.start()
t1.start()

但是,当我运行此脚本时,我的两个线程都收到错误“TypeError:move() / logState() 采用 0 个位置参数,但给出了 1 个”。我错过了什么?

我还需要问最后一件事。我可以创建一个使用异步方法进行模拟的线程吗?我读到有人说创建包含异步方法的线程可能会有问题。

标签: typeerrorpython-multithreadingairsim

解决方案


推荐阅读