Разработка собаки-робота с искусственным интеллектом при помощи фреймворка NVIDIA Isaac SDK
Модульный и простой в использовании стек навигации, входящий в состав NVIDIA Isaac SDK, продолжает ускорять разработку различных мобильных роботов. Версия Isaac SDK 2020.1, в дополнение к уже поддерживаемым платформам (таким как, например, дифференциальные и голономные колесные базы) включает в себя поддержку четвероногих систем (см. Рисунок 1).
Рисунок 1. Некоторые из мобильных роботов, использующих Isaaс SDK для автономной навигации. Слева направо: NVIDIA Carter, BMW STR, NVIDIA Kaya и Laikago. Стек навигации поддерживает различные базы, вычислительные устройства и датчики.
Laikago, четвероногий робот, разработанный Unitree Robotics, является новейшей моделью в линейке мобильных роботов этой компании. Laikago работает на базе модуля NVIDIA Jetson TX2 и оборудован низкоуровневым контроллером для балансировки и ходьбы, который позволяет дистанционно управлять движением робота. В этой статье объясняется, как обеспечить Laikago автономную навигацию, даже если раньше вы никогда не пользовались фреймворком Isaac SDK.
Базовая комплектация Laikago не содержит никаких датчиков для восприятия окружающей среды. По умолчанию робот не может определять свое местонахождение или обходить препятствия. Чтобы получать трехмерную информацию об окружающей среде, в рамках этого проекта мы установили на Laikago лидар Velodyne VLP-16. По ссылке можно скачать файлы с сетками для 3D-печати, использованные для установки лидара, которые основаны на CAD-модели Laikago. Мы также установили преобразователь постоянного тока, чтобы снизить выходное напряжение Laikago с 19 В до значений, соответствующих диапазону питающих напряжений лидара. Лидар соединяется с модулем NVIDIA Jetson при помощи USB-Ethernet адаптера.
Рисунок 2. Автономная навигация Laikago c бутылкой воды в качестве полезной нагрузки
Версия Isaac SDK 2020.1 содержит драйвер Laikago, который был реализован в рамках данного проекта для взаимодействия с двигателями робота. Кодлет (codelet) драйвера обладает простым интерфейсом: он принимает сообщения типа messages::HolonomicBaseControls, которые содержат значения продольной, боковой и угловой скоростей, а затем направляет их роботу Laikago. В свою очередь, LaikagoDriver считывает у робота информацию о текущей скорости и ускорении и возвращает ее в сообщениях типа messages::HolonomicBaseDynamics.
// Желаемое перемещение Laikago в формате messages::HolonomicBaseControls
ISAAC_PROTO_RX(StateProto, base_command);
// Состояние Laikago в формате messages::HolonomicBaseDynamics
ISAAC_PROTO_TX(StateProto, base_state);
LaikagoDriver также поддерживает параметры для ограничения линейной и угловой скоростей – их можно задать в виде структуры JSON перед запуском приложения или настроить через интерфейс модуля Sight уже во время его работы.
// Максимальная линейная скорость, с которой разрешено перемещение робота
ISAAC_PARAM(double, speed_limit_linear, 0.6);
// Максимальная угловая скорость, с которой разрешено вращение робота
ISAAC_PARAM(double, speed_limit_angular, 0.8);
Когда оборудование и драйвер готовы, можно создать приложение для автономной навигации, представленное на Рисунке 3. Единственным кодлетом в этом приложении, специфичным для робота Laikago, будет LaikagoDriver. Все остальные составляющие приложения - подграфы (например, стек навигации), компоненты (например, лидар) и ребра графа (например, платформа NVIDIA Carter) - также используются другими роботами в аналогичных приложениях.
Стек навигации предусматривает два входных потока:
- Модуль FlatscanProto предоставляет двумерную информацию об окружающей среде робота, полученную путем преобразования трехмерных данных от лидара VLP-16.
- LaikagoDriver передает данные о текущем состоянии робота. В свою очередь, стек навигации сообщает LaikagoDriver оптимальные значения скорости для безопасной автономной навигации.
Рисунок 3. Приложение для автономной навигации Laikago. Единственный компонент этого приложения, специфичный для Laikago – это LaikagoDriver. Подграф 2D Laikago включает в себя кодлет LaikagoDriver и подграф Scan Flattener (блок преобразования сканированных данных).
Приложение для автономной навигации на Рисунке 3 соответствует следующему примеру кода из директории packages/laikago/apps/laikago_navigate.app.json. В частности, часть кода, отвечающая за ребра графа (edges), на рисунке представлена тремя стрелками между подграфами стека навигации и 2D Laikago. Навигационный стек настраивается таким образом, чтобы геометрия робота позволяла ему безопасно обходить препятствия.
{
"graph": {
"nodes": [
{
"name": "2d_laikago",
"subgraph": "packages/laikago/apps/2d_laikago.subgraph.json"
},
{
"name": "navigation",
"subgraph": "packages/navigation/apps/holonomic_base_navigation.subgraph.json"
},
...
],
"edges": [
{
"source": "navigation.subgraph/interface/command",
"target": "2d_laikago.subgraph/interface/base_command"
},
{
"source": "2d_laikago.subgraph/interface/flatscan",
"target": "navigation.subgraph/interface/flatscan"
},
{
"source": "2d_laikago.subgraph/interface/base_state",
"target": "navigation.subgraph/interface/state"
},
...
]
},
"config": {
"navigation.shared_robot_model": {
"SphericalRobotShapeComponent": {
"circles": [
{ "center": [0.0 ,0.0], "radius": 0.3},
{ "center": [0.3 ,0.0], "radius": 0.3},
{ "center": [-0.3 ,0.0], "radius": 0.3},
{ "center": [-0.5 ,0.0], "radius": 0.3}
]
}
}
}, ...
}
Версия Isaac SDK 2020.1 включает в себя драйвер, описанное выше приложение, а также документацию к пакету NVIDIA Isaac SDK. Убедитесь, что в Jetson TX2 используется релиз Jetpack 4.3.
Автономная навигация Laikago
- Модифицируйте аппаратную часть робота с помощью лидара Velodyne VLP-16, как описано выше.
- (Опционально) Подключите игровую консоль к модулю TX2 робота (по Bluetooth). Это позволит при желании дистанционно управлять Laikago. Для более подробной информации см. тему Джойстик в документации к Isaac SDK.
- Чтобы развернуть приложение, выполните следующую команду в Isaac SDK 2020.1:
bob@desktop:~/isaac$ ./engine/build/deploy.sh -p //packages/laikago/apps:laikago_navigate-pkg -h -d jetpack43 --remote_user laikago
- Чтобы запустить приложение, подключитесь по SSH к TX2 робота:
laikago@tx2:~/deploy/bob/laikago_navigate-pkg$ ./packages/laikago/apps/laikago_navigate --more <map_json>
В команде <
map
_
json
>
представляет собой связанный с картой файл JSON, аналогичный файлам из директории apps/assets/maps/virtual_tutorial.json.
- Для наблюдения за роботом, его местоположением и различными другими данными через интерфейс Sight откройте в браузере адрес <TX2_IP_address>: 3000.
- Если в окне Map View есть интерактивный маркер “pose_as_goal”, переходите к следующему шагу. В противном случае, сделайте следующее:
- В окне Map View щелкните правой кнопкой мыши и выберите Settings, затем Select marker и “pose_as_goal”.
- Выберите Add marker, затем Update.
- Чтобы увидеть добавленный маркер, может понадобиться приблизить карту.
- Перетащите маркер “pose_as_goal” на новую локацию на карте.
- Нажмите и удерживайте кнопку ручного управления (manual_button) на игровой консоли и используйте оси движения (move_axes) и вращения (rotate_axes) для удаленного управления роботом в ручном режиме. Нажмите и удерживайте кнопку автономной навигации (autonomous_button) для самостоятельного перемещения робота к цели. Для более подробной информации см. раздел isaac.navigation.RobotRemoteControl темы «Component API Overview» («Обзор API компонентов»).
Видео: Автономная навигация Laikago с помощью Isaac SDK
Этот проект показывает, как просто использовать платформу Isaac SDK и добавлять роботу новые функции. Isaac SDK также предоставляет различные алгоритмы восприятия с ускорением на графических процессорах, глубокие нейронные сети, пакеты для управления манипуляторами и средства моделирования для переноса данных из симулятора в реальный мир. Загрузите и попробуйте Isaac SDK прямо сейчас!