基于ros2 dashing的建图导航探索
基于ros2 dashing的建图导航探索
1、 环境准备
安装ros2 dashing, 参考链接:
https://index.ros.org/doc/ros2/Installation/Dashing/Linux-Install-Debians/
安装gazebo
$ sudo apt remove gazebo11 libgazebo11-dev
$ sudo apt install gazebo9 libgazebo9-dev
$ sudo apt install ros-dashing-gazebo-ros-pkgs
安装cartography:
$ sudo apt install ros-dashing-cartographer
$ sudo apt install ros-dashing-cartographer-ros
安装navigation:
$ sudo apt install ros-dashing-navigation2
$ sudo apt install ros-dashing-nav2-bringup
安装vcstool:
$ sudo apt install python3-vcs
安装turtlebot3包:
使用apt方式:
$ source /opt/ros/dashing/setup.bash
$ sudo apt install ros-dashing-dynamixel-sdk
$ sudo apt install ros-dashing-turtlebot3-msgs
$ sudo apt install ros-dashing-turtlebot3tool
或者使用源码方式:
$ sudo apt remove ros-dashing-turtlebot3-msgs
$ sudo apt remove ros-dashing-turtlebot3
$ mkdir -p ~/turtlebot3_ws/src
$ cd ~/turtlebot3_ws/src/
$ git clone -b dashing-devel https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git
$ git clone -b dashing-devel https://github.com/ROBOTIS-GIT/turtlebot3.git
$ colcon build --symlink-install
$ source ~/.bashrc
下载gazebo的模型,加速运行gazebo
cd ~/.gazebo/
git clone https://github.com/osrf/gazebo_models models
需要删除.git目录,要不运行会出错
rm -rf models/.git
设置GAZEBO_MODEL_PATH变量, 指定机器人类型为burger
$ echo 'export GAZEBO_MODEL_PATH=$GAZEBO_MODEL_PATH:~/tb3_ws/src/turtlebot3/turtlebot3_simulations/turtlebot3_gazebo/models' >> ~/.bashrc #变更为对应的turtlebot3模型地址
$ echo 'export TURTLEBOT3_MODEL=waffle' >> ~/.bashrc
$ source ~/.bashrc
配置其他环境变量:
$ echo 'source /opt/ros/dashing/setup.bash' >> ~/.bashrc
$ echo 'source ~/turtlebot3_ws/install/setup.bash' >> ~/.bashrc
$ echo 'export ROS_DOMAIN_ID=30 #TURTLEBOT3' >> ~/.bashrc
$ source ~/.bashrc
2、使用cartography建图相关探索
2.1 建图流程
打开仿真世界launch文件:
$ ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
打开建图launch文件:
$ ros2 launch turtlebot3_cartographer cartographer.launch.py use_sim_time:=True
打开小车运动控制节点:
$ ros2 run turtlebot3_teleop teleop_keyboard
控制小车移动,直到在rviz里看到完整的地图,保存地图:
$ ros2 run nav2_map_server map_saver -f ~/map
激光数据话题重定向问题:
打开建图的launch文件后,理论上应该会看到小车当前激光雷达扫描的状态,但实际上rviz里啥也没有,并且有报错说frame [map] is not exist.
经过定位问题发现,话题/scan并没有发布数据,故而无法生成map, 而后发现该问题是由于模拟器中,雷达数据以/turtlebot3_laserscan/out话题发布, 需要做个话题remapping,将数据映射到/scan话题中。
解决方法: 参考链接 https://github.com/ros-simulation/gazebo_ros_pkgs/issues/991 中issue所述,问题已经在ros2 e及f版本中解决,在d版本中,打开文件:turtlebot3/turtlebot3_simulations/turtlebot3_gazebo/models/turtlebot3_waffle/model.sdf,在160行左右,将文件改为如下后,在/scan下可正常获得数据:
<plugin name="turtlebot3_laserscan" filename="libgazebo_ros_ray_sensor.so">
<ros>
<!-- <namespace>/tb3</namespace> -->
<argument>--ros-args</argument>
<argument>-r</argument>
<argument>~/out:=scan</argument>
</ros>
<output_type>sensor_msgs/LaserScan</output_type>
<frame_name>base_scan</frame_name>
</plugin>
2.2 cartography的配置文件
配置文件名称及路径:
turtlebot3/turtlebot3/turtlebot3_cartographer/config/turtlebot3_lds_2d.lua
相关配置解读:
1 map_frame:
用来发布子图,是poses的父帧,通常是“map”。
和odom最开始的时候是一个原点,但时间累计对产生累积误差。
2 tracking_frame:
由SLAM算法跟踪的坐标系。如果使用IMU,尽管它可能是旋转的,它也应该在其位置。
一个常见的选择是“imu_link”。
3 published_frame:
这个frame是用来正在发布poses的子帧,和map_frame对应。
一般就将其设置为"base_link",这不就是"map->base_link"。
找坐标能找到了不!!!
4 odom_frame:
仅在provide_odom_frame为true时使用。
published_frame 和 map_frame之间的框架,用于发布(非循环关闭)local SLAM结果。
默认是“odom”。
5 provide_odom_frame:
如果启用,则local-slam估计的连续的姿态(不包括回环)将作为map_frame中 odom_frame发布。
6 publish_frame_projected_to_2d:
如果启用,则已发布的pose将限制为纯2D姿势(无滚动,俯仰或z偏移)。
这可以防止在2D模式中由于"pose extrapolation
step"而发生的"out-of-plane"(如果姿势应该作为类似“base-footprint”发布)。
7 use_odommetry:
如果启用,请在主题“odom”上订阅nav_msgs/Odometry。
在这种情况下必须提供"Odommetry",并且信息将包含在SLAM中。
8 use_nav_sat:
如果启用,请在主题“fix”上订阅sensor_msgs / NavSatFix。 在这种情况下必须提供Navigation data,并且信息将包含在全局SLAM中。
9 use_landmarks:
如果启用,请在主题“Landmarks”上订阅cartographer_ros_msgs / LandmarkList。
在这种情况下必须提供Landmarks,并且信息将包含在SLAM中。
10 num_laser_scans:
订阅的激光扫描主题数量。
在一个激光扫描仪的“扫描”主题上订阅sensor_msgs /LaserScan
或在多个激光扫描仪上订阅主题“scan_1”,“scan_2”等。
11 num_subdivisions_per_laser_scan:
将每个接收到的(multi-echo)激光扫描分割成的点云数。
细分扫描可以在扫描仪移动时取消扫描获取的扫描。
有一个相应的轨迹构建器选项可将细分扫描累积到"用于scan_matching的点云"中。
12 num_multi_echo_laser_scans:
订阅的multi-echo激光扫描主题的数量。
在一个激光扫描仪的“echoes”主题上订阅sensor_msgs / MultiEchoLaserScan,
或者为多个激光扫描仪订阅主题“echoes_1”,“echoes_2”等。
时间间隔设置参数:
13 lookup_transform_timeout_sec:
使用tf2查找变换的超时时间
14 submap_publish_period_sec:
发布子图的时间间隔,单位是秒
15 pose_publish_period_sec:
发布pose的时间间隔,比如:5e-3频率是200Hz
16 trajectory_publish_period_sec:
以秒为单位发布轨迹标记的间隔,例如, 30e-3持续30毫秒。
其中,不使用imu数据参与建图,可将use_imu_data设为false:
TRAJECTORY_BUILDER_2D.use_imu_data = false
其中,不使用odom数据参与建图,可将use_odometry设为false,并将published_frame从odom修改为base_link或base_footprint
use_odometry = false
published_frame = "base_link" #否则tf转换会出现问题,导致无法建图,参考: https://answers.ros.org/question/311263/odometry-with-cartographer/
3. navigation导航相关探索
3.1 导航流程
参考链接可正常运行:
https://github.com/mlherd/navigation2/tree/new-tutorials/doc/tb3_tutorial
启动gazebo:
ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
启动navigation:
ros2 launcturtlebot3_navigation2 navigation2.launch.py use_sim_time:=True map:='/opt/ros/dashing/share/nav2_bringup/launch/turtlebot3_world.yaml' # map需改为对应的文件及路径
启动rviz:
ros2 run rviz2 rviz2 -d /opt/ros/dashing/share/nav2_bringup/launch/nav2_default_view.rviz
在rviz点击左下角startup启动按钮:

