roboforum.ru

Технический форум по робототехнике.

Самодельный робот на базе ROS - Custom mobile robot with ROS

Re: Самодельный робот на базе ROS - Custom mobile robot with

Сообщение citizen » 13 май 2016, 13:26

Про проблемы с режимом энергосбережения приходилось слышать ранее.
В принципе, сейчас с новым донглом на RTL8191 и Orange Pi PC проблема с пингами исчезла.
Теперь запускаю hector_slam прямо на Orange Pi, скорости работы вполне хватает, карта получается более-менее сносная для самодельного дальномера.

А вот навигация (move_base) работает как-то не очень.
Около препятствий, особенно в узких коридорах, в процессе движения робот может немного сбиться с глобального пути, и оказаться слишком близко к препятствиям. После этого он начинает по-всякому крутиться и подергиваться на месте, и на глобальный путь возвращается с большим трудом. Проблема явно связана именно с близостью препятствий, на открытых площадках навигация идет нормально.
Насколько я понял, base_local_planner вообще не умеет выдавать команды "двигаться назад", а команды "вращение на месте" он выдает как-то странно.
В симуляторе stage все описанные проблемы повторяются.
OpenSimpleLidar - проект простого самодельного лидара.
Аватара пользователя
citizen
 
Сообщения: 369
Зарегистрирован: 12 окт 2008, 12:40
Откуда: Красногорск, Подмосковье

Re: Самодельный робот на базе ROS - Custom mobile robot with

Сообщение linvinus » 13 май 2016, 20:49

base_local_planner
...
~<name>/holonomic_robot (bool, default: true)

Determines whether velocity commands are generated for a holonomic or non-holonomic robot. For holonomic robots, strafing velocity commands may be issued to the base. For non-holonomic robots, no strafing velocity commands will be issued.

у вас что?



сорри, похоже это действительно про голономного робота (на омни-колесах) а не эмуляцию

вот так вроде должно быть
Код: Выделить всёРазвернуть
# Differential-drive robot configuration
  holonomic_robot: false
  max_vel_y: 0.0
  min_vel_y: 0.0
  acc_lim_y: 0.0
  vy_samples: 0


вот ещё http://answers.ros.org/question/225835/ ... ward-only/

вот как в turtlebot
https://github.com/turtlebot/turtlebot_ ... launch.xml
https://github.com/turtlebot/turtlebot_ ... arams.yaml
https://github.com/turtlebot/turtlebot_ ... arams.yaml
R3 forum87/topic15337.html
R2 roboforum.ru/forum102/topic13980.html
R4 roboforum.ru/post336339.html#p336339
Делать надо хорошо - плохо получится само!
Аватара пользователя
linvinus
 
Сообщения: 1672
Зарегистрирован: 29 апр 2011, 12:37
Откуда: Москва
прог. языки: С

Re: Самодельный робот на базе ROS - Custom mobile robot with

Сообщение citizen » 14 май 2016, 00:31

holonomic_robot: false и так у меня был установлен,
max_vel_y: 0.0
min_vel_y: 0.0
acc_lim_y: 0.0
vy_samples: 0

добавил, при этом робот иногда действительно начал ездить задом, хотя вроде бы и не должен - обычный local_planner это вроде не позволяет.
Я пробовал использовать dwa_local_planner, как советуют nswers.ros.org, но он у меня как-то криво работал, нужно будет еще поэкспериментировать с симулятором.
Есть подозрения, что у меня еще и что-то с настройками частот всей системы навигации не так.
OpenSimpleLidar - проект простого самодельного лидара.
Аватара пользователя
citizen
 
Сообщения: 369
Зарегистрирован: 12 окт 2008, 12:40
Откуда: Красногорск, Подмосковье

Re: Самодельный робот на базе ROS - Custom mobile robot with

Сообщение linvinus » 14 май 2016, 09:21

turtlebot тоже использует dwa_local_planner
Вот тут делятся информацией какие параметры важны для двухколёсного робота https://www.youtube.com/watch?v=LzyMQVSJvzY

Кстати, судя по первому сообщению в этой теме forum10/topic12095.html
у вас есть две конструкции робота, одна самодельная вторая на базе робота пылесоса, какую сейчас используете?
R3 forum87/topic15337.html
R2 roboforum.ru/forum102/topic13980.html
R4 roboforum.ru/post336339.html#p336339
Делать надо хорошо - плохо получится само!
Аватара пользователя
linvinus
 
Сообщения: 1672
Зарегистрирован: 29 апр 2011, 12:37
Откуда: Москва
прог. языки: С

Re: Самодельный робот на базе ROS - Custom mobile robot with

