首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有vrep/scan和slam的laser_scan_matcher的tos tf设置

具有vrep/scan和slam的laser_scan_matcher的tos tf设置
EN

Stack Overflow用户
提问于 2020-05-20 12:37:03
回答 1查看 324关注 0票数 0

我正在我的环境中尝试这个。

https://sudonull.com/post/21487-Mapping-and-localization-of-a-mobile-robot-in-ROS-without-odometry-using-laser_scan_matcher

我有一个模拟环境:

主题: vrep/scan

使用TF: base_link -> laser_link

然后我使用laser_scan_matcher

我得到了TF: map ->奥多姆。

我需要的TF从奥多姆-> laser_link的gmapping。

但我不知道如何创建这样的链接。

我的启动文件如下:

代码语言:javascript
复制
<launch>

  <node pkg="laser_scan_matcher" type="laser_scan_matcher_node" 
    name="laser_scan_matcher_node" output="screen">
    <param name="scan" value = "/vrep/scan"/>
    <param name="fixed_frame" value = "odom"/>
    <param name="use_alpha_beta" value="true"/>
    <param name="max_iterations" value="10"/>
  </node>

  <node pkg="gmapping" type="slam_gmapping" name="slam_gmapping" output="screen">
    <param name="scan" value = "/vrep/scan"/>
    <param name="map_udpate_interval" value="1.0"/>
    <param name="delta" value="0.02"/>
  </node>

</launch>

我读了这篇文章,但我还是想不通。https://answers.ros.org/question/10909/combining-laser_scan_matcher-with-gmapping/

或者我的问题是,如何使用正确的启动文件将odom连接到baselink?

非常感谢你的提示。

roslaunch

代码语言:javascript
复制
    Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

started roslaunch server http://ros-vm:38189/

SUMMARY
========

PARAMETERS
 * /laser_scan_matcher_node/fixed_frame: odom
 * /laser_scan_matcher_node/max_iterations: 10
 * /laser_scan_matcher_node/publish_odom: True
 * /laser_scan_matcher_node/scan: /vrep/scan
 * /laser_scan_matcher_node/use_alpha_beta: True
 * /laser_scan_matcher_node/use_odom: True
 * /rosdistro: melodic
 * /rosversion: 1.14.5
 * /slam_gmapping/delta: 0.02
 * /slam_gmapping/map_udpate_interval: 1.0
 * /slam_gmapping/scan: /vrep/scan

NODES
  /
    laser_scan_matcher_node (laser_scan_matcher/laser_scan_matcher_node)
    slam_gmapping (gmapping/slam_gmapping)

ROS_MASTER_URI=http://localhost:11311

process[laser_scan_matcher_node-1]: started with pid [7540]
process[slam_gmapping-2]: started with pid [7545]
[ INFO] [1589974736.966492078]: Starting LaserScanMatcher

日志:

代码语言:javascript
复制
 rosnode info laser_scan_matcher_node
--------------------------------------------------------------------------------
Node [/laser_scan_matcher_node]
Publications:
 * /pose2D [geometry_msgs/Pose2D]
 * /rosout [rosgraph_msgs/Log]
 * /tf [tf2_msgs/TFMessage]

Subscriptions:
 * /clock [rosgraph_msgs/Clock]
 * /imu/data [unknown type]
 * /odom [unknown type]
 * /scan [unknown type]
 * /tf [tf2_msgs/TFMessage]
 * /tf_static [unknown type]

Services:
 * /laser_scan_matcher_node/get_loggers
 * /laser_scan_matcher_node/set_logger_level


contacting node http://ros-vm:34349/ ...
Pid: 7062
Connections:
 * topic: /rosout
    * to: /rosout
    * direction: outbound (35035 - 10.0.2.15:52152) [17]
    * transport: TCPROS
 * topic: /tf
    * to: /laser_scan_matcher_node
    * direction: outbound
    * transport: INTRAPROCESS
 * topic: /tf
    * to: /rqt_gui_py_node_6989
    * direction: outbound (35035 - 10.0.2.15:52134) [14]
    * transport: TCPROS
 * topic: /tf
    * to: /slam_gmapping
    * direction: outbound (35035 - 10.0.2.15:52164) [11]
    * transport: TCPROS
 * topic: /clock
    * to: /vrep_ros_interface (http://ros-vm:35741/)
    * direction: inbound (56132 - ros-vm:60019) [12]
    * transport: TCPROS
 * topic: /tf
    * to: /laser_scan_matcher_node (http://ros-vm:34349/)
    * direction: inbound
    * transport: INTRAPROCESS
 * topic: /tf
    * to: /vrep_ros_interface (http://ros-vm:35741/)
    * direction: inbound (56134 - ros-vm:60019) [18]
    * transport: TCPROS
 * topic: /tf
    * to: /slam_gmapping (http://ros-vm:38313/)
    * direction: inbound (60954 - ros-vm:54021) [10]
    * transport: TCPROS


 rostopic list -v

Published topics:
 * /map_metadata [nav_msgs/MapMetaData] 1 publisher
 * /vrep/image [sensor_msgs/Image] 1 publisher
 * /vrep/scan [sensor_msgs/LaserScan] 1 publisher
 * /pose2D [geometry_msgs/Pose2D] 1 publisher
 * /rosout [rosgraph_msgs/Log] 4 publishers
 * /tf [tf2_msgs/TFMessage] 3 publishers
 * /clock [rosgraph_msgs/Clock] 1 publisher
 * /rosout_agg [rosgraph_msgs/Log] 1 publisher
 * /map [nav_msgs/OccupancyGrid] 1 publisher
 * /slam_gmapping/entropy [std_msgs/Float64] 1 publisher




rosnode list
/laser_scan_matcher_node
/rosout
/rqt_gui_py_node_6989
/slam_gmapping
/vrep_ros_interface
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-20 20:37:21

rosnode info laser_scan_matcher_node可以看出,该节点归属于主题scan

rostopic list -v的输出中,没有该主题的发布者。该命令还列出了您在问题中未包括的订阅者。对于您尝试在启动文件中设置的主题/vrep/scan,有一个发布者。从理论上讲,可以使用参数来提供输入/输出主题,但这必须在节点中实现。通常,这不是必需的,因此大多数节点可能不会这样做。

您需要在启动文件中使用remap标记来重新映射主题,而不是param标记。Roslaunch XML wiki

你的启动文件应该是这样的,扫描参数替换为remap:

代码语言:javascript
复制
<launch>

  <node pkg="laser_scan_matcher" type="laser_scan_matcher_node" 
    name="laser_scan_matcher_node" output="screen">
    <remap from="scan" to="/vrep/scan"/>
    <param name="fixed_frame" value = "odom"/>
    <param name="use_alpha_beta" value="true"/>
    <param name="max_iterations" value="10"/>
  </node>

  <node pkg="gmapping" type="slam_gmapping" name="slam_gmapping" output="screen">
    <remap from="scan" to="/vrep/scan"/>
    <param name="map_udpate_interval" value="1.0"/>
    <param name="delta" value="0.02"/>
  </node>

</launch>

我不确定这是否能解决你所有的问题。

当你重新映射主题时,to="/vrep/scan"中领先的/也是非常重要的,这需要一些时间来适应,我建议阅读this page来了解那里发生了什么。from="scan"中缺少的前导/也同样重要。

进行此更改后,请检查slam_gmappinglaser_scan_matcher_node节点是否都订阅了带有rosnode info .../vrep/scan

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61905214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档