[ERROR] : “ar_marker_6“ passed to lookupTransform argument target_frame does not exist

<launch>
	<arg name="marker_size" default="10.0" />
	<arg name="max_new_marker_error" default="0.08" />
	<arg name="max_track_error" default="0.2" />

	<arg name="cam_image_topic" default="/kinect2/qhd/image_color" />
	<arg name="cam_info_topic" default="/kinect2/qhd/camera_info" />
	<arg name="output_frame" default="/kinect2_link" />

	<node name="ar_track_alvar" pkg="ar_track_alvar" type="individualMarkersNoKinect" respawn="false" output="screen">
		<param name="marker_size"           type="double" value="$(arg marker_size)" />
		<param name="max_new_marker_error"  type="double" value="$(arg max_new_marker_error)" />
		<param name="max_track_error"       type="double" value="$(arg max_track_error)" />
		<param name="output_frame"          type="string" value="$(arg output_frame)" />

		<remap from="camera_image"  to="$(arg cam_image_topic)" />
		<remap from="camera_info"   to="$(arg cam_info_topic)" />
	</node>
</launch>
  • <arg name="cam_image_topic" default="/kinect2/qhd/image_color" />:这个参数用于指定相机图像的ROS话题。默认值是 /kinect2/qhd/image_color。这意味着当你运行这个launch文件时,如果没有为这个参数提供新的值,它将使用 /kinect2/qhd/image_color 作为相机图像的话题

  • <arg name="cam_info_topic" default="/kinect2/qhd/camera_info" />:这个参数用于指定相机信息的话题。默认值是 /kinect2/qhd/camera_info。类似于上述参数,你可以在运行时提供新的值,否则将使用默认的相机信息话题。

  • <arg name="output_frame" default="/kinect2_link" />:这个参数用于指定输出的坐标系帧名称。默认值是 /kinect2_link。在ROS中,坐标系帧通常用于表示相机或其他传感器的位置和方向。这个参数指定了 ar_track_alvar 节点输出的坐标系帧的名称。


在这个文件中,参数包括 marker_size(标记的大小),max_new_marker_error(新标记的最大误差),max_track_error(最大跟踪误差),cam_image_topic(相机图像的ROS话题),cam_info_topic(相机信息的ROS话题),以及 output_frame(输出的坐标系帧名)。

<node> 元素:启动一个ROS节点。这个节点的名称是 ar_track_alvar,它属于 ar_track_alvar 软件包。节点类型是 individualMarkersNoKinect,这是 ar_track_alvar 软件包中用于检测和跟踪ArUco标记的节点。

<param> 元素中,一些参数被设置为在 <arg> 元素中定义的参数的值。这些参数包括 marker_sizemax_new_marker_errormax_track_erroroutput_frame

<remap> 元素中,相机图像和相机信息的ROS话题被重映射到 <arg> 元素中定义的对应参数的值,分别是 cam_image_topiccam_info_topic

最后,respawn="false" 表示如果节点非正常退出,不会自动重启节点。output="screen" 表示节点的输出将被打印到屏幕上。

<param name="output_frame" type="string" value="$(arg output_frame)" />:这个参数设置了 ar_track_alvar 节点输出的坐标系帧名。这个坐标系帧通常是相机的坐标系,或者是相机链接的坐标系。在处理相机数据时,常常需要在不同坐标系之间进行转换。

<remap from="camera_image" to="$(arg cam_image_topic)" /><remap from="camera_info" to="$(arg cam_info_topic)" />:这两个 <remap> 元素将 ar_track_alvar 节点内部的话题名称重新映射为启动文件中定义的参数值。这可能是为了适应你的实际硬件配置,确保 ar_track_alvar 节点接收正确的相机图像和相机信息。


首先,确保你已经查看了 openni2.launch 文件,找到了相机图像和相机信息的ROS话题以及输出坐标系帧名。在一般情况下,openni2.launch 文件中可能有类似以下的行来定义这些参数:

<arg name="rgb/image_raw" default="/camera/rgb/image_raw" />
<arg name="rgb/camera_info" default="/camera/rgb/camera_info" />
<arg name="depth/camera_info" default="/camera/depth/camera_info" /> 
<arg name="depth_registered/camera_info" default="/camera/depth_registered/camera_info" />

这是一个示例,具体的话题名称可能根据你的实际硬件配置而有所不同。请查看你的 openni2.launch 文件,找到对应的话题名称。

在你的 ar_track_alvar launch 文件中,你可以使用这些参数,例如:

<arg name="cam_image_topic" default="/camera/rgb/image_raw" /> 
<arg name="cam_info_topic" default="/camera/rgb/camera_info" />
 <arg name="output_frame" default="/camera_link" /> 

上述例子中,我假设彩色图像的ROS话题是 /camera/rgb/image_raw,相机信息的ROS话题是 /camera/rgb/camera_info,输出坐标系帧名为 /camera_link。请根据你实际的 openni2.launch 文件中的设置来调整这些值。

ar_track_alvarremap 部分,你可以使用这些参数,例如:

<remap from="camera_image" to="$(arg cam_image_topic)" /> 
<remap from="camera_info" to="$(arg cam_info_topic)" /

这样设置后,ar_track_alvar 节点应该会接收来自OpenNI2相机的彩色图像和相机信息,以及输出到指定坐标系帧的标记信息。确保启动文件中的参数与你的实际硬件和ROS话题名称一致。


[ERROR] [1700296472.007190511]: "ar_marker_6" passed to lookupTransform argument target_frame does not exist.这是什么问题?

该错误表明 ar_track_alvar 节点在尝试查找转换时找不到目标坐标系帧 ar_marker_6。在ROS中,查找坐标系转换通常使用tf库,这个错误可能与tf转换有关。

以下是可能导致这个问题的几种原因和解决方法:

1.坐标系帧名称错误: 请确保 ar_marker_6 是正确的坐标系帧名称,并且确保这个坐标系帧在你的ROS环境中存在。你可以使用以下命令检查是否存在。

2.坐标系帧发布延迟: 如果你的 ar_marker_6 是通过另一个节点发布的,并且该发布发生在 ar_track_alvar 节点启动之后,可能会导致此错误。确保坐标系帧发布在 ar_track_alvar 节点启动之前。

3.tf缓冲区延迟: ar_track_alvar 节点使用tf缓冲区来查找坐标系转换。可能存在一些延迟导致 ar_marker_6 尚未在缓冲区中注册。可以通过适当的等待或增加tf缓冲区的大小来解决。

4.检查坐标系帧是否正确广播: 确保 ar_marker_6 坐标系帧是由其他节点正确广播的。你可以使用 rostopic echo 或 tf_echo 等工具来检查相关话题是否发布了正确的变换。
  1. (退出conda的base)

  2. rosrun tf view_frames

  3. 这将生成一个PDF文件,其中包含ROS中存在的所有坐标系帧的关系。检查 ar_marker_6 是否在列表中。

rosrun tf view_frames 命令用于生成 frames.gv 文件,这是一个Graphviz DOT格式的文件,其中包含了ROS TF框架中所有的坐标系关系。view_frames 工具会根据这个文件生成一个 PDF 或者 PNG 格式的图形,用于可视化坐标系之间的关系。

要生成图形文件,你可以使用以下命令:

rosrun tf view_frames

然后,它将生成一个 frames.gv 文件。为了生成图形文件,你可以运行以下命令:

dot -Tpdf frames.gv -o frames.pdf

上述命令将 frames.gv 转换为 PDF 文件。你可以替换 -Tpdf 为其他格式,如 -Tpng 以生成 PNG 文件。

dot -Tpng frames.gv -o frames.png

生成的图形文件将包含所有已知的坐标系及其关系。确保你已经运行了你的节点,以便 tf 发布了正确的坐标变换信息。如果有问题,图形可能会显示不完整或者不正确。


更改 ar_track_alvar 的启动文件以正确指定相机图像和相机信息的ROS话题,以及输出的坐标系帧名可能有助于解决 lookupTransform 时找不到目标坐标系帧的问题。但请注意,这个错误也可能与标记 ar_marker_6 自身的发布有关。

在你的 ar_track_alvar 节点中,似乎没有提及 ar_marker_6 这个坐标系帧。如果你的应用中确实使用了这个坐标系帧,你需要确保它正确地被发布。这通常涉及到另一个节点(可能是标记检测节点)发布 ar_marker_6 的 TF 变换。

确保你的标记检测节点或其他节点正确地发布了 ar_marker_6/tf 话题,以便其他节点(包括 ar_track_alvar)可以查找这个坐标系帧。

在ROS中,你可以使用 rostopic echo /tf 来查看当前发布到 /tf 话题的 TF 变换,看看是否包含了 ar_marker_6。如果没有,你需要确保标记检测节点发布了正确的 TF 变换。


看起来这个错误与ROS中的tf(变换框架)有关,特别是在 lookupTransform 函数中,指定的 ar_marker_6 目标坐标系帧在系统中找不到。

为了解决这个问题,你可以考虑以下几个步骤:

  1. 确保TF发布正确: 确保 ar_marker_6 的坐标系帧在系统中被正确发布到TF。你可以使用以下命令来检查:

    rostopic echo /tf

    如果 ar_marker_6 没有正确发布,你可能需要查看 marker_track.launch 文件以确保标签检测节点正确发布了 ar_marker_6

  2. 修改 ar_track_alvar 参数:marker_track.launch 文件或者与 ar_track_alvar 相关的启动文件中,确保 ar_track_alvar 节点的参数正确设置。特别是,查看与 ar_marker_6 相关的参数,确保它们与你实际使用的标记的名称和坐标系帧名称一致。

  3. 检查TF变换的存在:get_table_points 节点中,确保你使用 lookupTransform 时的目标坐标系帧 ar_marker_6 确实存在。你可能需要在代码中添加一些调试语句,例如使用 ROS_INFO 输出目标坐标系帧。

  4. 查看启动顺序: 确保你正确启动了所有节点,尤其是标签检测节点和 get_table_points 节点。有时候,启动的顺序可能影响

    TF的正确传递。

通过执行上述步骤,你应该能够找到导致 ar_marker_6 不存在的原因,并进行相应的修复。


如果你的代码是针对Kinect写的,而你现在想要适应不同的深度相机(例如通过 roslaunch openni2_launch openni2.launch 启动的相机),你需要根据新的相机话题和坐标系帧来调整你的 ar_track_alvar 启动文件。

首先,你需要找到新相机的话题和坐标系帧名称。在使用 roslaunch openni2_launch openni2.launch 启动相机后,通过查看 /camera/depth_registered/image_raw/camera/depth_registered/camera_info 等话题来确定相机的输出。在终端中运行以下命令:

rostopic list | grep camera/depth_registered 

这将列出与深度图像相关的话题。你需要找到深度图像和相机信息的确切话题名称。

(base) june@June:~/catkin_ws/src$ rostopic list | grep camera/depth_registered 
/camera/depth_registered/camera_info
/camera/depth_registered/image_raw
/camera/depth_registered/image_raw/compressed
/camera/depth_registered/image_raw/compressed/parameter_descriptions
/camera/depth_registered/image_raw/compressed/parameter_updates
/camera/depth_registered/image_raw/compressedDepth
/camera/depth_registered/image_raw/compressedDepth/parameter_descriptions
/camera/depth_registered/image_raw/compressedDepth/parameter_updates
/camera/depth_registered/image_raw/theora
/camera/depth_registered/image_raw/theora/parameter_descriptions
/camera/depth_registered/image_raw/theora/parameter_updates
/camera/depth_registered/points
/camera/depth_registered/sw_registered/camera_info
/camera/depth_registered/sw_registered/image_rect
/camera/depth_registered/sw_registered/image_rect/compressed
/camera/depth_registered/sw_registered/image_rect/compressed/parameter_descriptions
/camera/depth_registered/sw_registered/image_rect/compressed/parameter_updates
/camera/depth_registered/sw_registered/image_rect/compressedDepth
/camera/depth_registered/sw_registered/image_rect/compressedDepth/parameter_descriptions
/camera/depth_registered/sw_registered/image_rect/compressedDepth/parameter_updates
/camera/depth_registered/sw_registered/image_rect/theora
/camera/depth_registered/sw_registered/image_rect/theora/parameter_descriptions
/camera/depth_registered/sw_registered/image_rect/theora/parameter_updates
/camera/depth_registered/sw_registered/image_rect_raw
/camera/depth_registered/sw_registered/image_rect_raw/compressed
/camera/depth_registered/sw_registered/image_rect_raw/compressed/parameter_descriptions
/camera/depth_registered/sw_registered/image_rect_raw/compressed/parameter_updates
/camera/depth_registered/sw_registered/image_rect_raw/compressedDepth
/camera/depth_registered/sw_registered/image_rect_raw/compressedDepth/parameter_descriptions
/camera/depth_registered/sw_registered/image_rect_raw/compressedDepth/parameter_updates
/camera/depth_registered/sw_registered/image_rect_raw/theora
/camera/depth_registered/sw_registered/image_rect_raw/theora/parameter_descriptions
/camera/depth_registered/sw_registered/image_rect_raw/theora/parameter_updates

然后,修改你的 ar_track_alvar 启动文件以使用这些新的话题和坐标系帧。以下是可能的修改:

<launch> 
<arg name="marker_size" default="10.0" /> 
<arg name="max_new_marker_error" default="0.08" /> 
<arg name="max_track_error" default="0.2" />

 <arg name="cam_image_topic" default="/camera/rgb/image_raw" /> 
<arg name="cam_info_topic" default="/camera/rgb/camera_info" /> 
<arg name="output_frame" default="/camera_link" /> 

<node name="ar_track_alvar" pkg="ar_track_alvar" type="individualMarkersNoKinect" respawn="false" output="screen"> 
<param name="marker_size" type="double" value="$(arg marker_size)" /> 
<param name="max_new_marker_error" type="double" value="$(arg max_new_marker_error)" /> 
<param name="max_track_error" type="double" value="$(arg max_track_error)" /> 
<param name="output_frame" type="string" value="$(arg output_frame)" /> 

<remap from="camera_image" to="$(arg cam_image_topic)" /> 
<remap from="camera_info" to="$(arg cam_info_topic)" /> 
</node> 
</launch> 

请根据你的实际情况修改 cam_image_topiccam_info_topicoutput_frame 参数。确保这些参数与你在 rostopic list 中找到的相机话题名称和坐标系帧名称一致。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值