> For the complete documentation index, see [llms.txt](https://voltbro.gitbook.io/robot-sobaka-mors/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://voltbro.gitbook.io/robot-sobaka-mors/ustroistvo-robota/programmnoe-obespechenie.md).

# Программное обеспечение

<figure><img src="/files/61mKcC9r1pi9CwT5lkM5" alt=""><figcaption></figcaption></figure>

На изображении представлена архитектура ПО робота, которое загружается при старте системы. Управление локомоцией осуществляется на базе ROS. Взаимодействие с сервоприводами происходит по протоколу [LCM](https://github.com/lcm-proj/lcm).&#x20;

На схеме синим показаны стрелки, обозначающие ROS-топики, зеленым - каналы LCM. Красные блоки подразумевают аппаратную часть робота, синие - программные модули.

Программа управления передвижением полностью выполняется на бортовом компьютере робота. Внешний компьютер может служить для установки желаемых параметров,  отслеживания состояния робота, либо для выполнения дополнительных алгоритмов.

Программное обеспечение имеет следующие блоки:

1. **locomotion\_controller** - выполняет алгоритм локомоции. На основе желаемых параметров (скорость, положение корпуса, положение ног, угловое положение приводов), данных с IMU и энкодеров в сочленениях ног, формирует желаемые углы для сервоприводов.
2. **bhi360\_imu\_node** - читает данные с IMU BHI360 по USB HID и передает их по ROS и LCM-каналу. Основан на базе данного [модуля](https://github.com/mdrwiega/bosch_imu_driver).
3. **radiolink\_teleop** - читает данные с джойстика RadioLink T8S по радиоканалу и преобразует их в задающие параметры для алгоритма локомоции, передавая их в виде сообщений ROS.
4. **robogui** - программа с графическим интерфейсом для запуска на внешнем компьютере. Предназначена для формирования команд роботу и для отслеживания текущего состояния.
5. **cmd\_commutator** - принимает сообщения от всех включенных в данный момент задающих устройств (ПК, джойстики и т.д.), и выводит сообщения самого приоритетного из них. Поддерживает до четырех разных устройств.&#x20;
6. **power\_bridge** - осуществляет обмен данными с платой питания робота, взаимодействует с пьезодинамиком, светодиодами и кнопками.
7. **status\_tracker** - задает действие в соответсвии нажатой кнопки: кнопка экстренного торможения - сброс питания пользовательская кнопка - переход в режим переноски
8. **servo\_state\_lcm2ros** - преобразует сообщения о состоянии сервоприводов из LCM в ROS.
9. **robot\_state\_publisher** - стандартный ROS-модуль. Необходим для преобразования данных о состоянии робота в [tf2](http://wiki.ros.org/tf2), который затем может использоваться пакетом rviz для графического отображения положения робота.
10. **plotjuggler** - программный пакет с [открытым исходным кодом](https://github.com/facontidavide/PlotJuggler), поддерживает ROS и предназначен для построения графиков в реальном времени.

Более подробно о каждом блоке и его параметрах, топиках и сервисах можно почитать в раделах [ROS-топики](/robot-sobaka-mors/ustroistvo-robota/ros-topiki.md), [ROS-пакеты](/robot-sobaka-mors/ustroistvo-robota/ros-pakety.md), [ROS-сервисы](/robot-sobaka-mors/ustroistvo-robota/ros-servisy.md), [LCM-каналы](/robot-sobaka-mors/ustroistvo-robota/lcm-kanaly.md). &#x20;


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://voltbro.gitbook.io/robot-sobaka-mors/ustroistvo-robota/programmnoe-obespechenie.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
