Airsim умер, да здравствует GRID

в 13:15, , рубрики: python, pytorch, беспилотники, дроны, ИИ, ии-модель, робототехника
Airsim умер, да здравствует GRID - 1

Проблема, с которой часто встречаются разработчики, в том числе и компании, заключается в обучении дронов и роботов. До недавнего времени эту проблему позволяла решить Aerial Informatics and Robotics Platform (AirSim), и данная статья неплохо описывает это решение. Однако в 2023 году компания Microsoft объявила о закрытии данного проекта и сокращении штата, который им занимался.

Но надежда есть, и появилась компания, которая продолжила плодотворные традиции AirSim. Теперь это целая система, и называется она Scaled Foundations. Команда поняла современные тренды и не стала останавливаться на беспилотниках, а начала заниматься практически всеми возможными видами умных помощников, и соответственно моделировать для них среду, максимально приближенную к реальной.

Scaled Foundations предлагает более широкий спектр возможностей, чем AirSim, включая симуляцию различных сред, таких как города, здания и природные ландшафты. Это позволяет разработчикам тестировать и обучать своих роботов и дронов в более реалистичных условиях, что может привести к значительному улучшению их производительности и эффективности.

Кроме того, Scaled Foundations предоставляет разработчикам доступ к большому количеству инструментов и ресурсов, включая библиотеки и фреймворки, которые могут помочь им создать более сложные и реалистичные симуляции. Это может быть особенно полезно для компаний, которые работают над разработкой автономных транспортных средств, дронов и других типов роботов, которые требуют высокого уровня точности и надежности.

В целом, Scaled Foundations представляет собой перспективное решение для разработчиков, которым необходима симуляция и тестирование их роботов и дронов в реалистичной среде. Это развитие является важным шагом на пути к созданию более совершенных и автономных систем, которые могут быть эффективно использованы в различных областях, включая транспорт, логистику, строительство и другие, где точность и надежность имеют первостепенное значение.

Компания предлагает два решения: для идейных(Open Grid) и для платёжоспособных(Grid Enterprice).Разница в том что Open Grid запускается облачно и имеет определённые виды роботов, дронов, локаций, а платная версия позволяет разворачивать локально и кроме того использовать ещё дополнительные функции для более глубокого обучения и интеграции в проект.Как описывает компания бесплатная версия для небольшой команды разработчиков, а Grid Enterprice для стартапов, компаний(что и так понятно из названия)

Рассмотрим функционал Open Grid

Сначала регистрируемся на сайте, не переживайте что долго не приходит подтверждение, это нормально.

Airsim умер, да здравствует GRID - 2

Переходим в главное меню и здесь у нас появляется выбор.

Airsim умер, да здравствует GRID - 3
  • Robot: Здесь вы выбирайте и настраивайте роботизированную платформу.

  • Scene: Выбираете и настраиваете виртуальную среду, максимально приближенную к реальной.Соответственно как вы можете заметить здесь есть примерные тест-кейсы которые позволяют поместить робота в боевую среду.

  • Sensors: Настраивайте параметры камеры, чтобы получить желаемые виды и параметры для моделирования и настройте датчики вашего робота для обнаружения и взаимодействия в данной среде.

  • AI models: Предварительно настройте модели искусственного интеллекта, которые будут использоваться в моделировании.

Airsim умер, да здравствует GRID - 4

Перейдём к практике

Заполним нужные параметры и переходим уже в "среду разработки"

  • Инициализируйте среду: Начните с запуска шаблонного кода для инициализации API Airgen и загрузки необходимых весов для модели Grounded SAM.

Airsim умер, да здравствует GRID - 5
  • Управление автомобилем: Используйте API setCarTargetSpeed() (документация CarClient) для перемещения автомобиля вперед, а затем захватите изображения с помощью API getImages(). Следующий блок кода демонстрирует, как расположить автомобиль и захватить изображение.

Airsim умер, да здравствует GRID - 6

Сегментация изображений с помощью Grounded SAM:

  • Сегментация дороги: Примените модель Grounded SAM для сегментирования дороги на только что полученном изображении. Визуализируйте результат с помощью модуля повторного выполнения. Мы выполним приведенный ниже код для сегментирования дороги.

    road = seg_gsam_0.run(image[0][0], "road")

