文章目录

  • 那么之前测试不好的解释有以下几点
  • 编写launch
  • 测试bug猜测:
    • 激光数据和MIT的不一样,MIT的激光原数据好,我们的差
  • 不跑karto只录制信息
  • 终于找到问题根源啦!
  • 又出问题拉,出大问题。
    • [ WARN] [1578669454.733878780]: Could not get robot pose, cancelling reconfiguration

之前如 此处进行karto_slam算法包的安装
kartoslam算法的launch文件如下

<launch><!-- Define laser type--><arg name="laser_type" default="rplidar" /><!-- laser driver --><include file="$(find turtlebot_navigation)/laser/driver/$(arg laser_type)_laser.launch" /><!-- karto.launch--><arg name="custom_karto_launch_file" default="$(find turtlebot_navigation)/launch/includes/karto/$(arg laser_type)_karto.launch.xml"/><include file="$(arg custom_karto_launch_file)"/><!-- Move base --><include file="$(find turtlebot_navigation)/launch/includes/move_base.launch.xml"/></launch>

在rplidar_karto.launch.xml中内容为

<launch><node pkg="slam_karto" type="slam_karto" name="slam_karto" output="screen"><remap from="scan" to="scan"/><param name="odom_frame" value="odom"/><param name="map_update_interval" value="25"/><param name="resolution" value="0.025"/></node>
</launch>

也就是说custom_karto_launch_file只有一个slam_karto的node
然后说说move_base.launch.xml

<!-- ROS navigation stack with velocity smoother and safety (reactive) controller
-->
<launch><include file="$(find turtlebot_navigation)/launch/includes/velocity_smoother.launch.xml"/><include file="$(find turtlebot_navigation)/launch/includes/safety_controller.launch.xml"/><arg name="odom_frame_id"   default="odom"/><arg name="base_frame_id"   default="base_footprint"/><arg name="global_frame_id" default="map"/><arg name="odom_topic" default="odom" /><arg name="laser_topic" default="scan" /><arg name="custom_param_file" default="$(find turtlebot_navigation)/param/dummy.yaml"/><node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen"><rosparam file="$(find turtlebot_navigation)/param/costmap_common_params.yaml" command="load" ns="global_costmap" /><rosparam file="$(find turtlebot_navigation)/param/costmap_common_params.yaml" command="load" ns="local_costmap" />   <rosparam file="$(find turtlebot_navigation)/param/local_costmap_params.yaml" command="load" />   <rosparam file="$(find turtlebot_navigation)/param/global_costmap_params.yaml" command="load" /><rosparam file="$(find turtlebot_navigation)/param/dwa_local_planner_params.yaml" command="load" /><rosparam file="$(find turtlebot_navigation)/param/move_base_params.yaml" command="load" /><rosparam file="$(find turtlebot_navigation)/param/global_planner_params.yaml" command="load" /><rosparam file="$(find turtlebot_navigation)/param/navfn_global_planner_params.yaml" command="load" /><!-- external params file that could be loaded into the move_base namespace --><rosparam file="$(arg custom_param_file)" command="load" /><!-- reset frame_id parameters using user input data --><param name="global_costmap/global_frame" value="$(arg global_frame_id)"/><param name="global_costmap/robot_base_frame" value="$(arg base_frame_id)"/><param name="local_costmap/global_frame" value="$(arg odom_frame_id)"/><param name="local_costmap/robot_base_frame" value="$(arg base_frame_id)"/><param name="DWAPlannerROS/global_frame_id" value="$(arg odom_frame_id)"/><remap from="cmd_vel" to="navigation_velocity_smoother/raw_cmd_vel"/><remap from="odom" to="$(arg odom_topic)"/><remap from="scan" to="$(arg laser_topic)"/></node>
</launch>

这里除了两个为了使得运动平滑的launch文件velocity_smoother.launch.xml和safety_controller.launch.xml之外还运行了move_base节点,因为之前测试的时候使用MIT的bag文件我发现只有运行kartoslam的包,但是没有运行movebase的包

那么之前测试不好的解释有以下几点

  1. 激光数据和MIT的不一样,MIT的激光原数据好,我们的差
  2. 代码中的参数调整不是很好(可能性小,因为直接使用kartoslam跑MITbag效果不错)
  3. 周围环境玻璃太多,环境复杂
  4. 我们实际launch文件里面有movebase,也许movebase会对结果有影响。

Karto_slam跑激光雷达MITbag文件
roscore
rosrun slam_karto slam_karto
rosbag play ~/bagfile/script/data.bag
rosrun rviz rviz

实际运行kartoslam在tb2上的代码:
roscore
roslaunch turtlebot_bringup minimal.launch
roslaunch turtlebot_navigation rplidar_karto_demo.launch
roslaunch turtlebot_teleop keyboard_teleop.launch
roslaunch turtlebot_rviz_launchers view_navigation.launch

