🌙
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.7 "Мы уже приехали?" Подойдя на расстояние с одометра

Previous7.6.4 Тайм-аут и обратно с использованием реального роботаNext7.8 Туда и обратно, используя одометрию

Last updated 5 years ago

Was this helpful?

Когда мы просим нашего робота двигаться или вращаться с определенной скоростью, как мы узнаем, что он действительно выполняет то, что мы просили? Например, если мы опубликуем сообщение Twist для перемещения робота вперед со скоростью 0,2 м / с, как мы узнаем, что робот на самом деле не движется со скоростью 0,18 м / с? На самом деле, как мы узнаем, что оба колеса движутся с одинаковой скоростью?

Как мы объясняли ранее в этой главе, базовый узел контроллера робота использует одометрию и ПИД-управление, чтобы превратить запросы движения в реальные скорости. Точность и надежность этого процесса зависит от внутренних датчиков робота, точности процедуры калибровки и условий окружающей среды. (Например, некоторые поверхности могут позволить колесам слегка скользить, что может испортить отображение между счетчиками энкодера и пройденным расстоянием.)

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

Для целей этой книги мы будем использовать термин «одометрия» для обозначения данных о внутреннем положении. Однако, независимо от того, как измеряется одометрия, ROS предоставляет тип сообщения для хранения информации; а именно . Сокращенное определение типа сообщения Одометрия показано ниже:

Header header
string child_frame_id
geometry_msgs/PoseWithCovariance pose
geometry_msgs/TwistWithCovariance twist

Здесь мы видим, что сообщение Odometry состоит из заголовка, строки, идентифицирующей child_frame_id, и двух вложенных сообщений, одно для PoseWithCovariance и одно для TwistWithCovariance.

Чтобы увидеть расширенную версию определения, выполните команду:

$ rosmsg show nav_msgs/Odometry

который должен дать следующий результат:

Header header
  uint32 seq
  time stamp
  string frame_id
string child_frame_id
geometry_msgs/PoseWithCovariance pose
  geometry_msgs/Pose pose
    geometry_msgs/Point position
      float64 x
      float64 y
      float64 z
    geometry_msgs/Quaternion orientation
      float64 x
      float64 y
      float64 z
      float64 w
  float64[36] covariance
geometry_msgs/TwistWithCovariance twist
  geometry_msgs/Twist twist
    geometry_msgs/Vector3 linear
      float64 x
      float64 y
      float64 z
    geometry_msgs/Vector3 angular
      float64 x
      float64 y
      float64 z
  float64[36] covariance

Под-сообщение PoseWithCovariance записывает положение и ориентацию робота, в то время как компонент TwistWithCovariance дает нам линейную и угловую скорости, которые мы уже видели. И предложение, и его применение могут быть дополнены ковариационной матрицей, которая измеряет неопределенность в различных измерениях.

Заголовок и child_frame_id определяют системы отсчета, которые мы используем для измерения расстояний и углов. Он также предоставляет временную метку для каждого сообщения, поэтому мы знаем не только, где мы находимся, но и когда. По соглашению, измерения одометрии в ROS используют / odom в качестве идентификатора родительского кадра и / base_link (или / base_footprint) в качестве идентификатора дочернего кадра. В то время как фрейм / base_link соответствует реальной физической части робота, фрейм / odom определяется сдвигами и поворотами, инкапсулированными в данные одометрии. Эти преобразования перемещают робота относительно фрейма / odom. Если мы отобразим модель робота в RViz и установим фиксированную рамку в / odom, позиция робота будет отражать то, где робот «думает», относительно ее начальной позиции.

ar_pose
ar_kinect
ar_track_alvar
ccny_rgbd_tools
rgbdslam
RTABMap
laser_scan_matcher
GPS
nav_msgs / Одометрия