🌙
Translate_book_Part7
  • Титульный лист
  • 7 КОНТРОЛЬ МОБИЛЬНОЙ БАЗЫ
  • 7.1 Единицы и системы координат
  • 7.2 Уровни управления движением
  • 7.2.1 Моторы, Колеса и Кодеры
  • 7.2.2 Контроллеры и драйверы двигателей
  • 7.2.3 Базовый контроллер ROS
  • 7.2.4 Кадровое движение с использованием пакета ROS move_base
  • 7.2.5 SLAM с использованием пакетов gmapping и amcl ROS
  • 7.2.6 Семантические цели
  • 7.2.7 Сводка
  • 7.3 Скручивание и поворот с помощью ROS
  • 7.3.1 Пример твист-сообщений
  • 7.4 Калибровка одометрии вашего робота
  • 7.4.2 Угловая калибровка
  • 7.5 Отправка твист-сообщений реальному роботу
  • 7.6 Публикация твист-сообщений от узла ROS
  • 7.6.1 Оценка расстояния и поворота с использованием времени и скорости
  • 7.6.2. Время и время в симуляторе ArbotiX
  • 7.6.3. Скрипт с выдержкой времени и обратно
  • 7.6.4 Тайм-аут и обратно с использованием реального робота
  • 7.7 "Мы уже приехали?" Подойдя на расстояние с одометра
  • 7.8 Туда и обратно, используя одометрию
  • 7.8.1 Одометрия на выходе и обратно в симуляторе ArbotiX
  • 7.8.2. На основе одометрии и обратно с использованием реального робота
  • 7.8.4 The/odom Topic versus the/odom Frame
  • 7.9 Навигация по квадрату с помощью одометрии
  • 7.9.1 Навигация по квадрату в симуляторе ArbotiX
  • 7.9.2 Навигация по квадрату с использованием реального робота
  • 7.9.3 nav_square.pyScript
  • 7.10 Телеоперация вашего робота
  • 7.10.1 Использование клавиатуры
  • 7.10.2 Использование игровой площадки Logitech
  • 7.10.3 Использование графического интерфейса контроллера ArbotiX
  • 7.10.4 Телеоперация TurtleBot с использованием интерактивных маркеров
Powered by GitBook
On this page

Was this helpful?

7.3.1 Пример твист-сообщений

Previous7.3 Скручивание и поворот с помощью ROSNext7.4 Калибровка одометрии вашего робота

Last updated 5 years ago

Was this helpful?

Предположим, мы хотим, чтобы робот двигался прямо со скоростью 0,1 метра в секунду. Это должно потребовать двустороннего сообщения с линейными значениями x = 0,1, y = 0 и z = 0, а угловые значения x = 0, y = 0 и z = 0. Если вы укажете это сообщение в командной строке, часть сообщения будет иметь вид:

'{linear: {x: 0.1, y: 0, z: 0}, angular: {x: 0, y: 0, z: 0}}'

Обратите внимание на то, как мы разграничиваем под-сообщения с помощью фигурных скобок и отделяем имена компонентов от их значений двоеточием и пробелом (пробел необходим!) Хотя это может показаться много печатанием, таким способом мы редко будем управлять роботом. Как мы увидим позже, сообщения Twist будут отправляться роботу с использованием других узлов ROS.

Чтобы повернуть против часовой стрелки с угловой скоростью 1,0 радиан в секунду, требуемое сообщение Твист будет:

'{linear: {x: 0, y: 0, z: 0}, angular: {x: 0, y: 0, z: 1.0}}'

Если бы мы объединили эти два сообщения, робот двинулся бы вперед, повернувшись влево. TheresultingTwistmessagewouldbe:

'{linear: {x: 0.1, y: 0, z: 0}, angular: {x: 0, y: 0, z: 1.0}}'

Чем больше угловое значение z по сравнению с линейным значением x, тем сильнее поворот.

7.3.2 Мониторинг движения робота с помощью RViz

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

Давайте попробуем пару примеров с использованием симулятора ArbotiX. Сначала запустите поддельный TurtleBot с помощью команды:

$ roslaunch rbx1_bringup fake_turtlebot.launch

В другом терминале вызовите RViz с уже включенным файлом конфигурации с дисплеем Одометрия:

$ rosrun rviz rviz -d `rospack find rbx1_nav`/sim.rviz

Наконец, откройте еще одно окно терминала и установите робота, движущегося по кругу по часовой стрелке, опубликовав следующее сообщение Twist:

$ rostopic pub -r 10 /cmd_vel geometry_msgs/Twist '{linear: {x: 0.1, y: 0, z: 0}, angular: {x: 0, y: 0, z: -0.5}}'

Мы используем параметр -r для постоянной публикации сообщений об ошибке на частоте 10 Гц. Некоторые роботы, такие как TurtleBot, требуют, чтобы команда движения постоянно публиковалась, иначе робот остановится: хорошая функция безопасности. Хотя этот параметр не является обязательным при запуске симулятора ArbotiX, он также не повредит.

Если все работает нормально, результат в RViz должен выглядеть примерно так:

Обратите внимание, что мы установили в поле Keep значение 100 для отображения одометрии, которое указывает, что мы хотим отображать до 100 последних стрелок, прежде чем самая старая из них выпадет. Допуск положения (в метрах) и допуск угла (в радианах) позволяют вам контролировать частоту отображения новой стрелки.

Чтобы убрать стрелки в любой точке, либо нажмите кнопку «Сброс», либо снимите флажок рядом с дисплеем «Одометрия», а затем снова проверьте его. Чтобы полностью отключить стрелки, не устанавливайте флажок.

Чтобы остановить вращение робота, введите Ctrl-C в том же окне терминала, а затем опубликуйте пустое сообщение Twist:

$ rostopic pub -1 /cmd_vel geometry_msgs/Twist '{}'

Теперь давайте попробуем второй пример. Сначала очистите стрелки одометрии, нажав кнопку «Сброс» в RViz. Следующая пара команд (разделенных точкой с запятой) будет сначала двигать робота прямо в течение примерно 3 секунд (опция «-1» означает «опубликовать один раз»), а затем продолжать бесконечно по кругу против часовой стрелки:

$ rostopic pub -1 /cmd_vel geometry_msgs/Twist '{linear: {x: 0.2, y: 0, z: 0}, angular: {x: 0, y: 0, z: 0}}'; rostopic pub -r 10 /cmd_vel geometry_msgs/Twist '{linear: {x: 0.2, y: 0, z: 0}, angular: {x: 0, y: 0, z: 0.5}}'

Чтобы остановить робота, введите Ctrl-C в том же окне терминала и опубликуйте пустое сообщение Twist:

$ rostopic pub -1 /cmd_vel geometry_msgs/Twist '{}'

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

Руководства пользователя RViz
одометрии