对了 在运行launch文件的时候最好加一个 --screen 可以把每一个node的输出显示在终端

编写launch

<launch>   指roslaunch语句的开始和结束。<node>     这是对于节点运行的标签。您可以更改功能包、节点名称和执行名称。<machine>   可以设置运行该节点的PC的名称、address、ros-root和ros-package-path。<include>  您可以加载属于同一个功能包或不同的功能包的另一个launch,并将其作为一个launch
文件来运行。<remap>     可以更改节点名称、话题名称等等,在节点中用到的ROS变量的名称。<env>     设置环境变量,如路径和IP(很少使用)。<param>   设置参数名称、类型、值等<rosparam>     可以像rosparam命令一样,查看和修改load、dump和delete等参数信息。<group>   用于分组正在运行的节点。<test> 用于测试节点。类似于<node>,但是有可以用于测试的选项。<arg>    可以在launch文件中定义一个变量,以便在像下面这样运行时更改参数。

MIT数据测试:

rosbag play ~/bagfiles/script/data.bag
roslaunch turtlebot_rviz_launchers view_navigation.launch

自己节点运行:kartoslam.launch

<launch><include file="$(find turtlebot_bringup)/launch/minimal.launch" /><include file="$(find turtlebot_navigation)/launch/rplidar_karto_demo.launch"/><include file="$(find turtlebot_teleop)/launch/keyboard_teleop.launch"/>
</launch>

测试bug猜测:

  1. 激光数据和MIT的不一样,MIT的激光原数据好,我们的差
  2. 代码中的参数调整不是很好(可能性小,因为直接使用kartoslam跑MITbag效果不错)
  3. 周围环境玻璃太多,环境复杂
  4. 我们实际launch文件里面有movebase,也许movebase会对结果有影响。

