Система: ubuntu 14.04+ros индиго или ubuntu 16.04+ros кинетическая Платформа: черепаха-бот2 Датчик: лазер hokuyo UTM-30LX
> В этой статье предполагается, что Ubuntu, ros и различные пакеты ros, связанные с Turtlebot, были успешно установлены. В этой статье в основном рассказывается, как установить и настроить картограф + черепаху + хокуйо, включая установку картографа, картографа_ros, картографа_туртлебота и использование картографа в среде моделирования беседки. Последующая работа будет продолжена время от времени.
@[toc]
1. Установить картограф, картограф_рос, картограф_туртлбот
1.1 cartographer+cartographer_ros
Увидев эффект удара картографом настоящего робота от моего младшего брата, я сразу же вернулся к учебе. Поскольку я не знал вначале, исследователи Google выпустили cartographer_turtlebot, чтобы облегчить применение картографа на роботах-черепашках. Итак, для начала я следуюОфициальный сайт Google cartographer_rosСпособ установки, разовый успех (открыть научный интернет-инструмент). Позже выяснилось, что былиЕще один популярный способ установки, я называю его народным методом, проверено лично, также эффективен. Поэтому протестировал, оба способа установки эффективны. Преимущества и недостатки каждого из них перечислены ниже:
- Установка официального сайта Google Преимущества: Как и при установке в один клик, все установочные пакеты находятся в одном рабочем пространстве, которым легко управлять. Недостатки: некоторые шаги требуют научного доступа в Интернет (через стену), чтобы быть успешными.
- Гражданский способ установки Преимущества: каждый шаг отделен, повышена управляемость, можно устанавливать по одной библиотеке за раз. Недостатки: Источник github на его основе может быть немного староват, я не знаю, обновил ли его автор.
Вы можете выбрать любой, чтобы попробовать, если нет, просто переключитесь на другой.在安装过程中,会出现有些库很难安装成功,甚至找不到该库,这是因为ros的国内镜像源的问题,更换源就行了。本次安装,我换了好几次源(易科的、USTC、以及清华大学)。有些库在易科的源下面卡半天,但是换成在USTC源下面很顺利的就安装成功。这是我想强调给大家的,不要盲目的试,不是什么神秘的现象,是你的ros镜像源的问题。重点!!!!
1.2 cartographer_turtlebot
Я пыталсяКак установить официальный сайт, установка не удалась. Я также попробовал метод git clone для локального и перекомпилированного, но это не увенчалось успехом. Вот как его успешно установить после бесчисленных неудач.
Особенность способа установки на официальном сайте в том, что это можно сделать в один клик. Например, когда вы устанавливаете cartographer_ros, картограф и другие зависимости устанавливаются одновременно. Cartographer_turtlebot зависит как от cartographer, так и от cartographer_ros.При установке cartographer_turtlebot официальный сайт снова установит cartographer, cartographer_ros и другие зависимые пакеты.Это то, на что следует обратить внимание при установке с помощью учебника официального сайта Google. Он форвард включительно, то есть в идеале, мне нужно только установить cartographer_turtlebot по методике официального сайта, выполнить все команды, и не нужно заранее устанавливать отдельно cartographer_ros, картограф и т.д. Однако, после того, как я удалил установленные рабочие пространства картограф и картограф_рос, я установил их в строгом соответствии с официальным сайтом cartographer_turtlebot, но результат был безрезультатным (к счастью, перед удалением я сделал резервную копию всех рабочих пространств, поэтому резервное копирование очень важно!!! ).我本来已经放弃使用cartographer_turtlebot了,而是选择研究cartographer_turtlebot里面的launch文件、configuration_files里的文件来模仿它自己写配置文件。
Позже выяснилось, что файл запуска зависит только от ноды, сгенерированной в пакете cartographer_turtlebot, а это значит, что в пакете только одна нода. Итак, я создал свое собственное рабочее пространство и скомпилировал этот файл узла .cc. Это было действительно успешно позже, и подробный процесс приведен ниже.
Ниже показано, как я установил cartographer_turtlebot, исходя из того, что cartographer_ros уже установлен.
- 1. Построить рабочее пространство ros
mkdir -p ~/cartographer_turtlebot_ws/src
cd ~/cartographer_turtlebot_ws/src
catkin_init_workspace
cd ..
catkin_make
Примечание. После создания нового рабочего пространства не забудьтеsource ~/cartographer_turtlebot_ws/devel/setup.bash
добавить в~/.bashrc
в файле
- 2. Создать новый пакет
cd ~/cartographer_turtlebot_ws/src
catkin_create_pkg cartographer_turtlebot
cd ..
catkin_make
- 3. git клонируйте пакет cartographer_turtlebot в локальный
cd ~/Download
git clone https://github.com/googlecartographer/cartographer_turtlebot
- 4. Воля~/Download/cartographer_turtlebot/cartographer_turtlebot
три подпапки в папкеcartographer_turtlebot
(переименовывается в src при копировании в папку назначения),configuration_files
,launch
Скопировать все в~/cartographer_turtlebot_ws/src/cartographer_turtlebot
. Переименуйте скопированную подпапку cartographer_turtlebot в src. Каталог файлов в это время показан ниже
- 5. Правильно~/cartographer_turtlebot_ws/src/cartographer_turtlebot/CMakeLists.txt
Файл изменен, и содержимое измененного файла размещено непосредственно ниже, просто скопируйте содержимое, чтобы заменить исходный файл CMakeLists.txt.
cmake_minimum_required(VERSION 2.8.3)
project(cartographer_turtlebot)
# Compile as C++11
add_compile_options(-std=c++11)
set(PACKAGE_DEPENDENCIES
roscpp
roslib
sensor_msgs
)
find_package(catkin REQUIRED COMPONENTS ${PACKAGE_DEPENDENCIES})
catkin_package(
)
include_directories(include ${catkin_INCLUDE_DIRS} ${PCL_INCLUDE_DIRS})
add_executable(cartographer_flat_world_imu_node "src/flat_world_imu_node_main.cc")
target_link_libraries(cartographer_flat_world_imu_node ${catkin_LIBRARIES})
add_dependencies(cartographer_flat_world_imu_node ${catkin_EXPORTED_TARGETS})
~/cartographer_turtlebot_ws/src/cartographer_turtlebot/package.xml
Пока не вносите изменения.
Если позже возникнет ошибка, вы можете повторить попытку содержимого файла.<buildtool_depend>catkin</buildtool_depend>
Добавьте следующие строки после него.
<build_depend>sensor_msgs</build_depend>
<build_export_depend>sensor_msgs</build_export_depend>
<exec_depend>sensor_msgs</exec_depend>
- 6. Скомпилировать рабочее пространство
cd ~/cartographer_turtlebot_ws
catkin_make
Неудивительно, что компиляция завершится.
2. Тестовый набор данных
2.1 набор данных cargrapher_ros
- 1. Загрузите набор данных
# Download the 2D backpack example bag.
wget -P ~/Downloads https://storage.googleapis.com/cartographer-public-data/bags/backpack_2d/cartographer_paper_deutsches_museum.bag
# Download the 3D backpack example bag.
wget -P ~/Downloads https://storage.googleapis.com/cartographer-public-data/bags/backpack_3d/with_intensities/b3-2016-04-05-14-14-00.bag
- 2. Тестовый набор данных
# Launch the 2D backpack demo.
roslaunch cartographer_ros demo_backpack_2d.launch bag_filename:=${HOME}/Downloads/cartographer_paper_deutsches_museum.bag
Некоторые из эффектов показаны ниже:
# Launch the 3D backpack demo.
roslaunch cartographer_ros demo_backpack_3d.launch bag_filename:=${HOME}/Downloads/b3-2016-04-05-14-14-00.bag
Если данные слишком велики на 9 G, они не запустятся.
2.2 cartographer_turtlebot
- 1. Загрузите тестовый набор данных
# Download the example bag.
wget -P ~/Downloads https://storage.googleapis.com/cartographer-public-data/bags/turtlebot/cartographer_turtlebot_demo.bag
- 2. Результаты испытаний
# Launch the 2D LIDAR demo.
roslaunch cartographer_turtlebot demo_lidar_2d.launch bag_filename:=${HOME}/Downloads/cartographer_turtlebot_demo.bag
Некоторые из результатов показаны ниже:
# Launch the 2D depth camera demo.
roslaunch cartographer_turtlebot demo_depth_camera_2d.launch bag_filename:=${HOME}/Downloads/cartographer_turtlebot_demo.bag
Некоторые из результатов показаны ниже:
# Launch the 3D depth camera demo.
roslaunch cartographer_turtlebot demo_depth_camera_3d.launch bag_filename:=${HOME}/Downloads/cartographer_turtlebot_demo.bag
Некоторые из результатов показаны ниже:Это должно быть проблемой, но cartographer_turtlebot должен быть успешно установлен.
3. turtlebot+hokuyo+cartographer in gazebo
Когда физические роботы дороги и не очень удобны для переноски, исследования роботов в программном обеспечении для моделирования являются хорошей альтернативой. В платформе моделирования роботов беседка широко используется из-за ее отличного физического движка и полного интерфейса с ros. В этом разделе в основном рассказывается об использовании беседки для создания среды моделирования черепашьего робота + хокуйо и реализуется цель картографа SLAM на основе данных моделирования.
3.1 Добавьте хокуйо в среду моделирования Turtlebot_gazebo
так какturtlebot_gazebo
Сенсором черепашки по умолчанию в пакете является kinect, поэтому основная проблема заключается в том, как заменить kinect на hokuyo. Этот раздел может относиться кMaxChanger|Блог CSDN, я следовал его пошаговой настройке и, наконец, успешно запустил Turtlebot+hokuyo в беседке и смог успешно опубликовать данные лазера. Поэтому в этой статье не будет повторяться весь процесс настройки, а только поясняется непонятное. Есть три основных момента:
1. Блогер CSDN RGiantсуществуетMaxChanger|Блог CSDNНезавершенный комментарий: «Шаг 3 фактически изменил 3 места, не пропустите:
<sensor_hokuyo parent="base_link" />
2. MaxChanger|Блог CSDNНа самом деле процесс Turtlebot+kinect+hokuyo настроен. Если вы просто хотите заменить kinect на hokuyo, вы можете удалить скрипт про kinect в шагах из файла. В частности: на шаге 3kobuki_hexagons_hokuyo.urdf.xacro
12-й и 17-й в файле закомментированы, на шаге 6turtlebot_gazebo.urdf.xacro
Строки 4-41 в файле закомментированы.
3. MaxChanger|Блог CSDNНастроенный угол обзора лазера Hokuyo FOV составляет от to , а моя модель hokuyo — UTM-30LX, а FOV — от to . И настройка такая же, как шаг 6turtlebot_gazebo.urdf.xacro
Строки 89, 90 в файле.
<min_angle>-1.570796</min_angle>
<max_angle>1.570796</max_angle>
изменить на:
<!-- FOV from -3*pi/4 to 3*pi/4 -->
<min_angle>-2.356194</min_angle>
<max_angle>2.356194</max_angle>
В конфигурации хокуйо по умолчанию устанавливается на лоб черепашки, если вы хотите установить его посередине, вы можете изменить 10-ю строку шага 5 на:
<origin xyz="0.10 0 0.435" rpy="0 0.0 0.0" />
изменить на
<origin xyz="0.0 0 0.435" rpy="0 0.0 0.0" />
Обратив внимание на вышеперечисленные пункты, после завершения настройки вы можете модифицировать переменные окружения:
gedit .bashrc
#在最后添加以下内容
#For gazebo
export TURTLEBOT_BASE=kobuki
export TURTLEBOT_STACKS=hexagons
export TURTLEBOT_3D_SENSOR=hokuyo
После запуска все в норме, лазер имеет данные, топик/скан в норме
source /opt/ros/indigo/setup.bash
roslaunch turtlebot_gazebo explorer.launch
roslaunch turtlebot_rviz_launchers view_navigation.launch
Измененный робот-черепашка + лазерный хокуйо, обратите внимание, что в настоящее время Kinect на роботе больше нет. Turtlebot+hokuyo отображается в rviz:
черепашка+хокуйо в беседке:
3.2 Среда моделирования + картограф
существует~/cartographer_turtlebot_ws/src/cartographer_turtlebot/launch
Создайте новый файл в папкеturltebot_hokuyo.launch
,
<!-- turtlebot_hokuyo.launch -->
<launch>
<param name="/use_sim_time" value="true" />
<node name="cartographer_node" pkg="cartographer_ros"
type="cartographer_node" args="
-configuration_directory
$(find cartographer_turtlebot)/configuration_files
-configuration_basename turtlebot_hokuyo.lua"
output="screen">
<!--remap from="base_footprint" to="/base_link" /-->
<!--remap from="scan" to="/laser_scan" /-->
</node>
<node name="flat_world_imu_node" pkg="cartographer_turtlebot"
type="cartographer_flat_world_imu_node" output="screen">
<!--remap from="imu_in" to="/mobile_base/sensors/imu_data_raw" /-->
<remap from="imu_in" to="/mobile_base/sensors/imu_data" />
<remap from="imu_out" to="/imu" />
</node>
<node name="rviz" pkg="rviz" type="rviz" required="true"
args="-d $(find cartographer_turtlebot
)/configuration_files/demo_turtlebot.rviz" />
<node name="cartographer_occupancy_grid_node" pkg="cartographer_ros"
type="cartographer_occupancy_grid_node" args="-resolution 0.05" />
</launch>
существует~/cartographer_turtlebot_ws/src/cartographer_turtlebot/configuration_files
Создайте новый файл в папкеturltebot_hokuyo.lua
<!-- turtlebot_hokuyo.lua -->
include "map_builder.lua"
include "trajectory_builder.lua"
options = {
map_builder = MAP_BUILDER,
trajectory_builder = TRAJECTORY_BUILDER,
map_frame = "map",
tracking_frame = "gyro_link",
published_frame = "odom",
odom_frame = "odom",
provide_odom_frame = false,
publish_frame_projected_to_2d = false,
use_odometry = true,
use_nav_sat = false,
use_landmarks = false,
num_laser_scans = 1,
num_multi_echo_laser_scans = 0,
num_subdivisions_per_laser_scan = 1,
num_point_clouds = 0,
lookup_transform_timeout_sec = 0.2,
submap_publish_period_sec = 0.3,
pose_publish_period_sec = 5e-3,
trajectory_publish_period_sec = 30e-3,
rangefinder_sampling_ratio = 1.,
odometry_sampling_ratio = 0.1,
fixed_frame_pose_sampling_ratio = 1.,
imu_sampling_ratio = 1.,
landmarks_sampling_ratio = 1.,
}
MAP_BUILDER.use_trajectory_builder_2d = true
TRAJECTORY_BUILDER_2D.min_range = 0.1
TRAJECTORY_BUILDER_2D.max_range = 8.
TRAJECTORY_BUILDER_2D.missing_data_ray_length = 5.
TRAJECTORY_BUILDER_2D.use_imu_data = false
TRAJECTORY_BUILDER_2D.use_online_correlative_scan_matching = true
TRAJECTORY_BUILDER_2D.motion_filter.max_angle_radians = math.rad(0.1)
POSE_GRAPH.constraint_builder.min_score = 0.65
POSE_GRAPH.constraint_builder.global_localization_min_score = 0.7
return options
После завершения вышеуказанной конфигурации запустите
source /opt/ros/indigo/setup.bash
roslaunch turtlebot_gazebo explorer.launch
roslaunch cartographer_turtlebot turtlebot_hokuyo.launch
gazebo rviz
debug...
Вам нужно только настроить его в соответствии с описанным выше процессом.Проблемы, возникающие в процессе исследования, записываются здесь, просто для записи, вы можете их игнорировать.
Когда я напрямую использую оригиналturtlebot_urg_lidar_2d.lua
файл, произошла ошибкаmap_by_time.h:43] Check failed: data.time > std::prev(trajectory.end())->first #831
, соответствующие URL-адреса вопросов и ответов размещены здесь для справкиmap_by_time.h:43, Ошибка проверки: data.time > std::prev(trajectory.end())->first #831
Я воспользовался методом этого человека и внес соответствующие исправления в файл .lua, и все заработало.
До сих пор мы могли использовать черепаху + хокуйо и картографа для построения карт и позиционирования в моделировании беседки.
4. turtlebot+hokuyo+cartographer in real world
Если черепахобот+хокуйо+картограф прогоняется в беседке, его можно применить к реальным роботам-черепашкам с некоторыми модификациями.
- 1. Установите и настройте hokuyo_node
Если ros — это версия индиго, запустите ее напрямую.sudo apt-get install ros-indigo-hokuyo-node
Установить. Если это кинетическая версия, ее необходимо установить из исходников.Пожалуйста, скомпилируйтеdriver_common
позжеgit clone hokuyo_node
, скомпилировать.
cd ~/cartographer_turtlebot_ws/src
git clone https://github.com/ros-drivers/driver_common.git
cd ..
catkin_make
cd ~/cartographer_turtlebot_ws/src
git clone git clone https://github.com/ros-drivers/hokuyo_node.git
cd ..
catkin_make
бегатьls -l /dev/ttyACM0
, если сообщается об ошибке и нет целевого файла, это означает, что компьютер не настроен с модулем последовательного порта ACM. Этого не должно происходить на обычных ПК, я сталкивался с этим на Nvidia TX2. Для решения, пожалуйста, обратитесь к моему другому блогуTX2 устанавливает драйвер последовательного порта ttyACM.
Если это показываетcrw-rw-XX- 1 root dialout 166, 0 2009-10-27 14:18 /dev/ttyACM0
, потом нормально, потом запуститьsudo chmod a+rw /dev/ttyACM0
.
Затем черепаха-бот подключается к хокуйо и бежит.
roscore
rosrun hokuyo_node hokuyo_node
Посмотрите, публикуются ли лазерные данные
rostopic echo /scan
- 2. Запрограммировать стартовый файл запуска.
cd ~/cartograher_turtlebot_ws/src/cartographer_turtlebot/launch
gedit turtlebot_hokuyo_realworld.launch
<launch>
<arg name="configuration_basename" />
<include file="$(find turtlebot_bringup)/launch/minimal.launch" />
<node name="hokuyo_node" pkg="hokuyo_node" type="hokuyo_node">
<param name="frame_id" value="hokuyo_link"/>
</node>
<node name="cartographer_node" pkg="cartographer_ros"
type="cartographer_node" args="
-configuration_directory
$(find cartographer_turtlebot)/configuration_files
-configuration_basename $(arg configuration_basename)"
output="screen">
<!--remap from="points2" to="/camera/depth/points" /-->
</node>
<node name="flat_world_imu_node" pkg="cartographer_turtlebot"
type="cartographer_flat_world_imu_node" output="screen">
<remap from="imu_in" to="/mobile_base/sensors/imu_data" />
<remap from="imu_out" to="/imu" />
</node>
<node name="rviz" pkg="rviz" type="rviz" required="true"
args="-d $(find cartographer_turtlebot
)/configuration_files/demo_turtlebot.rviz" />
<node name="cartographer_occupancy_grid_node" pkg="cartographer_ros"
type="cartographer_occupancy_grid_node" args="-resolution 0.05" />
</launch>
бегатьroslaunch cartographer_turtlebot turtlebot_hokuyo_realworld.launch
.