Need help with TF tree and odometry

Hello everyone
In Isaac Sim 5.0.0 (Ubuntu 22.04), I’m trying to create TF tree and odometry in order to use ROS2 (humble) for navigation.
I saw the TF Tree tutorial ( ROS2 Transform Trees and Odometry — Isaac Sim Documentation ) and checked the ROS2 carter navigation sample but I’m not able to create TF Tree and odometry properly in my stage.

Because I have no knowledge in Isaac Sim and ROS2 I’m having a hard time for more than a week trying to fix my issue using AI.

My model is a forklift which contains 5 RTX Lidar Rotary 2d sensor (4 sensors for collision and 1 for navigation)
My model hierarchy is as follow:

Forklift (articulation Root)
–body
—-base_link
——–lidar_{left,right,front,rear,nav}
————-Example_Rotary_2d
–arm
–front_left_wheel
–front_right_wheel
–back_left_wheel
–back_right_wheel
–back_left_wheel_swivel
–back_right_wheel_swivel

body,arm, front_{left,right}_wheel,back_{left,right}_wheel and back_{left,right}_wheel_swivel have joint for moving the forklift.

I’ve created an action graph for each sensor that contain Isaac Create Render Product node, ROS2 RTX Lidar Helper node and ROS2 Publish Transform Tree (parentPrim set to base_link and targetPrims set to lidar_{front,left,right,rear,nav})

I’ve created another Action Graph for the odometry based on the tutorial I’ve linked above.
my current issue is that when I run the ros2 run tf2_tools view_frames command, I do see odom→base_link→lidar_{side}
but when I try to run the ROS2 launch file based on the carter navigation sample, I got a TF error about base_link→odom not being found (I’m not at the office right now so I won’t be able to paste the exact error message)
When running ros2 topic echo /tf I only have base_link→lidar_right Transform but not the other.

Because of my lack of knowledge, I don’t understand what I’m doing wrong.
Can someone please help me and explain to me how I can set TF tree and odometry properly?

I’m really confuse with Transform Tree, Raw Transform Tree and Odometry node.

I don’t know if I have to set QoS Profile (durability volatile?transient_local?)

For the Isaac Compute Odometry Node, I’m pretty sure chassisPrim, should be set with the prim containing the Articulation Root component. For the rest I’m not sure what I should do.

Hoping someone can help me.

I thank you in advance for your help

For the TF tree graph generated using tf2_tools, it should show which node is providing this TF. Could you please double check it?

Hi,

thank you for your reply.
I’m back to the office so I’ll be able to provide more information.

When I run ros2 run tf2_tools view_frames command, I do the the following tree:

odom→base_link→lidar_{side}

However, when I run ros2 run tf2_ros tf2_echo odom base_link command, I got the following output:

[INFO] [1758527971.454043801] [tf2_echo]: Waiting for transform odom → base_link: Invalid frame ID “odom” passed to canTransform argument target_frame - frame does not exist

When I use the launch file based on the carter sample, I got the following output continuously:

[forklift_01.local_costmap.local_costmap]: Timed out waiting for transform from base_link to odom to become available, tf error: Invalid frame ID “odom” passed to canTransform argument target_frame - frame does not exist
[component_container_isolated-1] [INFO] [1758525462.744993636] [forklift_01.amcl]: Message Filter dropping message: frame ‘lidar_nav’ at time 1758525460.218 for reason ‘discarding message because the queue is full’

what is strange is the huge time displayed for lidar_nav as I run the launch file couple of second after pressing the play button in Isaac Sim. I also made sure to check “reset on stop” in the Isaac Read SImulation Time node.
I’ve also check the time in /clock and /tf topic and both shown the right time.
that huge time value is only displayed when using the launch file.

Hope that help understanding my current issue.

I forgot to share the launch file and parameter file I’m using.
Please tell me if I did something wrong. (I renamed .py and .yaml to .txt in order to upload them)

I forgot to tell but my stage will have several forklift so I’m using namespace for odom and sensor.

multi_robot_warehouse.launch.txt (3.1 KB)

warehouse_navigation_individual.launch.txt (2.4 KB)

forklift_01_nav2.txt (9.9 KB)

My apologies for sending several message.
Concerning the huge time for lidar_nav, the issue was because of a script that take the topic scan_nav (child of lidar_nav Xform), use a box filter and republish as scan_nav_filtered set the wrong time for scan_nav_filtered. now the time is around 1 second early though.
I’m attaching the log file, hoping someone can tell me what is wrong.

launch_log_result.txt (36.9 KB)

@ludokun sorry for my late reply. I haven’t got a chance to try your scripts yet (will do). By looking at the message, I wonder if you set use_sim_time to True?

Hi @zhengwang
Sorry I forgot to update this thread.
As you’ve noticed recently I’m asking quite some questions in the forum.
Quite embarrassing, but I’ll soon ask another question concerning the YAML file use in the carter example.

concerning my issue with the time I had several issues. My first issue was that in the TF Tree/Odometry action Graph, I’ve set the timestamp using Isaac Read Simulation Time, but for each ROS2 RTX Lidar Helper node, I’ve forgotten to check the “Reset Time On Stop”.

My second issue (for unknown reason), was that at first when I created my scan_nav_filtered topic from my scan_nav topic through script, I’ve set the time for scan_nav_filtered the same as scan_nav but had to set the time of scan_nav_filtered from the clock topic instead.

Again my apologies for forgetting to update this thread.