ros1: Migrating tf to tf2 (#1425)

* Migrating tf to tf2

* Added ci action to test PR on ros1

* updated dev container with nvidia working

* backward compatibility with topics having frame_id with leading slash not allowed with tf2

* backward compatibility of leading slash for other tf2 buffers

* updated comment
This commit is contained in:
matlabbe
2026-05-23 15:08:21 -07:00
committed by GitHub
parent f81536f508
commit a6921845b6
30 changed files with 311 additions and 247 deletions
+2 -2
View File
@@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.5)
project(rtabmap_viz)
find_package(catkin REQUIRED COMPONENTS
cv_bridge geometry_msgs std_msgs std_srvs nav_msgs rtabmap_msgs rtabmap_sync tf
cv_bridge geometry_msgs std_msgs std_srvs nav_msgs rtabmap_msgs rtabmap_sync tf tf2_ros
)
###################################
@@ -11,7 +11,7 @@ find_package(catkin REQUIRED COMPONENTS
catkin_package(
INCLUDE_DIRS include
CATKIN_DEPENDS cv_bridge geometry_msgs std_msgs std_srvs nav_msgs rtabmap_msgs rtabmap_sync tf
CATKIN_DEPENDS cv_bridge geometry_msgs std_msgs std_srvs nav_msgs rtabmap_msgs rtabmap_sync tf tf2_ros
)
# catkin is not using cmake targets for dependencies,
+4 -2
View File
@@ -36,7 +36,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "rtabmap/utilite/UEventsHandler.h"
#include "rtabmap/core/Transform.h"
#include <tf/transform_listener.h>
#include <tf2_ros/buffer.h>
#include <tf2_ros/transform_listener.h>
#include <geometry_msgs/TwistStamped.h>
#include <nav_msgs/Path.h>
@@ -133,7 +134,8 @@ private:
double waitForTransformDuration_;
bool odomSensorSync_;
double maxOdomUpdateRate_;
tf::TransformListener tfListener_;
tf2_ros::Buffer tfBuffer_;
tf2_ros::TransformListener tfListener_;
ros::Publisher republishNodeDataPub_;
+1
View File
@@ -19,5 +19,6 @@
<depend>rtabmap_msgs</depend>
<depend>rtabmap_sync</depend>
<depend>tf</depend>
<depend>tf2_ros</depend>
</package>
+14 -13
View File
@@ -73,6 +73,7 @@ GuiWrapper::GuiWrapper(int & argc, char** argv) :
waitForTransformDuration_(0.2), // 200 ms
odomSensorSync_(false),
maxOdomUpdateRate_(10),
tfListener_(tfBuffer_),
cameraNodeName_(""),
lastOdomInfoUpdateTime_(0),
rtabmapNodeName_("rtabmap")
@@ -541,7 +542,7 @@ void GuiWrapper::commonMultiCameraCallback(
odomHeader.frame_id = odomFrameId_;
}
Transform odomT = rtabmap_conversions::getTransform(odomHeader.frame_id, frameId, odomHeader.stamp, tfListener_, waitForTransform_?waitForTransformDuration_:0);
Transform odomT = rtabmap_conversions::getTransform(odomHeader.frame_id, frameId, odomHeader.stamp, tfBuffer_, waitForTransform_?waitForTransformDuration_:0);
cv::Mat covariance = cv::Mat::eye(6,6,CV_64FC1);
if(odomMsg.get())
{
@@ -608,7 +609,7 @@ void GuiWrapper::commonMultiCameraCallback(
depth,
cameraModels,
stereoCameraModels,
tfListener_,
tfBuffer_,
waitForTransform_?waitForTransformDuration_:0.0,
imagesAlreadyRectified))
{
@@ -625,7 +626,7 @@ void GuiWrapper::commonMultiCameraCallback(
odomSensorSync_?odomHeader.frame_id:"",
odomHeader.stamp,
scan,
tfListener_,
tfBuffer_,
waitForTransform_?waitForTransformDuration_:0))
{
ROS_ERROR("Could not convert laser scan msg! Aborting rtabmap_viz update...");
@@ -640,7 +641,7 @@ void GuiWrapper::commonMultiCameraCallback(
odomSensorSync_?odomHeader.frame_id:"",
odomHeader.stamp,
scan,
tfListener_,
tfBuffer_,
waitForTransform_?waitForTransformDuration_:0))
{
ROS_ERROR("Could not convert 3d laser scan msg! Aborting rtabmap_viz update...");
@@ -734,7 +735,7 @@ void GuiWrapper::commonStereoCallback(
odomHeader.frame_id = odomFrameId_;
}
Transform odomT = rtabmap_conversions::getTransform(odomHeader.frame_id, frameId, odomHeader.stamp, tfListener_, waitForTransform_?waitForTransformDuration_:0);
Transform odomT = rtabmap_conversions::getTransform(odomHeader.frame_id, frameId, odomHeader.stamp, tfBuffer_, waitForTransform_?waitForTransformDuration_:0);
cv::Mat covariance = cv::Mat::eye(6,6,CV_64FC1);
if(odomMsg.get())
{
@@ -797,7 +798,7 @@ void GuiWrapper::commonStereoCallback(
left,
right,
stereoModel,
tfListener_,
tfBuffer_,
waitForTransform_?waitForTransformDuration_:0.0,
imagesAlreadyRectified))
{
@@ -813,7 +814,7 @@ void GuiWrapper::commonStereoCallback(
odomSensorSync_?odomHeader.frame_id:"",
odomHeader.stamp,
scan,
tfListener_,
tfBuffer_,
waitForTransform_?waitForTransformDuration_:0))
{
ROS_ERROR("Could not convert laser scan msg! Aborting rtabmap_viz update...");
@@ -828,7 +829,7 @@ void GuiWrapper::commonStereoCallback(
odomSensorSync_?odomHeader.frame_id:"",
odomHeader.stamp,
scan,
tfListener_,
tfBuffer_,
waitForTransform_?waitForTransformDuration_:0))
{
ROS_ERROR("Could not convert 3d laser scan msg! Aborting rtabmap_viz update...");
@@ -907,7 +908,7 @@ void GuiWrapper::commonLaserScanCallback(
odomHeader.frame_id = odomFrameId_;
}
Transform odomT = rtabmap_conversions::getTransform(odomHeader.frame_id, frameId, odomHeader.stamp, tfListener_, waitForTransform_?waitForTransformDuration_:0);
Transform odomT = rtabmap_conversions::getTransform(odomHeader.frame_id, frameId, odomHeader.stamp, tfBuffer_, waitForTransform_?waitForTransformDuration_:0);
cv::Mat covariance = cv::Mat::eye(6,6,CV_64FC1);
if(odomMsg.get())
{
@@ -960,7 +961,7 @@ void GuiWrapper::commonLaserScanCallback(
odomSensorSync_?odomHeader.frame_id:"",
odomHeader.stamp,
scan,
tfListener_,
tfBuffer_,
waitForTransform_?waitForTransformDuration_:0))
{
ROS_ERROR("Could not convert laser scan msg! Aborting rtabmap_viz update...");
@@ -975,7 +976,7 @@ void GuiWrapper::commonLaserScanCallback(
odomSensorSync_?odomHeader.frame_id:"",
odomHeader.stamp,
scan,
tfListener_,
tfBuffer_,
waitForTransform_?waitForTransformDuration_:0))
{
ROS_ERROR("Could not convert 3d laser scan msg! Aborting rtabmap_viz update...");
@@ -1024,7 +1025,7 @@ void GuiWrapper::commonOdomCallback(
std_msgs::Header odomHeader = odomMsg->header;
Transform odomT = rtabmap_conversions::getTransform(odomHeader.frame_id, odomMsg->child_frame_id, odomHeader.stamp, tfListener_, waitForTransform_?waitForTransformDuration_:0);
Transform odomT = rtabmap_conversions::getTransform(odomHeader.frame_id, odomMsg->child_frame_id, odomHeader.stamp, tfBuffer_, waitForTransform_?waitForTransformDuration_:0);
cv::Mat covariance = cv::Mat::eye(6,6,CV_64FC1);
if(odomMsg.get())
{
@@ -1113,7 +1114,7 @@ void GuiWrapper::commonSensorDataCallback(
odomHeader.frame_id = odomFrameId_;
}
Transform odomT = rtabmap_conversions::getTransform(odomHeader.frame_id, frameId, odomHeader.stamp, tfListener_, waitForTransform_?waitForTransformDuration_:0);
Transform odomT = rtabmap_conversions::getTransform(odomHeader.frame_id, frameId, odomHeader.stamp, tfBuffer_, waitForTransform_?waitForTransformDuration_:0);
cv::Mat covariance = cv::Mat::eye(6,6,CV_64FC1);
if(odomMsg.get())
{