Airsim умер, да здравствует GRID - 7
  • Альтернативный вид камеры: Попробуйте захватить и сегментировать изображение с камеры "back_center", чтобы посмотреть на ситуацию с другой стороны. Следующий блок кода захватывает изображение с задней камеры.

    image_new = client.getImages("back_center", [0])
    rr.log("Car", rr.Image(image_new[0][0]))

    Airsim умер, да здравствует GRID - 8

Теперь давайте сегментируем изображение, полученное с задней камеры.

car = seg_gsam_0.run(image_new[0][0], "car")

Airsim умер, да здравствует GRID - 9

Навигация по сцене

  • Переместим на определенную позицию: Переместим автомобиль в положение x = -120 метров с помощью следующего кода.

    client.setCarTargetSpeed(5)
    while True:
    if client.simGetVehiclePose().position.x_val <= -120:
    client.setCarTargetSpeed(0)
    break
    print(client.simGetVehiclePose().position)

  • Выполнение поворота влево: Чтобы выполнить левый поворот, установите рулевое управление на 1,0 для резкого поворота, а затем медленно перемещайте автомобиль для завершения маневра.

    controls = client.getCarControls()
    controls.is_manual_gear = False
    controls.steering = 1.0
    client.setCarControls(controls)
    client.setCarTargetSpeed(2.1)
    time.sleep(3)
    client.setCarTargetSpeed(0)

  • Вернитесь к прямолинейному движению: Сбросьте значение рулевого управления до 0,0, чтобы возобновить прямолинейное движение.

    controls.steering = 0.0
    client.setCarControls(controls)
    client.setCarTargetSpeed(2)
    time.sleep(3)
    client.setCarTargetSpeed(0)

Работа с данными LiDAR

  • Создаем объект точек: Используйте API getLidardata() (документация LiDAR) для получения данных LiDAR. В приведенном ниже фрагменте кода показано, как преобразовать исходные данные в список точек с соответствующими преобразованиями координат.

def get_lidar_data(client):
  lidar_data = client.getLidarData()
  if len(lidar_data.point_cloud) < 3:
      print("No points received from Lidar")
  else:
      points = np.array(lidar_data.point_cloud, dtype=np.float32)
      points = np.reshape(points, (int(points.shape[0] / 3), 3))
      points_xyz = np.zeros_like(points)
      points_xyz[:, 0] = points[:, 0]
      points_xyz[:, 1] = points[:, 1]
      points_xyz[:, 2] = -points[:, 2] + 1
      print("Got LiDAR Data")
      return points_xyz
  • Визуализируем: С помощью Matplotlib расставьте данные облака точек LiDAR и сохраните график в виде изображения. Вы можете найти каталог сессии через переменную GRID_USER_SESSION_BLOB_DIR. Ниже показано, как будет выглядеть вкладка хранилища после сохранения данных LiDAR.

%matplotlib inline
import os
from grid import GRID_USER_SESSION_BLOB_DIR
import numpy as np
import matplotlib.pyplot as plt
points = get_lidar_data(client)
fig = plt.figure()
ax = fig.add_subplot(projection='3d')
for point in points:
    ax.scatter(point[0], point[1], point[2])
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')
save_path = os.path.join(GRID_USER_SESSION_BLOB_DIR, "pcl.png")
plt.savefig(save_path, bbox_inches='tight')
print("Saved!")
Airsim умер, да здравствует GRID - 10
Сохранённое облако выглядит примерно так.

Сохранённое облако выглядит примерно так.

Бонус! Компания будет проводить мастер класс 17 марта 2025 на котором покажут как разрабатывать реальные решения.Рекомендую!Будет очень полезно если вы только вкатывайтесь.

Подводя итоги

Итак, в данной вводной статье моя задача была показать вам что есть такое мощное и практичное решение которое поможет разработчикам сэкономить время и повысить эффективность работы.На мой взгляд, ключевым преимуществом Scaled Foundations является возможность создания систем, способных функционировать в реальных условиях.Не бойтесь экспериментировать, творить и учиться на ошибках — этот продукт станет вашим надежным помощником на пути к достижению целей!

Спасибо за внимание!

Автор: dmitr3mart

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js