ROS - Connect /map topic with Isaac Sim Environment


I am having an issue where I have a /map topic and its showing on my “rostopic list” command but it is not connected to my Isaac Sim environment. I published a PoseTree which has no parent prim so that it is set to “world” by default. I then add my robot’s links to the target prims. However, I have uploaded a map to my roslaunch file so that I can see it in rviz, but it is not connecting to my world environment. I am pretty much creating a Navigation Stack program for a custom autonomous robot. This is what it looks like for the ROS frame map (without static transforms):

I have tried another idea where I publish static transforms from the /map topic to the world and /odom but its splits the graph in two (with static transforms):

I would like to know if I am setting my PoseTree incorrectly or there is something I am not seeing that I have to set up in Isaac Sim. An example of my PoseTree is located below:

and my a_star.launch file is located below:

<?xml version="1.0" encoding="UTF-8"?>
<!-- High level launch file for Unit 3 A-Star exercise solution  -->
<!-- Requires simulation w/robot running -->
  <arg name="model" default="$(find jeep_model)/urdf/jeep_updated_official.urdf"/>
  <arg name="gui" default="true" />

  <param name="robot_description" command="$(find xacro)/xacro --inorder $(arg model)" />
  <param name="use_gui" value="$(arg gui)"/>

  <!-- Run the map server to load a pre-made map -->
  <arg name="map_file" default="$(find jeep_nav)/maps/UTSA_ENV_DRAFT/utsa_NE.yaml"/>
  <node name="map_server" pkg="map_server" type="map_server" args="$(arg map_file)" />

  <!-- MOVE_BASE -->
  <include file="$(find jeep_nav)/launch/move_base.launch" />

  <!-- Determine whether to run Rviz or not & set Rviz config file-->
  <arg name="use_rviz" default="true" />
  <arg name="rvizconfig" default="$(find jeep_nav)/rviz/jeep.rviz"/>
  <!-- Launching Rviz -->
  <node if="$(arg use_rviz)" name="rviz" pkg="rviz" type="rviz" respawn="false" args="-d $(arg rvizconfig)"/>

  <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" />
  <node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher" />
  <!-- Start service server that responds with a plan for global path planning -->
  <node pkg="jeep_nav" name="a_star_solution" type="" output="screen"/> 


Thank you and if you need information, please let me know.

One possible solution is that you can publish odom frame from world and let amcl localizes your robot in map frame.
Add this in your launch file

<node pkg="tf2_ros" type="static_transform_publisher" name="odom_world" output="screen" args="0 0 0 0 0 0 odom world" />

Now you have 2 separated trees, one with world, odom and base_link, one with map. You need to localize your odom frame using amcl. If you don’t have amcl, then you need to publish your own localization (odom frame in map frame).

Hi @asibarra98,

It seems like you would need to add a ROS Differential Base prim to your stage. The Differential Base bridge is responsible for publishing the transform between your robot’s base link and the odom frame, publishing odometry to the /odom topic, as well as subscribing to the /cmd_vel topic (geometry_msgs/Twist Message type).
You can follow the tutorial on adding the ROS Differential Base here.

Additionally as @hoanggiang suggested, if you are not using amcl you can setup your own ROS node (or setup a static_transform_publisher) for publishing the transform between map and odom frame.