Данные о положении робота

При движения робота, основываясь на данных о скорости вращения колес, и IMU датчика, робот с некоторым приближением может рассчитать свое положение. В робототехнике расчет положения робота по угловым скоростям вращения колес, называется Одометрия.

Системная плата робота, рассчитывает положение робота, и публикует данные в топик /odom. Линейные значения пройденного расстояния рассчитываются на основе данных о скорости вращения колес, а угловые - на основе датчикаIMU.

Давайте посмотрим на это данные. Сначала определим тип этого сообщения:

rostopic info /odom


Type: nav_msgs/Odometry

Publishers:
 * /stm_serial_node (http://192.168.0.145:45869/)

Subscribers: None

Мы видим, что тип сообщения nav_msgs/Odometry. Посмотрим на его структуру:

rosmsg show nav_msgs/Odometry


std_msgs/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

Довольно серьезный набор данных:

  1. Блок std_msgs/Header header содержит стандартный набор параметров, которым подписывают множество стандартных сообщений;
  2. Блок geometry_msgs/PoseWithCovariance pose содержит данные о положении робота в пространстве. Сообщение содержит данные: geometry_msgs/Point position;geometry_msgs/Quaternion orientation ;covariance

  3. position это переменные расположения робота в осях XYZ, где Z это высота;

  4. orientation Для определения ориентации (углов) объектов в трехмерном пространстве, в робототехнике использует систему кватеринионов. Далее мы приведем примеры, как эти комплексные значения можно перевести в более привычные углы Эйлера;

3. Блок geometry_msgs/TwistWithCovariance twist содержит текущую скорость линейную и угловую.

Давайте для эксперимента заставим робота двигаться по кругу (задание предыдущего урока) и посмотрим как меняются данные одометрии.

Сначала запустим программу, которая заставит робота двигаться по окружности.

python3 lesson3/cmd_vel1_publisher.py

Во втором терминале посмотрим данные о перемещении робота:

rostopic echo /odom

header:
  seq: 43
  stamp:
    secs: 1542200780
    nsecs: 909679937
  frame_id: "odom"
child_frame_id: "base_footprint"
pose:
  pose:
    position:
      x: -0.000347826076904
      y: 0.0
      z: 0.0
    orientation:
      x: 0.0
      y: 0.0
      z: -0.00277777435258
      w: 0.999996125698
  covariance: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
twist:
  twist:
    linear:
      x: 0.0
      y: 0.0
      z: 0.0
    angular:
      x: 0.0
      y: 0.0
      z: 0.0
  covariance: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]

Мы увидим изменения положения робота, его координат и углов.

results matching ""

    No results matching ""