AirSim 自动驾驶仿真 (7) - AirSim 多载具

AirSim 自动驾驶仿真 (7) - AirSim 多载具

从 release 1.2 开始, AirSim 完全能够支持多载具. 这能允许你更简单的创建多个载具并用 APIs 来控制它们.

创建多个载具 Creating Multiple Vehicles

settings.json 可以很简单地对它们设定. Vehicles 元素允许你指定你想创建地载具列表, 包括初始位置和方向.位置是基于 SI 单位下的原点位于 Unreal 环境下玩家出生点的 NED 坐标系.方向基于角度制的偏航、俯仰和翻转.

创建多辆汽车 Creating Multiple Cars

{
  "SettingsVersion": 1.2,
  "SimMode": "Car",

  "Vehicles": {
    "Car1": {
      "VehicleType": "PhysXCar",
      "X": 4,
      "Y": 0,
      "Z": -2
    },
    "Car2": {
      "VehicleType": "PhysXCar",
      "X": -4,
      "Y": 0,
      "Z": -2,
      "Yaw": 90
    }
  }
}

创建多个飞行器 Creating Multiple Drones

{
  "SettingsVersion": 1.2,
  "SimMode": "Multirotor",

  "Vehicles": {
    "Drone1": {
      "VehicleType": "SimpleFlight",
      "X": 4,
      "Y": 0,
      "Z": -2,
      "Yaw": -180
    },
    "Drone2": {
      "VehicleType": "SimpleFlight",
      "X": 8,
      "Y": 0,
      "Z": -2
    }
  }
}

多载具的 APIs 使用 Using APIs for Multiple Vehicles

从 AirSim 1.2 以来的新 APIs 允许你指定 vehicle_name. 这个名称和 json settings 的键值对应 (举个例子, 上述的 Car1 或 Drone2 ).

Example code for cars

Example code for multirotors

PS: 这里提供一份 C++ 的实现

  using namespace msr::airlib;
  msr::airlib::CarRpcLibClient client;

  client.confirmConnection();
  client.enableApiControl(true, "Car1");
  client.enableApiControl(true, "Car2");

  auto car_controls1 = client.getCarControls("Car1");
  auto car_controls2 = client.getCarControls("Car2");

  for (int i = 0; i < 3; ++i) {
    // get state of the car
    auto car_state1 = client.getCarState("Car1");
    std::cout << "Car1: Speed " << car_state1.speed << ", Gear " << car_state1.gear << std::endl;

    auto car_state2 = client.getCarState("Car2");
    std::cout << "Car1: Speed " << car_state2.speed << ", Gear " << car_state2.gear << std::endl;

    // go forward
    car_controls1.throttle = 0.5;
    car_controls2.throttle = 0.5;
    client.setCarControls(car_controls1, "Car1");
    std::cout << "Car1: Go Forward.\n";

    car_controls2.throttle = 0.5;
    car_controls2.steering = -0.5;
    client.setCarControls(car_controls2, "Car2");
    std::cout << "Car2: Go Forward.\n";

    std::this_thread::sleep_for(std::chrono::seconds(3));

    // apply breaks
    car_controls1.brake = 1;
    client.setCarControls(car_controls1, "Car1");
    std::cout << "Car1: Apply break\n";
    car_controls1.brake = 0;  // remove break

    car_controls2.brake = 1;
    client.setCarControls(car_controls2, "Car2");
    std::cout << "Car2: Apply break\n";
    car_controls2.brake = 0;  // remove break

    std::this_thread::sleep_for(std::chrono::seconds(3));  // let car drive a bit

    const std::vector<ImageCaptureBase::ImageResponse>& response1 =
        client.simGetImages({ImageCaptureBase::ImageRequest("0", ImageCaptureBase::ImageType::DepthVis),
                             ImageCaptureBase::ImageRequest("1", ImageCaptureBase::ImageType::Scene, false, false)},
                            "Car1");

    std::cout << "Car1: Retrieved images: " << response1.size() << std::endl;

    const std::vector<ImageCaptureBase::ImageResponse>& response2 =
        client.simGetImages({ImageCaptureBase::ImageRequest("0", ImageCaptureBase::ImageType::Segmentation),
                             ImageCaptureBase::ImageRequest("1", ImageCaptureBase::ImageType::Scene, false, false)},
                            "Car2");

    std::cout << "Car2: Retrieved images: " << response2.size() << std::endl;

    cv::Mat img_mat10 = cv::imdecode(response1.at(0).image_data_uint8, cv::IMREAD_GRAYSCALE);
    cv::imshow("cat1_multi:DepthVis", img_mat10);
    cv::waitKey(5);

    cv::Mat img_mat11(response1.at(1).height, response1.at(1).width, CV_8UC3,
                      (void*)response1.at(1).image_data_uint8.data());
    cv::imshow("cat1_multi:Scene", img_mat11);
    cv::waitKey(5);

    cv::Mat img_mat20 = cv::imdecode(response1.at(0).image_data_uint8, cv::IMREAD_UNCHANGED);
    cv::imshow("cat2_multi:DepthVis", img_mat10);
    cv::waitKey(5);

    cv::Mat img_mat21(response2.at(1).height, response2.at(1).width, CV_8UC3,
                      (void*)response2.at(1).image_data_uint8.data());
    cv::imshow("cat2_multi:Scene", img_mat21);
    cv::waitKey(5);
  }

  client.reset();
  client.enableApiControl(false);
  return 0;