Сообщение citizen » 14 май 2016, 13:19

В случае работы с ROS конструкция всегда одна и та же - пылесос roomba 400 и самодельный дальномер. На самодельного робота я дальномер только в самом начале экспериментов ставил, пока ROS еще не использовал.
OpenSimpleLidar - проект простого самодельного лидара.
Аватара пользователя
citizen
 
Сообщения: 369
Зарегистрирован: 12 окт 2008, 12:40
Откуда: Красногорск, Подмосковье

Re: Самодельный робот на базе ROS - Custom mobile robot with

Сообщение linvinus » 14 май 2016, 14:07

вот тут в блоге ребята также переделывали roomba чтобы работал как Turtlebot
http://robocraft.ru/blog/976.html
там целая серия статей как они всё делали. (правда некоторые команды будут отличаться в новой версии ROS)

я советую идти тем же путём, по сути требуется небольшая модификация ланчфайлов Turtlebot и всё есть в блоге, а для Turtlebot очень много примеров, в том числе рабочая навигация которая сразу должна заработать, так что можно будет сосредоточиться на решении сложных задач а не воевать с ROS.

полезные туториалы
http://learn.turtlebot.com/


в итоге всё должно свестись к примерно вот таким командам
Код: Выделить всёРазвернуть
 export TURTLEBOT_BASE = roomba
export TURTLEBOT_STACKS = circles
export TURTLEBOT_3D_SENSOR = asus_xtion_pro
export TURTLEBOT_SIMULATION = false
export TURTLEBOT_SERIAL_PORT = / dev / ttyUSB0
export ROS_IP = 192.168.1.16

Press Roomba largest middle button "CLEAN", execute the following script to start turtlebot

  $ Roslaunch turtlebot_bringup minimal.launch


вот ещё пример, посвежее http://cyberworks.cocolog-nifty.com/blo ... -5f32.html

Вот тут ещё можно посмотреть примеры скриптов https://github.com/vicoslab/vicos_ros
скрипты используются в учебном курсе так что максимально автоматизируют процесс установки и настройки https://github.com/vicoslab/vicos_ros/b ... p_setup.sh
R3 forum87/topic15337.html
R2 roboforum.ru/forum102/topic13980.html
R4 roboforum.ru/post336339.html#p336339
Делать надо хорошо - плохо получится само!
Аватара пользователя
linvinus
 
Сообщения: 1672
Зарегистрирован: 29 апр 2011, 12:37
Откуда: Москва
прог. языки: С

Re: Самодельный робот на базе ROS - Custom mobile robot with

Сообщение citizen » 14 май 2016, 16:21

Все равно воевать с ROS приходится.
Вот например, здесь: https://github.com/turtlebot/turtlebot_ ... arams.yaml
указано - transform_tolerance: 0.5
В большинстве остальных примеров примерно так же, иногда ставят 1.0.
У меня даже при 1.0 move_base постоянно выдает warning:
Costmap2DROS transform timeout. Current time: 1463223582.6300, global_pose stamp: 1463223581.5903, tolerance: 1.0000
[ WARN] [1463223582.630455929]: Could not get robot pose, cancelling reconfiguration


У меня используется Roomba 400, а в turtlebot - Roomba 500, у них заметно протоколы обмена различаются. Для Roomba 400 официального пакета ROS нет, мне удалось найти какой-то полурабочий и переделать его.
Также для turtlebot все примеры с навигацией базируются на gmapping/amcl, а у меня прилично только hector_slam работает.
OpenSimpleLidar - проект простого самодельного лидара.
Аватара пользователя
citizen
 
Сообщения: 369
Зарегистрирован: 12 окт 2008, 12:40
Откуда: Красногорск, Подмосковье

Re: Самодельный робот на базе ROS - Custom mobile robot with

Сообщение linvinus » 14 май 2016, 17:53

вот тут говорят это из-за того что /odom слишком редко публикуется нужно 20гц или более http://ros-users.122217.n3.nabble.com/C ... 35497.html
а какой пакет используете для 400 румбы?

такой пробовали? https://github.com/autonomylab/create_autonomy даже deb пакет должен быть

правда 400я с пометкой
* Not verified. Anyone who is able to verify that this driver works or not is encouraged to contact Jacob with their findings or open an issue.
R3 forum87/topic15337.html
R2 roboforum.ru/forum102/topic13980.html
R4 roboforum.ru/post336339.html#p336339
Делать надо хорошо - плохо получится само!
Аватара пользователя
linvinus
 
Сообщения: 1672
Зарегистрирован: 29 апр 2011, 12:37
Откуда: Москва
прог. языки: С