激光数据和MIT的不一样,MIT的激光原数据好,我们的差

  • 打开rviz查看MIT激光和我们的激光数据的差别
    运行MITbag文件的时候只是单纯的运行rosrun slam_karto slam_karto
    RVIZ中会显示这些东西导致看不到模型,localmap(当然也不需要)以及laserscan
    parameter [robot_description]does not exist,and was not found by searchParam()
    local map - costmap :No map received
    LaserScan:For frame[base_laser_link]:No transform to fixed frame [map].TF error:[Lookup would require extrapolation into the past.Requested time 238.889998999 but the earliest data is at time 1578367989.428750344,when looking up transfrom from frame [base_laser_link] to frame [map]
    所以应该是没有发布出baselink到laser的tf
    新建一个launch文件 MIT.launch
<launch><node pkg="tf" type="static_transform_publisher" name="base_to_laser" args="0.0 0.0 0.18 0 0.0 0.0 base_link laser 100"/><node pkg="slam_karto" type="slam_karto" name="slam_karto" output="screen"><remap from="scan" to="scan"/><param name="odom_frame" value="odom"/><param name="map_update_interval" value="25"/><param name="resolution" value="0.025"/></node>
</launch>

和 kartoslam.launch唯一的区别就是没有运行

<!-- Move base --><include file="$(find turtlebot_navigation)/launch/includes/move_base.launch.xml"/>

这个launch文件


roslaunch kartoslam MIT.launch --screen
rosbag play ~/bagfiles/script/data.bag
rviz 然后把Global Options中的fixed frameg改成baselinke

此次MIT数据运行使用这里gif制作工具
在运行roslaunch kartoslam MIT.launch --screen的时候提示:

Warning: TF_OLD_DATA ignoring data from the past for frame base_link at time 147.46 according to authority unknown_publisher
Possible reasons are listed at http://wiki.ros.org/tf/Errors%20explained
at line 277 in /tmp/binarydeb/ros-kinetic-tf2-0.5.20/src/buffer_core.cpp

下面是MIT的激光数据
他运行的时候也并没有在一个地方绕环过久,直接走就可以了


我上一次运行录下的bag文件
可以很明显的看出来,scan数据十分的卡顿,不流畅
至于
2. 代码中的参数调整不是很好(可能性小,因为直接使用kartoslam跑MITbag效果不错)
3. 周围环境玻璃太多,环境复杂
4. 我们实际launch文件里面有movebase,也许movebase会对结果有影响。
实际查看了一下雷达高度并没有很多玻璃存在,从图也可以看出,

这里是接水的地方 但是其实里面有物体存在,所以大部分并不造成很大影响

所以我认为很大的一个问题就是我们的激光数据实在是太卡顿了,所以我打算单独不跑kartoslam的记录一下数据,顺便不用ssh链接接受bag 直接保存在本地,因为这个也可能是原因

不跑karto只录制信息

规定一下路线,从工位中间开始接受雷达数据,然后走到多媒体那边的空地中间掉头,然后到另一边尽头走廊中间,然后往厕所岔路口掉头回到工位。

结果发现的确是不运行kartoslam以及不用ssh接受bag而是保存在本地,激光数据连贯多了,不过因为地形的原因,在沙发、玻璃等地方很难找到有效的点。

接下来跑一跑这个记录的bag在kartoslam上的效果。
最后bag建图情况
这个图依然是倒过来的 相当于把地图放在玻璃桌子上,然后我们从下面看,不过问题依然很大,首先工位和沙发都是胡在一起,然后莫名其妙有很多小波纹,其次在L形拐角处,我们那边本该检测到的墙壁到了本该没有墙壁的地方

以及这里的电梯入口被堵住了。
这次没有运行movebase,但是还是很差,感觉所有的结论都要从激光和环境讲起了。要更换一个比较简单的环境比较好,其次,再看看哪些参数可以适应我们这种环境。
仔细分析一下会发现,这些在墙壁上一横一横的东西,


(电梯)
(卫生间岔路口)
四个工位处
貌似都是墙体或者平面出现的地方,我猜测是因为他没有吧新的scan判定为原来第一次出现的平面,造成了这种会有很多平面,实际上只有一个平面的存在。

然后我又跑了一次,竟然路径变得不一样了,而且上面这个地方是第一次走向厕所就有的,我在想会不会是的确有这个地方,这个墙,但是因为我搞不清楚他地图
运行过程

所以现在有两个疑点,到底 这个地图是怎么构建的,然后第二点是修改哪些参数能够修改这种奇怪的波纹和地图分布

终于找到问题根源啦!

我发现问题根源所在啦!


又出问题拉,出大问题。

建图到一半

Could not get robot pose, cancelling reconfiguration Extrapolation Error looking up robot pose: Lookup would require extrapolation into the past.

[ERROR] [1577803544.186413799]: Extrapolation Error looking up robot pose: Lookup would require extrapolation into the past. Requested time 1577803395.635771648 but the earliest data is at time 1577803534.160161966, when looking up transform from frame [base_footprint] to frame [map]
这个我之前也遇到过 有进行资料查询

有说是主从机因为网络原因导致的时间不同步。
实验1:修改local_costmap_params.yaml和global_costmap_params.yaml两个文件中的transform_tolerance=10(之前是2->5,现在->10)

实验结果:
依然在建图大部分之后

[ INFO] [1578456428.827163199]: Calling doSPA for loop closure[ INFO] [1578456428.837986198]: Finished doSPA for loop closure[slam_karto-11] process has died [pid 13146, exit code -11, cmd /home/asber/turtlebot_ws/devel/lib/slam_karto/slam_karto scan:=scan __name:=slam_karto __log:=/home/asber/.ros/log/328a1216-31cb-11ea-8f97-28c2dd4c2a6d/slam_karto-11.log].log file: /home/asber/.ros/log/328a1216-31cb-11ea-8f97-28c2dd4c2a6d/slam_karto-11*.log[ERROR] [1578456438.366370194]: Kobuki : malformed sub-payload detected. [129][170][81 AA 55 4D 01 0F ][ WARN] [1578456438.961491661]: Costmap2DROS transform timeout. Current time: 1578456438.9614, global_pose stamp: 1578456428.9330, tolerance: 10.0000[ WARN] [1578456438.961598209]: Could not get robot pose, cancelling reconfiguration[ERROR] [1578456439.043270114]: Extrapolation Error looking up robot pose: Lookup would require extrapolation into the past.  Requested time 1578456428.932966528 but the earliest data is at time 1578456429.071418350, when looking up transform from frame [base_footprint] to frame [map]

那我们在本地建图如何通过遥控键盘控制试试看效果怎么样。
果然在键盘单独本地运行就不会出现问题。
那就是网络延时造成的问题了


[ WARN] [1578669454.733878780]: Could not get robot pose, cancelling reconfiguration

[ERROR] [1578669455.533468334]: Extrapolation Error looking up robot pose: Lookup would require extrapolation into the past. Requested time 1578669101.339670111 but the earliest data is at time 1578669445.509893491, when looking up transform from frame [base_footprint] to frame [map]

有wiki上说是因为电脑的性能不够,然后把一些可视化或者占据内存的程序取消之后就好了

kartoslam找bug之行相关推荐

  1. 介绍一种找bug的方法

    总第186篇/张俊红 今天介绍一种找bug的方法,分段执行.这个概念不知道多会进入到我脑海中的,可能是有这么一种专门的叫法.特地去网上查了查,好像并没有,只查到了某地方警察办案在通过推行分段执行来提高 ...

  2. 浅谈工作/学习中找bug的思路_0_调试、try-catch以及打印报错信息和百度的方法、No default constructor for entity: com.gyf.bos.mod

    浅谈工作/学习中找bug的思路_0 文章目录 浅谈工作/学习中找bug的思路_0 调试.try-catch-以及打印报错信息和百度的方法 前言 描述 解决思路1 -- 检查移植的代码,细枝末节也不要忽 ...

  3. 给简书找BUG赢好礼17.04.11——简书iOS 3.5.0 公测【 App内支持提现/创作流程优化】...

    你给简书找bug,简书给你送好礼.即日起,参与简书公测就有机会获得简书提供的精美周边!点我快速获得公测资格>> 本期公测版本-简书iOS 3.5.0: 更新说明 1.1 App内支持直接提 ...

  4. 给简书找BUG赢好礼17.11.27——简书iOS 4.2.0 公测(全新简友圈、发现页;连载内容横空出世)...

    这一次,我们很不一般!简书iOS最新版4.2.0公测!现在召集首批体验的用户,您的意见将会非常地宝贵和重要! 为表达谢意,凡参与简书公测,就有机会获得简书提供的精美周边! 点击下载4.2.0>& ...

  5. 给简书找BUG赢好礼17.06.02——简书Android 2.4.0 公测【私密文章支持预览/手机支持直接提现】...

    你给简书找bug,简书给你送好礼.即日起,参与简书公测就有机会获得简书提供的精美周边!公测版下载>>公测版下载备用地址>> 本期公测版本-简书Android 2.4.0: 更新 ...

  6. 客户花钱雇黑客,竟是为Zoom找bug:风口浪尖的视频会议No.1,安全问题如此魔幻...

    白交 鱼羊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 客户花钱找黑客,帮你产品找Bug-- 这样的客户哪里找?这样的产品又究竟有怎样的福报? Zoom,疫情之下最火爆的视频会议公司,又上演 ...

  7. Java黑皮书课后题第8章:**8.14(探讨矩阵)编写程序,提示用户输入一个方阵的长度,随机地在矩阵中填入0和1,打印这个矩阵,然后找出整行、整列或者对角线都是1或0的行、列和对角线

    **8.14(探讨矩阵)编写程序,提示用户输入一个方阵的长度,随机地在矩阵中填入0和1,打印这个矩阵,然后找出整行.整列或者对角线都是1或0的行.列和对角线 题目 题目描述与运行示例 破题 代码 题目 ...

  8. [LeetCode] Find Largest Value in Each Tree Row 找树每行最大的结点值

    You need to find the largest value in each row of a binary tree. Example: Input: 1/ \3 2/ \ \ 5 3 9 ...

  9. HDLBits答案(23)_找BUG

    Finding bugs in code HDLBits链接 前言 今天更新HDLBits习题部分找BUG部分,比较简单,大家看一下即可. 题库 8bit_2_1_Mux 原Code: module ...

最新文章

  1. 解析自动驾驶算法四大模块的问题与后续发展
  2. 51Nod 1007 正整数分组(01背包)
  3. sqlserver 安装_安装sqlserver
  4. python爬虫应用实战-如何爬取好看的小姐姐照片?
  5. axure文件如何加密_rp文件命名也可能导致文件无法打开
  6. html实现3d视觉特效
  7. CodeForces - 1000C Covered Points Count(差分+思维)
  8. how to find all element type with type table of content
  9. android程序启动动画,Android设置软件启动动画(以及初次安装的几张引导图)
  10. SQL--合并多条记录为一条记录
  11. 编译原理:文法及其二义性(判定及消除)
  12. 前沿 | NVIDIA PyTorch库让3D深度学习研究更简单!
  13. 《天天数学》连载14:一月十四日
  14. line java_java – Line Rasterization / 4-bresenham
  15. 软件设计师12-数据库(范式)
  16. 什么是WBS分解法?
  17. Day9 Four French Words Pronounced Differently in English
  18. [Git]删除git文件历史记录
  19. 逐点插入法-delaunay三角剖分
  20. telegram自动发信息_zabbix调用telegram机器人发送报警消息

热门文章

  1. 面向接口编程VS《倚天屠龙记》里张三丰教无忌打太极
  2. 台式机安装windowsXP和ubuntu双系统
  3. 发布《IBM虚拟机J9指南》
  4. elasticjob已下线_elasticJob 源码解析之自诊断恢复
  5. 学习云计算前景如何?云计算成为获取人工智能主要途径
  6. Uber牵手戴姆勒共事自动驾驶,探索未来出行模式
  7. Navicat导入Excel提示无法打开Excel文件
  8. python arp协议分析_通过python对本局域网进行ARP扫描获取MAC
  9. 读论文——Pre-Training with Whole Word Masking for Chinese BERT(2021 11.25)
  10. Python装逼神器,5 行 Python 代码 实现一键批量扣图!