Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

docs: ROS book section #265

Draft
wants to merge 12 commits into
base: master
Choose a base branch
from
Draft

docs: ROS book section #265

wants to merge 12 commits into from

Conversation

okalachev
Copy link
Member

@okalachev okalachev commented Aug 5, 2020

Questions:

  • Should topics, services, parameters, names sections be split up to separate articles?
  • Summary structure questions. ROS GUI tools can belong either to "programming" section, but to ROS section as well.

Copy link
Member

@sfalexrog sfalexrog left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ценно и нужно, конечно же. Должно ли это быть в основном нашем гитбуке? Сложно сказать, он вроде и так прям огромный, остальные вроде бы отделяют такие "фундаментальные" вещи от инструкций.


ROS уже установлен на [образе для RPi](image.md).
Для использования ROS на компьютере рекомендуется ОС Ubuntu Linux (либо виртуальная машина, например [Parallels Desktop Lite](https://itunes.apple.com/ru/app/parallels-desktop-lite/id1085114709?mt=12) или [VirtualBox](https://www.virtualbox.org)). Воспользуйтесь [официальной документацией](http://wiki.ros.org/melodic/Installation/Ubuntu) для установки ROS на компьютер.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Может, нужно какое-то соглашение по рекомендованным виртуалкам? Я вот у себя изо всех сил не рекомендовал использовать Virtualbox, а про Parallels даже не заикнулся. Впрочем, может, и зря я так на Virtualbox гоню, может, на винде/маке он уже норм работает.


ROS-нода – это специальная программа (обычно написанная на Python или C++), которая взаимодействует с другими нодами посредством ROS-топиков и ROS-сервисов. Разделение сложных робототехнических систем на изолированные ноды дает определенные преимущества: понижается связанность кода, повышается переиспользуемость и надежность.
ROS-нода[^1] – это специальная программа (обычно написанная на Python или C++), которая взаимодействует с другими нодами посредством ROS-топиков и ROS-сервисов. Разделение сложных робототехнических систем на изолированные ноды дает определенные преимущества: понижается связанность кода, повышается переиспользуемость и надежность.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Что в ней специального-то? Просто программа (процесс), которая контачит с остальным ROS'ом.

Не очень понятно, что значит "понижается связанность кода", особенно для непонимающего человека. Я бы вот решил, что это примерно как "бессвязная речь".

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Что в ней специального-то? Просто программа (процесс), которая контачит с остальным ROS'ом.

Ну этим она и специальна. Ну здесь не о чем спорить, это слово не делает формулировку ни точнее, ни менее точной.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Не очень понятно, что значит "понижается связанность кода", особенно для непонимающего человека. Я бы вот решил, что это примерно как "бессвязная речь".

Это устоявшийся термин и важная часть обоснования разделения системы на ноды.

Твой вариант?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ну здесь не о чем спорить, это слово не делает формулировку ни точнее, ни менее точной.

Так и зачем это слово здесь тогда?

Это устоявшийся термин и важная часть обоснования разделения системы на ноды.

Ну для простого человека это значит примерно ничего. Повышается модульность, отказоустойчивость, появляется возможность повторного использования кода?

Основная статья: http://wiki.ros.org/Topics
Основная статья: http://wiki.ros.org/Topics.

Топик – это именованная шина данных, по которой ноды обмениваются сообщениями. Любая нода может опубликовать сообщение в произвольный топик, а также подписаться на произвольный топик.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Если именованная, то в принципе ещё и типизированная (по крайней мере, после первого сообщения).

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Про типизированность написано в следующем предложении.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ну данный абзац похож на определение, очень странно в определение не включать фундаментальную особенность топиков. Я видел, что ниже написано про типы и прочее, но это уже какой-то следующий абзац, на который я, возможно, и не стану обращать внимание, если мне надо узнать, что такое топик (и тогда я точно никогда больше не узнаю, что у топика есть ещё и какой-то тип).

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Не завидую твоей жизни после такого, конечно.

from std_msgs.msg import String

# ...
rospy.init_node('my_ros_node')
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

К слову, если это "для совсем начинающих" текст, то было бы полезно каждую строчку аннотировать. Если человек читает статью на русском, то не факт, что он хорошо знает английский, и для него ой как не очевидно будет, что init_node() - это инициализация ноды, а не просто набор буков.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

В принципе, эта строка откомментирована в предыдущем примере.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

И правда (я на diff смотрел, на весь документ посмотреть не догадался), хотя комментарий там ("имя ROS-ноды") какой-то, как мне кажется, недостаточный.

Основная статья: http://wiki.ros.org/Services
Основная статья: http://wiki.ros.org/Services.

Сервис – это аналог функции, которая вызывается в одной ноде, а обрабатывается в другой. У сервиса есть имя, строящееся аналогично имени топика, и тип, включающий в себя поля запроса и поля ответа.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Что значит "вызывается в одной ноде, а обрабатывается в другой"? Я вот не понял. Это же обычный RPC, можно подсмотреть, как эту штуку описывают, например.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Я не придумал лучшую формулировку. Никто нигде не пытается объяснить "обычный RPC" начинающим.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"функция, доступная для вызова внешними программами" - это ни разу не понятнее, чем то, что есть, если уж докапываться.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Не сказать вообще ничего тоже не лучше.


Примеры ROS-имен:

* `/` (глобальное пространство имен)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Вроде вот написано, что топик, сервис или параметр идентифицируются с помощью ROS-имени, но я так и не понял, может ли / быть именем топика, сервиса или параметра. (В ROS Wiki такой же косяк)

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Нет, не может. Что предлагаешь?


Основная статья: http://wiki.ros.org/ROS/Tutorials/MultipleMachines.

Преимуществом использования ROS является возможность распределения нод на несколько машин в сети. Например, ноду, осуществляющую распознавание образом на изображении можно запустить на более мощном компьютере; ноду, управляющую коптером можно запустить непосредственно на Raspberry Pi, подключенном к полетному контроллеру и т. д.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Тема интересная, но тут либо надо расширять весь раздел, либо приводить примеры, либо вообще этот раздел удалить. Сейчас просто постулируется возможность делать крутую штуку.


## Создание пакетов

ROS-пакет содержит ноды, типы сообщений и сервисов, launch-файлы и другие ресурсы, объединенные единой задачей.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Скорее, может содержать. Про единую задачу - неочевидно и непонятно.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Я не придумал лучшую формулировку. Конечно, в ROS Wiki пакет определен лучше, но там это занимает не одно предложение.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ну так и здесь пусть будет не одно. Что зазорного в более точном, пусть и более многословном, определении?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

В каком? Я не придумал лучше формулировку.

Предлагаешь перевести из доков ROS? Там описание пакета это несколько абзацев. Все-таки это краткие статьи, я хочу изложить максимально лаконично.


TODO

## Создание собственных типов сообщений
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Это, наверное, может быть подразделом создания пакетов?

docs/ru/ros_conventions.md Outdated Show resolved Hide resolved
docs/ru/ros.md Outdated Show resolved Hide resolved
@okalachev
Copy link
Member Author

Partially applied on 810ddb4.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants