cartographer-project / cartographer_ros

Provides ROS integration for Cartographer.
Apache License 2.0
1.65k stars 1.2k forks source link

using cartographer localization with ROS navigation stack #1687

Open 2019new opened 3 years ago

2019new commented 3 years ago

Good afternoon, nowdays i have tried using cartographer localization mode with ROS navigation stack. i need cartographer node to provide transform from[map] to [odom], and i check my tf tree, it works well, average rate is 68.07Hz. but when i run the move_base node, error occurred:

[ WARN] [1635227276.440263452, 94.150000000]: Could not transform the global plan to the frame of the controller [ERROR] [1635227276.476144040, 94.190000000]: Extrapolation Error: Lookup would require extrapolation into the future. Requested time 94.190000000 but the latest data is at time 94.180000000, when looking up transform from frame [odom] to frame [map]

[ERROR] [1635227276.476318093, 94.190000000]: Global Frame: odom Plan Frame size 82: map

it seems unable to find transform from[map] to [odom] at specific time? only an older transform available? can anybody tell me why did it happen. Thanks

2019new commented 3 years ago

terminal

eithwa commented 3 years ago

Please provide bag and lua files

2019new commented 3 years ago

Please provide bag and lua files

This problem occurs when i use cartographer to localize my robot in an existing map, my sensor collects information in a Gazebo simulation world. I can provide my lua files scout_2d.lua.txt scout_localization.2d.txt

2019new commented 3 years ago

Please provide bag and lua files

something is wrong and i cannot upload my bag.zip, do you mind leaving an email address

2019new commented 3 years ago

Thank you for your help. i upload my bag file and tf tree. when i use cartographer for localization, and set "2D nav goal" using rviz, this error occurs

At 2021-10-27 10:14:41, "eithwa" @.***> wrote:

Please provide bag and lua files

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe. Triage notifications on the go with GitHub Mobile for iOS or Android.

从网易126邮箱发来的超大附件 tf.png (273.28K, 2021年11月11日 15:25 到期) 在线预览 | 下载 error_msg.zip (127.01M, 2021年11月11日 15:26 到期) 下载

2019new commented 3 years ago

好的感谢帮助。我所用到的三个package已压缩上传。编译需要安装依赖: ros-melodic-ros-control ;ros-melodic-ros-controllers ;ros-melodic-gazebo-ros ;ros-melodic-gazebo-ros-control launch文件都放在scout_gazebo_sim中,Gazebo环境文件也在这个package里,目前使用的model是plaza_2016,使用的world是small_house.world scout_navigation.launch启动move_base相关节点 carto_localization启动map_server加载地图,启动cartographer节点提供定位 scout_small.launch加载机器人模型和Gazebo环境 由于使用了gazebo-ros插件,可能还需要安装gazebo_ros,gazebo_plugin等package

在 2021-10-27 16:01:13,"eithwa" @.***> 写道:

@.*** 若可以的話將你使用move_base和gazebo的相關pack或work space也給我會比較方便幫你找問題

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe. Triage notifications on the go with GitHub Mobile for iOS or Android.

从网易126邮箱发来的超大附件 scout_ws.zip (84.45M, 2021年11月11日 16:32 到期) 下载

xiaowenxiangros commented 1 year ago

想问下您解决了这个问题了吗,我也遇到和您相同的问题 J9TE_E7NZL~(L {V(~H9600

eithwa commented 1 year ago

你好: 我測試後發現問題在於在於odom的tf與topic分散在兩個地方發布,導致時間不同步,造成move_base收到odom topic後,卻找不到對應時間的tf。

xiaowenxiangros commented 1 year ago

你好: 我測試後發現問題在於在於odom的tf與topic分散在兩個地方發布,導致時間不同步,造成move_base收到odom topic後,卻找不到對應時間的tf。

  • 第一個方式:不使用odom。 修改scout_small.启动
<node name="odom_publisher" pkg="scout_gazebo_sim" type="odom_publisher" />

將其刪去,使用CARTOGRAPHER內算出的odom,修改scout_2d.lua以下部分可以解決。

  published_frame = "base_link",
  provide_odom_frame = true, --use simulator odom
  use_odometry = false, 

您好,我的机器人实际情况是这样的,我的odom是由机器人提供的,并没有使用cartographer内算出的odom,.xacro文件我占时没有(小车模型还没有添加),我使用tf2将传感器连接起来的,我该怎么办呢,使用第二种方法吗?第二种方法我的odom哪里该注释掉,我可以给您提供我的lua,launch文件

eithwa commented 1 year ago

您好,我的机器人实际情况是这样的,我的odom是由机器人提供的,并没有使用cartographer内算出的odom,.xacro文件我占时没有(小车模型还没有添加),我使用tf2将传感器连接起来的,我该怎么办呢,使用第二种方法吗?第二种方法我的odom哪里该注释掉,我可以给您提供我的lua,launch文件

由於原問題的環境內,odom topic和tf分別是由xacro文件和odom_publisher發送,因此先刪除xacro部分,改成從odom_publiser共同發送topic和tf。 如果要使用第二種方法,你也需要先找到topic和tf分別是從哪個node發出,將兩個資料使用同一個node發送,以保證它們的時間同步。

xiaowenxiangros commented 1 year ago

您好,我的机器人实际情况是这样的,我的odom是由机器人提供的,并没有使用cartographer内算出的odom,.xacro文件我占时没有(小车模型还没有添加),我使用tf2将传感器连接起来的,我该怎么办呢,使用第二种方法吗?第二种方法我的odom哪里该注释掉,我可以给您提供我的lua,launch文件

由於原問題的環境內,odom topic和tf分別是由xacro文件和odom_publisher發送,因此先刪除xacro部分,改成從odom_publiser共同發送topic和tf。 如果要使用第二種方法,你也需要先找到topic和tf分別是從哪個node發出,將兩個資料使用同一個node發送,以保證它們的時間同步。

您好,请问如何查找odom_publisher 的topic和tf从哪个node发出,这一点不是很理解,麻烦可以详细解释一下吗,我没有使用xacro文件,我的odmo由小车发出

eithwa commented 1 year ago

您好,请问如何查找odom_publisher 的topic和tf从哪个node发出,这一点不是很理解,麻烦可以详细解释一下吗,我没有使用xacro文件,我的odmo由小车发出

查找你的odom資訊從小車裡的哪些程式發送出來,可以使用rqt內的tf_tree和node_graph功能,它們會告訴你這些資訊,接著修改它們,實際修改方式可以參考上面的gist寫法。

xiaowenxiangros commented 1 year ago

您好,请问如何查找odom_publisher 的topic和tf从哪个node发出,这一点不是很理解,麻烦可以详细解释一下吗,我没有使用xacro文件,我的odmo由小车发出

查找你的odom資訊從小車裡的哪些程式發送出來,可以使用rqt內的tf_tree和node_graph功能,它們會告訴你這些資訊,些著修改它們,實際修改方式可以參考上面的gist寫法。

我查看了您给出的cpp文件,我有个疑问,我并无使用gazebo,我使用的实物,里面该怎么同步它们呢

eithwa commented 1 year ago

我查看了您给出的cpp文件,我有个疑问,我并无使用gazebo,我使用的实物,里面该怎么同步它们呢

與是否使用實物無關,您需要做的就是在發送topic(gist62行)的同時,發送tf(gist45行)就能達到同步。

xiaowenxiangros commented 1 year ago

我查看了您给出的cpp文件,我有个疑问,我并无使用gazebo,我使用的实物,里面该怎么同步它们呢

與是否使用實物無關,您需要做的就是在發送topic(gist62行)的同時,發送TF(gist45行)就能達到同步。

想问下创建这样一个时间同步的cpp文件之后,我需要额外的编写launch文件来运行它吗?

eithwa commented 1 year ago

想问下创建这样一个时间同步的cpp文件之后,我需要额外的编写launch文件来运行它吗?

不需要創建一個新的 CPP 文件,而是需要在原始的 odom topic 發佈程式中進行修改。 通常,在您的小車系統中,有一個特定的地方或程式負責計算電機的旋轉編碼器數據,並將其轉換為 odom topic 的消息,您需要修改這部分的程式碼。這個程式碼可能位於控制電機的 Arduino 或 OpenCR 板上,或者它可能集成在您的小車軟體中。

xiaowenxiangros commented 1 year ago

想问下创建这样一个时间同步的CPP文件之后,我需要额外的编写launch文件来运行它吗?

不需要創建一個新的 CPP 文件,而是需要在原始的 odom topic 發佈程式中進行修改。 通常,在您的小車系統中,有一個特定的地方或程式負責計算電機的旋轉編碼器數據,並將其轉換為 odom topic 的消息,您需要修改這部分的程式碼。這個程式碼可能位於控制電機的 Arduino 或 OpenCR 板上,或者它可能集成在您的小車軟體中。

您好,我在调试过程中对于这两个 ros::Subscriber odomSub = node.subscribe<nav_msgs::Odometry ros::Publisher odomPub = node.advertise("odom", 1000); 里面对应的参数名称不是很清楚,无法找到对应的参数,请问可以详细讲解一下吗,谢谢

eithwa commented 1 year ago

您好,我在调试过程中对于这两个 ros::Subscriber odomSub = node.subscribe<nav_msgs::Odometry ros::Publisher odomPub = node.advertise("odom", 1000); 里面对应的参数名称不是很清楚,无法找到对应的参数,请问可以详细讲解一下吗,谢谢

您好,由于我不了解您目前做了哪些修改,因此很难回答您的问题。 请问您是否已经知道您的小车的 "odom" topic 名称以及发布它的 node 是哪一个? 如果您已经找到了是哪个 node 发送的 "odom" topic,是否已经在该 node 中找到了发布 topic 的相关程式码? 如果您已经做到了这个步骤,您应该会看到类似以下的相关定义:

ros::Publisher odomPub = node.advertise<nav_msgs::Odometry>("odom", 1000);

这行程式碼中,odomPub 是一个 ros::Publisher 对象,它用于发布 nav_msgs::Odometry 类型的消息到名为 "odom" 的 topic 上,队列的大小为 1000。这个 topic 名称和消息类型应与您的系统配置和需要相匹配。 如果您对于发布topic的流程有任何疑问,可以参考ros网站上的教学。 http://wiki.ros.org/cn/ROS/Tutorials/WritingPublisherSubscriber%28c%2B%2B%29 希望这能帮助您更好地理解这些参数的作用。