Re: Самодельный робот на базе ROS - Custom mobile robot with

Сообщение citizen » 14 май 2016, 20:06

В обсуждении "Costmap2DROS transform timeout." у человека было выставлено - tolerance: 0.2000, а одометрия была то ли 1.25, тол ли 2 Гц.
Очевидно, что при такой низкой частоте выдавался warning.
У меня частота одометрии - 10 Гц, но из warning видно, что где-то возникает практически секундная задержка.
При симуляции в stage такие сообщения не появляются (частота симуляции - 10 Гц).

Пакет для roomba 400 брал здесь: https://github.com/dpiet/robotsindc-ros-pkg но его пришлось переделать - там одометрия какая-то кривая была.

В описании create_autonomy прямо заявляют:
This package wraps the C++ library libcreate, which uses iRobot's Open Interface Specification.

У roomba 400 протокол - sci, так что можно получить проблемы с совместимостью протоколов.
OpenSimpleLidar - проект простого самодельного лидара.
Аватара пользователя
citizen
 
Сообщения: 369
Зарегистрирован: 12 окт 2008, 12:40
Откуда: Красногорск, Подмосковье

Re: Самодельный робот на базе ROS - Custom mobile robot with

Сообщение linvinus » 14 май 2016, 21:10

понятно, я бы попробовал увеличить с 10 до 20 герц. не поможет, см ниже

вот тут рассказано что не сильно отличается http://hackingroomba.com/?s=irobot

если я правильно понял в robotsindc-ros-pkg одометрия вычисляется по тикам энкодеров,

Код: Выделить всёРазвернуть
// Calculate Roomba odometry
void irobot::SerialCommInterface::calculateOdometry()
{   
   double dist = (encoder_counts_[RIGHT]*ROOMBA_PULSES_TO_M + encoder_counts_[LEFT]*ROOMBA_PULSES_TO_M) / 2.0;
   double ang = (encoder_counts_[RIGHT]*ROOMBA_PULSES_TO_M - encoder_counts_[LEFT]*ROOMBA_PULSES_TO_M) / -ROOMBA_AXLE_LENGTH;

   // Update odometry
   this->odometry_yaw_ = NORMALIZE(this->odometry_yaw_ + ang);         // rad
   this->odometry_x_ = this->odometry_x_ + dist*cos(odometry_yaw_);      // m
   this->odometry_y_ = this->odometry_y_ + dist*sin(odometry_yaw_);      // m
}



а в libcreate , через команыд DISTANCE,ANGLE

Код: Выделить всёРазвернуть
    if (model == CREATE_1) {
      /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
       * Angle returned is NOT correct if your robot is using older firmware:      *
       * http://answers.ros.org/question/31935/createroomba-odometry/              *
       * TODO: Consider using velocity command as substitute for pose estimation.  *
       * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
      deltaDist = ((int16_t) GET_DATA(ID_DISTANCE)) / 1000.0; //mm -> m
      deltaYaw = ((int16_t) GET_DATA(ID_ANGLE)) * (util::PI / 180.0); // D2R
      deltaX = deltaDist * cos( util::normalizeAngle(pose.yaw + deltaYaw) );
      deltaY = -deltaDist * sin( util::normalizeAngle(pose.yaw + deltaYaw) );
      leftWheelDist = deltaDist / 2.0;
      rightWheelDist = leftWheelDist;

    }


в тоже время в robotsindc-ros-pkg есть команды parseDistance, parseAngle.
так что я бы сказал что должно работать :)

ещё, как мне кажется, в robotsindc-ros-pkg реализовано всё в один поток, а в create_autonomy общение с роботом отдельно, публикация отдельно, полагаю это имеет большое значение, поэтому тупо подправить robotsindc-ros-pkg не получится
R3 forum87/topic15337.html
R2 roboforum.ru/forum102/topic13980.html
R4 roboforum.ru/post336339.html#p336339
Делать надо хорошо - плохо получится само!
Аватара пользователя
linvinus
 
Сообщения: 1672
Зарегистрирован: 29 апр 2011, 12:37
Откуда: Москва
прог. языки: С

Re: Самодельный робот на базе ROS - Custom mobile robot with

Сообщение citizen » 20 май 2016, 17:38

Пока не стал переходить на create_autonomy - есть подозрение, что сборка этого пакета будет долгой на Orange Pi, и как всегда, куча ошибок повылезает.
Насколько я понял, в create_autonomy нет способа переключаться между протоколами, так что create_autonomy может послать не поддерживаемый запрос на roomba.
Еще поковырялся с ROS.
Заметил, что если запустить tf_monitor для практически любых frame (например odom и