Demo

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LPyhIgMh-1592320500937)(images/demo_multi_vehicles.png)]

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
毕业设计:实现了UE4和airsim环境下无人机自主导航和目标跟踪的强化学习算法 毕业设计:实现了UE4和airsim环境下无人机自主导航和目标跟踪的强化学习算法 毕业设计:实现了UE4和airsim环境下无人机自主导航和目标跟踪的强化学习算法 毕业设计:实现了UE4和airsim环境下无人机自主导航和目标跟踪的强化学习算法 毕业设计:实现了UE4和airsim环境下无人机自主导航和目标跟踪的强化学习算法 毕业设计:实现了UE4和airsim环境下无人机自主导航和目标跟踪的强化学习算法 毕业设计:实现了UE4和airsim环境下无人机自主导航和目标跟踪的强化学习算法 毕业设计:实现了UE4和airsim环境下无人机自主导航和目标跟踪的强化学习算法 毕业设计:实现了UE4和airsim环境下无人机自主导航和目标跟踪的强化学习算法 毕业设计:实现了UE4和airsim环境下无人机自主导航和目标跟踪的强化学习算法 毕业设计:实现了UE4和airsim环境下无人机自主导航和目标跟踪的强化学习算法 毕业设计:实现了UE4和airsim环境下无人机自主导航和目标跟踪的强化学习算法 毕业设计:实现了UE4和airsim环境下无人机自主导航和目标跟踪的强化学习算法 毕业设计:实现了UE4和airsim环境下无人机自主导航和目标跟踪的强化学习算法 毕业设计:实现了UE4和airsim环境下无人机自主导航和目标跟踪的强化学习算法 毕业设计:实现了UE4和airsim环境下无人机自主导航和目标跟踪的强化学习算法 毕业设计:实现了UE4和airsim环境下无人机自主导航和目标跟踪的强化学习算法 毕业设计:实现了UE4和airsim环境下无人机自主导航和目标跟踪的强化学习算法
### 回答1: AirSim是一款开源的虚拟现实模拟器,可以用来模拟无人机、自动驾驶汽车和其他载的行为。要使用AirSim,您需要安装相应的软件和运行时环境。 1. 首先,您需要在计算机上安装Microsoft Visual Studio和CMake。这是AirSim所必需的开发工,可以帮助您编译和运行AirSim代码。 2. 然后,您需要安装Unreal Engine 4(UE4)。AirSim使用UE4作为渲染引擎,可以帮助您创建高质量的3D模拟环境。 3. 接下来,您需要下载AirSim源代码。您可以在GitHub上找到AirSim的代码库,并使用git工将代码克隆到本地计算机。 4. 最后,您需要打开Visual Studio,打开AirSim项目,并使用CMake配置和生成项目。一旦项目配置完成,您就可以在Visual Studio中运行AirSim。 希望这些步骤能帮助您开始使用AirSim。如果您在安装和配置过程中遇到问题,可以尝试参考AirSim文档或在网上搜索解决方案。 ### 回答2: 要开始使用AirSim,首先需要按照以下步骤进行设置和配置: 1.下载并安装AirSim:在AirSim的官方GitHub库或其官方网站上下载最新版本的AirSim安装程序,并按照安装向导的指示完成安装过程。 2.选择模拟器:AirSim支持多个模拟器,例如Unity和UE4。您可以根据自己的需求选择适合您的模拟器。 3.选择仿真环境:AirSim还提供了不同的仿真环境,如城市环境、森林环境等。您可以根据您的应用场景选择适合的仿真环境。 4.配置设置:在开始使用AirSim之前,您需要根据自己的需求进行一些配置设置。例如,您可以设置图像分辨率、仿真车辆的控制方式等。 5.编写代码:一旦AirSim设置完成,您可以使用各种编程语言(如Python、C++等)编写代码来与AirSim进行交互。您可以使用AirSim提供的API来控制车辆、获取传感器数据等。 6.运行代码:在完成代码编写后,您可以运行您的代码,与仿真环境进行交互。您可以控制车辆的行为、收集传感器数据等。 7.调试和优化:进行调试和优化是使用AirSim的重要一步。您可以根据运行过程中的错误和性能问题进行调试和优化,以获得更好的仿真体验。 总结起来,要开始使用AirSim,您需要下载和安装AirSim,选择合适的模拟器和仿真环境,进行配置设置,编写代码并运行。在使用过程中,您可以根据自己的需求进行调试和优化,以获得更好的使用体验。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值