在rviz点击启动设置初始位姿按钮2D Pose Estimate,并设置初始位姿:

在rviz点击启动设置初始位姿按钮Navigation2 Goal,设置目标点位姿:

此时可见生成了一条运动轨迹,并在gazebo里能看到小车按照轨迹在运动:

遇到的问题1:
刚开始运行的时候参考了链接: https://emanual.robotis.com/docs/en/platform/turtlebot3/slam_simulation/, 以及链接: https://www.ncnynl.com/archives/202008/3852.html.
运行ros2 launch turtlebot3_navigation2 navigation2.launch.py use_sim_time:=True map:=$HOME_PATH/map.yaml失败,发现navigation2.launch.py中所需要的bringup.launch.py在dashing 版本的nav2_bringup中不存在,在foxy版本中才有,故而尝试将navigation2.launch.py中的launch文件更新为nav2_bringup_launch.py
IncludeLaunchDescription(
PythonLaunchDescriptionSource([nav2_launch_file_dir, '/nav2_bringup_launch.py']), #需要修改此处
launch_arguments={
'map': map_dir,
'use_sim_time': use_sim_time,
'params': param_dir}.items(),
),
遇到的问题2:
运行后发现rviz里不能发现map, 也没有相关地图显示,检索后发现到了以下issue: https://github.com/ros-planning/navigation2/issues/1042, 指出需要在rviz里点击一些startup按钮,并需要指定初始位姿,才可以开始导航。
参考链接:
https://blog.csdn.net/SimileciWH/article/details/84861718
https://www.cnblogs.com/jiangxinyu1/p/12458699.html
基于ros2 dashing的建图导航探索的更多相关文章
- SLAM+语音机器人DIY系列:(六)SLAM建图与自主避障导航——2.google-cartographer机器人SLAM建图
摘要 通过前面的基础学习,本章进入最为激动的机器人自主导航的学习.在前面的学习铺垫后,终于迎来了最大乐趣的时刻,就是赋予我们的miiboo机器人能自由行走的生命.本章将围绕机器人SLAM建图.导航避障 ...
- cartographer环境建立以及建图测试(详细级)
- 基于CarbonData的电信时空大数据探索
摘要:作为IOT最底层的无线通信网络生成大量与位置相关的数据,用于无线通信网络规划和优化,帮助电信运营商建设更好体验的精品网络,构建万物互联的信息社会. 本文分享自华为云社区<基于CarbonD ...
- 【BZOJ-2879】美食节 最小费用最大流 + 动态建图
2879: [Noi2012]美食节 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1366 Solved: 737[Submit][Status] ...
- 基于webpack的前端工程化开发解决方案探索(二):代码分割与图片加载
今天我们继续来进行webpack工程化开发的探索! 首先来验证上一篇文章 基于webpack的前端工程化开发解决方案探索(一):动态生成HTML 中的遗留问题:webpack将如何处理按需加载的 ...
- 【BZOJ-1570】BlueMary的旅行 分层建图 + 最大流
1570: [JSOI2008]Blue Mary的旅行 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 388 Solved: 212[Submit ...
- 【BZOJ-4289】Tax 最短路 + 技巧建图
4289: PA2012 Tax Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 168 Solved: 69[Submit][Status][Dis ...
- CF467D Fedor and Essay 建图DFS
Codeforces Round #267 (Div. 2) CF#267D D - Fedor and Essay D. Fedor and Essay time limit per test ...
- UVa 3487 & 蜜汁建图
题意: 有两家公司都想向政府申请某些资源的使用权,并且他们都提供了一些申请列表,列表中含有申请费用和资源种类,同一家公司的申请列表之间不含有重复的资源.政府只可以完整地接受和拒绝谋一份申请列表,问政府 ...
随机推荐
- python中numpy库的一些使用
想不用第三方库实现点深度学习的基础部分,发现numpy真的好难(笑),在此做点遇到的函数的笔记 惯例官方文档:https://docs.scipy.org/doc/numpy-1.16.1/refer ...
- cartographer环境建立以及建图测试(详细级)
- jQuery读取数据
1.jQuery读取JSON <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "htt ...
- B - How Many Tables (多少桌)
题目大致意思: 有n个人在一起吃饭,有些人互相认识.认识的人想坐在一起,不想跟陌生人坐.例如A认识B,B认识C,那么A.B.C会坐在一张桌子上. 给出认识的人,问需要多少张桌子 Today is Ig ...
- BZOJ 3675: 序列分割 (斜率优化dp)
Description 小H最近迷上了一个分隔序列的游戏.在这个游戏里,小H需要将一个长度为n的非负整数序列分割成k+1个非空的子序列.为了得到k+1个子序列,小H需要重复k次以下的步骤: 1.小H首 ...
- Codeforces Round #655 (Div. 2) B. Omkar and Last Class of Math
题目链接:https://codeforces.com/contest/1372/problem/B 题意 给出一个正整数 $n$,找到两个正整数 $a,b$ 满足 $a+b = n$ 且 $LCM( ...
- C# 网络加密与解密
数据在网络传输过程中的保密性是网络安全中重点要考虑的问题之一.由于通过网络传递数据是在不安全的信道上进行传输的,因此通信双方要想确保任何可能正在侦听的人无法理解通信的内容,而且希望确保接收方接收的信息 ...
- java调用http接口的几种方式总结
本文参考: https://blog.csdn.net/fightingXia/article/details/71775516 https://www.cnblogs.com/jeffen/p/69 ...
- Kubernets二进制安装(17)之安装部署Dashboard
1.下载dashboard镜像 在运维主机(mfyxw50.mfyxw.com)上执行命令 [root@mfyxw50 ~]# docker pull registry.cn-hangzhou.ali ...
- K8S(09)交付实战-通过流水线构建dubbo服务
k8s交付实战-流水线构建dubbo服务 目录 k8s交付实战-流水线构建dubbo服务 1 jenkins流水线准备工作 1.1 参数构建要点 1.2 创建流水线 1.2.1 创建流水线 1.2.2 ...