Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

turtlebot3_gazebo: no "odom" frame #219

Open
doctorcolossus opened this issue May 30, 2024 · 2 comments
Open

turtlebot3_gazebo: no "odom" frame #219

doctorcolossus opened this issue May 30, 2024 · 2 comments

Comments

@doctorcolossus
Copy link

doctorcolossus commented May 30, 2024

I am using ROS Noetic on Ubuntu 20.04.6 LTS 5.10.104-tegra on a Jetson NX.

My ultimate goal is to run the example launch file for leggedrobotics/elevation_mapping_cupy, which uses turtlebot3_gazebo in its sourced elevation_mapping_cupy/launch/turtlesim_init.launch.

export TURTLEBOT3_MODEL=waffle
roslaunch elevation_mapping_cupy turtlesim_simple_example.launch

It gives me a lot of errors like:
"odom" passed to lookupTransform argument target_frame does not exist.

full log
$ export TURTLEBOT3_MODEL=waffle
$ roslaunch elevation_mapping_cupy turtlesim_simple_example.launch
PARAMETERS
 * /elevation_mapping/base_frame: base_footprint
 * /elevation_mapping/cleanup_cos_thresh: 0.1
 * /elevation_mapping/cleanup_step: 0.1
 * /elevation_mapping/corrected_map_frame: odom
 * /elevation_mapping/dilation_size: 3
 * /elevation_mapping/dilation_size_initialize: 2
 * /elevation_mapping/drift_compensation_alpha: 0.1
 * /elevation_mapping/drift_compensation_variance_inler: 0.05
 * /elevation_mapping/enable_drift_compensation: True
 * /elevation_mapping/enable_drift_corrected_TF_publishing: False
 * /elevation_mapping/enable_edge_sharpen: True
 * /elevation_mapping/enable_normal_color: False
 * /elevation_mapping/enable_overlap_clearance: True
 * /elevation_mapping/enable_pointcloud_publishing: False
 * /elevation_mapping/enable_visibility_cleanup: True
 * /elevation_mapping/image_channel_fusions/default: exponential
 * /elevation_mapping/image_channel_fusions/feat_.*: exponential
 * /elevation_mapping/image_channel_fusions/rgb: color
 * /elevation_mapping/initial_variance: 1000.0
 * /elevation_mapping/initialize_frame_id: ['base_footprint']
 * /elevation_mapping/initialize_method: linear
 * /elevation_mapping/initialize_tf_grid_size: 0.5
 * /elevation_mapping/initialize_tf_offset: [0.0, 0.0, 0.0, 0.0]
 * /elevation_mapping/mahalanobis_thresh: 2.0
 * /elevation_mapping/map_acquire_fps: 5.0
 * /elevation_mapping/map_frame: odom
 * /elevation_mapping/map_length: 8.0
 * /elevation_mapping/max_drift: 0.1
 * /elevation_mapping/max_height_range: 1.0
 * /elevation_mapping/max_ray_length: 10.0
 * /elevation_mapping/max_unsafe_n: 10
 * /elevation_mapping/max_variance: 100.0
 * /elevation_mapping/min_height_drift_cnt: 100
 * /elevation_mapping/min_valid_distance: 0.5
 * /elevation_mapping/orientation_lowpass_alpha: 0.2
 * /elevation_mapping/orientation_noise_thresh: 0.01
 * /elevation_mapping/outlier_variance: 0.01
 * /elevation_mapping/overlap_clear_range_xy: 4.0
 * /elevation_mapping/overlap_clear_range_z: 2.0
 * /elevation_mapping/plugin_config_file: $(rospack find el...
 * /elevation_mapping/pointcloud_channel_fusions/default: average
 * /elevation_mapping/pointcloud_channel_fusions/rgb: color
 * /elevation_mapping/position_lowpass_alpha: 0.2
 * /elevation_mapping/position_noise_thresh: 0.01
 * /elevation_mapping/publish_statistics_fps: 1.0
 * /elevation_mapping/publishers/elevation_map_filter/basic_layers: ['min_filter']
 * /elevation_mapping/publishers/elevation_map_filter/fps: 3.0
 * /elevation_mapping/publishers/elevation_map_filter/layers: ['min_filter', 's...
 * /elevation_mapping/publishers/elevation_map_raw/basic_layers: ['elevation']
 * /elevation_mapping/publishers/elevation_map_raw/fps: 5.0
 * /elevation_mapping/publishers/elevation_map_raw/layers: ['elevation', 'tr...
 * /elevation_mapping/ramped_height_range_a: 0.3
 * /elevation_mapping/ramped_height_range_b: 1.0
 * /elevation_mapping/ramped_height_range_c: 0.2
 * /elevation_mapping/resolution: 0.04
 * /elevation_mapping/safe_min_thresh: 0.4
 * /elevation_mapping/safe_thresh: 0.7
 * /elevation_mapping/sensor_noise_factor: 0.05
 * /elevation_mapping/subscribers/front_cam/data_type: pointcloud
 * /elevation_mapping/subscribers/front_cam/topic_name: /camera/depth/points
 * /elevation_mapping/time_interval: 0.1
 * /elevation_mapping/time_variance: 0.0001
 * /elevation_mapping/traversability_inlier: 0.9
 * /elevation_mapping/update_pose_fps: 10.0
 * /elevation_mapping/update_variance_fps: 5.0
 * /elevation_mapping/use_chainer: False
 * /elevation_mapping/use_initializer_at_start: True
 * /elevation_mapping/use_only_above_for_upper_bound: False
 * /elevation_mapping/wall_num_thresh: 20
 * /elevation_mapping/weight_file: $(rospack find el...
 * /gazebo/enable_ros_network: True
 * /robot_description: <?xml version="1....
 * /rosdistro: noetic
 * /rosversion: 1.16.0
 * /use_sim_time: True
 
NODES
  /
    elevation_mapping (elevation_mapping_cupy/elevation_mapping_node)
    gazebo (gazebo_ros/gzserver)
    rviz (rviz/rviz)
    spawn_urdf (gazebo_ros/spawn_model)
    waffle_state_publisher (robot_state_publisher/robot_state_publisher)

auto-starting new master
process[master]: started with pid [90624]
ROS_MASTER_URI=http:https://localhost:11311

setting /run_id to 521975d8-1ea0-11ef-9650-d8c0a69b3527
process[rosout-1]: started with pid [90639]
started core service [/rosout]
process[gazebo-2]: started with pid [90646]
process[spawn_urdf-3]: started with pid [90651]
process[waffle_state_publisher-4]: started with pid [90652]
process[rviz-5]: started with pid [90653]
process[elevation_mapping-6]: started with pid [90658]
[ INFO] [1717085945.145687624]: Subscribed to PointCloud2 topic: /camera/depth/points
[ INFO] [1717085950.780104066]: Finished loading Gazebo ROS API Plugin.
[ INFO] [1717085950.790933085]: waitForService: Service [/gazebo/set_physics_properties] has not been advertised, waiting...
[ INFO] [1717085954.757515114]: pointcloud_channel_fusion_dict: {'default': 'average', 'rgb': 'color'}
[ INFO] [1717085954.766004732]: image_channel_fusion_dict: {'default': 'exponential', 'feat_.*': 'exponential', 'rgb': 'color'}
[ INFO] [1717085957.547222934]: waitForService: Service [/gazebo/set_physics_properties] is now available.
[ INFO] [1717085960.197699418, 0.034000000]: Physics dynamic reconfigure ready.
[spawn_urdf-3] process has finished cleanly
log file: /home/nvidia/.ros/log/521975d8-1ea0-11ef-9650-d8c0a69b3527/spawn_urdf-3*.log
Start loading plugins...
Loaded plugins are  min_filter smooth_filter inpainting erosion
[ INFO] [1717085977.631565523, 9.038000000]: [ElevationMappingCupy] finish initialization
[ERROR] [1717085979.332767954, 10.158000000]: "odom" passed to lookupTransform argument target_frame does not exist. 
[ERROR] [1717085983.303845717, 12.829000000]: "odom" passed to lookupTransform argument target_frame does not exist. 
[ERROR] [1717085984.728840684, 13.980000000]: "odom" passed to lookupTransform argument target_frame does not exist. 
[ERROR] [1717085986.353872421, 15.236000000]: "odom" passed to lookupTransform argument target_frame does not exist. 
[ERROR] [1717085988.038232062, 16.392000000]: "odom" passed to lookupTransform argument target_frame does not exist. 
[ERROR] [1717085989.495804423, 17.513000000]: "odom" passed to lookupTransform argument target_frame does not exist. 
[ERROR] [1717085991.127295949, 18.633000000]: "odom" passed to lookupTransform argument target_frame does not exist. 
[ERROR] [1717085992.528493351, 19.755000000]: "odom" passed to lookupTransform argument target_frame does not exist. 
[ERROR] [1717085994.230712467, 20.961000000]: "odom" passed to lookupTransform argument target_frame does not exist. 
[ERROR] [1717085995.820257635, 22.067000000]: "odom" passed to lookupTransform argument target_frame does not exist. 
[ERROR] [1717085997.295719199, 23.188000000]: "odom" passed to lookupTransform argument target_frame does not exist. 
[ERROR] [1717085998.829744846, 24.287000000]: "odom" passed to lookupTransform argument target_frame does not exist. 
[ERROR] [1717086000.521981964, 25.372000000]: "odom" passed to lookupTransform argument target_frame does not exist. 
[ERROR] [1717086002.108299106, 26.475000000]: "odom" passed to lookupTransform argument target_frame does not exist. 
[ERROR] [1717086003.755857914, 27.594000000]: "odom" passed to lookupTransform argument target_frame does not exist. 
[ERROR] [1717086005.606771596, 28.722000000]: "odom" passed to lookupTransform argument target_frame does not exist. 
[ERROR] [1717086007.285058006, 29.840000000]: "odom" passed to lookupTransform argument target_frame does not exist. 
[ERROR] [1717086009.067182433, 30.979000000]: "odom" passed to lookupTransform argument target_frame does not exist.

Meanwhile the turtlebot in gazebo remains as a white blob.
Screenshot from 2024-05-30 20-28-32

@ZhoZhicheng opened elevation_mapping_cupy issue 78 for the same problem, and maintainer @mktk1117 closed the issue, stating that it is a turtlebot issue and not their problem. I followed up with the @ZhoZhicheng, who confirmed that it did indeed turn out to be a turtlebot bug which which was supposedly "easy to solve", although they cannot recall how...

The tf tree looks like this:
frames
So clearly, as stated in the error, there is no 'odom' frame, which I guess is supposed to be there.

I found two issues, both unresolved, where people described the "odom" frame being disconnected from the rest of the tree: turtlebot3 issue 7790 and turtlebot3_simulations issue 214. In both of those issues, the "odom" frame exists, but is disconnected from the rest of the tree. For me, it doesn't appear to exist at all. In the first of those two issues, @ROBOTIS-Ashe advised installing all dependent ROS packages and @DingoOz advised remembering to source devel/setup.bash in the catkin build directory, but OP @abdur78 did not respond further, and the issue remains open three years later. But in my case, I had already remembered to source my /devel/setup.bash, as well as /opt/ros/noetic/setup.bash. Doing so again did not resolve the issue. I had apparently not installed all of the dependent ROS packages, but installing those did not resolve the issue either.

Before installing the missing dependent packages, I had these apt packages installed:

output of apt list --installed | grep "^ros" originally
ros-message-generation/focal
ros-message-runtime/focal
ros-noetic-actionlib-msgs/focal
ros-noetic-actionlib-tutorials/focal
ros-noetic-actionlib/focal
ros-noetic-amcl/focal
ros-noetic-angles/focal
ros-noetic-base-local-planner/focal
ros-noetic-bond-core/focal
ros-noetic-bond/focal
ros-noetic-bondcpp/focal
ros-noetic-bondpy/focal
ros-noetic-catkin/focal
ros-noetic-class-loader/focal
ros-noetic-clear-costmap-recovery/focal
ros-noetic-cmake-modules/focal
ros-noetic-common-msgs/focal
ros-noetic-common-tutorials/focal
ros-noetic-control-msgs/focal
ros-noetic-costmap-2d/focal
ros-noetic-cpp-common/focal
ros-noetic-cv-bridge/focal
ros-noetic-desktop/focal
ros-noetic-diagnostic-aggregator/focal
ros-noetic-diagnostic-analysis/focal
ros-noetic-diagnostic-common-diagnostics/focal
ros-noetic-diagnostic-msgs/focal
ros-noetic-diagnostic-updater/focal
ros-noetic-diagnostics/focal
ros-noetic-dynamic-reconfigure/focal
ros-noetic-eigen-conversions/focal
ros-noetic-executive-smach/focal
ros-noetic-filters/focal
ros-noetic-gazebo-dev/focal
ros-noetic-gazebo-msgs/focal
ros-noetic-gazebo-ros/focal
ros-noetic-gencpp/focal
ros-noetic-geneus/focal
ros-noetic-genlisp/focal
ros-noetic-genmsg/focal
ros-noetic-gennodejs/focal
ros-noetic-genpy/focal
ros-noetic-geometry-msgs/focal
ros-noetic-geometry-tutorials/focal
ros-noetic-geometry/focal
ros-noetic-gl-dependency/focal
ros-noetic-grid-map-core/focal
ros-noetic-grid-map-cv/focal
ros-noetic-grid-map-demos/focal
ros-noetic-grid-map-filters/focal
ros-noetic-grid-map-loader/focal
ros-noetic-grid-map-msgs/focal
ros-noetic-grid-map-octomap/focal
ros-noetic-grid-map-ros/focal
ros-noetic-grid-map-rviz-plugin/focal
ros-noetic-grid-map-visualization/focal
ros-noetic-grid-map/focal
ros-noetic-hls-lfcd-lds-driver/focal
ros-noetic-image-transport/focal
ros-noetic-interactive-marker-tutorials/focal
ros-noetic-interactive-markers/focal
ros-noetic-joint-state-publisher-gui/focal
ros-noetic-joint-state-publisher/focal
ros-noetic-kdl-conversions/focal
ros-noetic-kdl-parser/focal
ros-noetic-laser-geometry/focal
ros-noetic-librviz-tutorial/focal
ros-noetic-map-msgs/focal
ros-noetic-map-server/focal
ros-noetic-media-export/focal
ros-noetic-message-filters/focal
ros-noetic-message-generation/focal
ros-noetic-message-runtime/focal
ros-noetic-mk/focal
ros-noetic-move-base-msgs/focal
ros-noetic-move-base/focal
ros-noetic-nav-core/focal
ros-noetic-nav-msgs/focal
ros-noetic-navfn/focal
ros-noetic-nodelet-core/focal
ros-noetic-nodelet-topic-tools/focal
ros-noetic-nodelet-tutorial-math/focal
ros-noetic-nodelet/focal
ros-noetic-octomap-mapping/focal
ros-noetic-octomap-msgs/focal
ros-noetic-octomap-ros/focal
ros-noetic-octomap-server/focal
ros-noetic-octomap/focal
ros-noetic-pcl-conversions/focal
ros-noetic-pcl-msgs/focal
ros-noetic-pcl-ros/focal
ros-noetic-pluginlib-tutorials/focal
ros-noetic-pluginlib/focal
ros-noetic-pybind11-catkin/focal
ros-noetic-python-qt-binding/focal
ros-noetic-qt-dotgraph/focal
ros-noetic-qt-gui-cpp/focal
ros-noetic-qt-gui-py-common/focal
ros-noetic-qt-gui/focal
ros-noetic-qwt-dependency/focal
ros-noetic-resource-retriever/focal
ros-noetic-robot-state-publisher/focal
ros-noetic-robot/focal
ros-noetic-ros-base/focal
ros-noetic-ros-comm/focal
ros-noetic-ros-core/focal
ros-noetic-ros-environment/focal
ros-noetic-ros-tutorials/focal
ros-noetic-ros/focal
ros-noetic-rosbag-migration-rule/focal
ros-noetic-rosbag-storage/focal
ros-noetic-rosbag/focal
ros-noetic-rosbash/focal
ros-noetic-rosboost-cfg/focal
ros-noetic-rosbuild/focal
ros-noetic-rosclean/focal
ros-noetic-rosconsole-bridge/focal
ros-noetic-rosconsole/focal
ros-noetic-roscpp-core/focal
ros-noetic-roscpp-serialization/focal
ros-noetic-roscpp-traits/focal
ros-noetic-roscpp-tutorials/focal
ros-noetic-roscpp/focal
ros-noetic-roscreate/focal
ros-noetic-rosgraph-msgs/focal
ros-noetic-rosgraph/focal
ros-noetic-roslang/focal
ros-noetic-roslaunch/focal
ros-noetic-roslib/focal
ros-noetic-roslint/focal
ros-noetic-roslisp/focal
ros-noetic-roslz4/focal
ros-noetic-rosmake/focal
ros-noetic-rosmaster/focal
ros-noetic-rosmsg/focal
ros-noetic-rosnode/focal
ros-noetic-rosout/focal
ros-noetic-rospack/focal
ros-noetic-rosparam/focal
ros-noetic-rospy-tutorials/focal
ros-noetic-rospy/focal
ros-noetic-rosserial-msgs/focal
ros-noetic-rosserial-python/focal
ros-noetic-rosservice/focal
ros-noetic-rostest/focal
ros-noetic-rostime/focal
ros-noetic-rostopic/focal
ros-noetic-rosunit/focal
ros-noetic-roswtf/focal
ros-noetic-rotate-recovery/focal
ros-noetic-rqt-action/focal
ros-noetic-rqt-bag-plugins/focal
ros-noetic-rqt-bag/focal
ros-noetic-rqt-common-plugins/focal
ros-noetic-rqt-console/focal
ros-noetic-rqt-dep/focal
ros-noetic-rqt-graph/focal
ros-noetic-rqt-gui-cpp/focal
ros-noetic-rqt-gui-py/focal
ros-noetic-rqt-gui/focal
ros-noetic-rqt-image-view/focal
ros-noetic-rqt-launch/focal
ros-noetic-rqt-logger-level/focal
ros-noetic-rqt-moveit/focal
ros-noetic-rqt-msg/focal
ros-noetic-rqt-nav-view/focal
ros-noetic-rqt-plot/focal
ros-noetic-rqt-pose-view/focal
ros-noetic-rqt-publisher/focal
ros-noetic-rqt-py-common/focal
ros-noetic-rqt-py-console/focal
ros-noetic-rqt-reconfigure/focal
ros-noetic-rqt-robot-dashboard/focal
ros-noetic-rqt-robot-monitor/focal
ros-noetic-rqt-robot-plugins/focal
ros-noetic-rqt-robot-steering/focal
ros-noetic-rqt-runtime-monitor/focal
ros-noetic-rqt-rviz/focal
ros-noetic-rqt-service-caller/focal
ros-noetic-rqt-shell/focal
ros-noetic-rqt-srv/focal
ros-noetic-rqt-tf-tree/focal
ros-noetic-rqt-top/focal
ros-noetic-rqt-topic/focal
ros-noetic-rqt-web/focal
ros-noetic-rqt/focal
ros-noetic-rviz-plugin-tutorials/focal
ros-noetic-rviz-python-tutorial/focal
ros-noetic-rviz/focal
ros-noetic-self-test/focal
ros-noetic-sensor-msgs/focal
ros-noetic-shape-msgs/focal
ros-noetic-smach-msgs/focal
ros-noetic-smach-ros/focal
ros-noetic-smach/focal
ros-noetic-smclib/focal
ros-noetic-std-msgs/focal
ros-noetic-std-srvs/focal
ros-noetic-stereo-msgs/focal
ros-noetic-tf-conversions/focal
ros-noetic-tf2-eigen/focal
ros-noetic-tf2-geometry-msgs/focal
ros-noetic-tf2-kdl/focal
ros-noetic-tf2-msgs/focal
ros-noetic-tf2-py/focal
ros-noetic-tf2-ros/focal
ros-noetic-tf2-tools/focal
ros-noetic-tf2/focal
ros-noetic-tf/focal
ros-noetic-topic-tools/focal
ros-noetic-trajectory-msgs/focal
ros-noetic-turtle-actionlib/focal
ros-noetic-turtle-tf2/focal
ros-noetic-turtle-tf/focal
ros-noetic-turtlebot3-autorace-2020/focal
ros-noetic-turtlebot3-autorace-camera/focal
ros-noetic-turtlebot3-autorace-core/focal
ros-noetic-turtlebot3-autorace-detect/focal
ros-noetic-turtlebot3-autorace-driving/focal
ros-noetic-turtlebot3-autorace-msgs/focal
ros-noetic-turtlebot3-bringup-dbgsym/focal
ros-noetic-turtlebot3-bringup/focal
ros-noetic-turtlebot3-description/focal
ros-noetic-turtlebot3-example/focal
ros-noetic-turtlebot3-fake-dbgsym/focal
ros-noetic-turtlebot3-fake/focal
ros-noetic-turtlebot3-gazebo-dbgsym/focal
ros-noetic-turtlebot3-gazebo/focal
ros-noetic-turtlebot3-msgs/focal
ros-noetic-turtlebot3-navigation/focal
ros-noetic-turtlebot3-simulations/focal
ros-noetic-turtlebot3-slam-dbgsym/focal
ros-noetic-turtlebot3-slam/focal
ros-noetic-turtlebot3-teleop/focal
ros-noetic-turtlebot3/focal
ros-noetic-turtlesim/focal
ros-noetic-urdf-parser-plugin/focal
ros-noetic-urdf-tutorial/focal
ros-noetic-urdf/focal
ros-noetic-velodyne-driver/focal
ros-noetic-velodyne-laserscan/focal
ros-noetic-velodyne-msgs/focal
ros-noetic-velodyne-pointcloud/focal
ros-noetic-velodyne/focal
ros-noetic-visualization-marker-tutorials/focal
ros-noetic-visualization-msgs/focal
ros-noetic-visualization-tutorials/focal
ros-noetic-viz/focal
ros-noetic-voxel-grid/focal
ros-noetic-webkit-dependency/focal
ros-noetic-xacro/focal
ros-noetic-xmlrpcpp/focal

</code></pre>

The following new packages were installed after following the commands given here to install dependent packages for noetic, but this did not help:

arduino-core avr-libc avrdude binutils-avr evemu-tools evtest gcc-avr geographiclib-tools joystick libevemu3 libftdi1 libhidapi-libusb0 libqt5svg5-dev libusb-0.1-4
python3-pygraphviz python3-termcolor ros-noetic-carrot-planner ros-noetic-compressed-image-transport ros-noetic-controller-manager-msgs ros-noetic-depth-image-proc
ros-noetic-drone-wrapper ros-noetic-dwa-local-planner ros-noetic-fake-localization ros-noetic-geographic-msgs ros-noetic-global-planner ros-noetic-gmapping ros-noetic-hri
ros-noetic-hri-msgs ros-noetic-image-geometry ros-noetic-image-proc ros-noetic-joy ros-noetic-laser-proc ros-noetic-libmavconn ros-noetic-mavlink ros-noetic-mavros
ros-noetic-mavros-msgs ros-noetic-move-slow-and-clear ros-noetic-navigation ros-noetic-openslam-gmapping ros-noetic-pr2-msgs ros-noetic-pr2-power-board ros-noetic-py-trees
ros-noetic-py-trees-msgs ros-noetic-rgbd-launch ros-noetic-rosbag-fancy-msgs ros-noetic-rosfmt ros-noetic-rosmon-msgs ros-noetic-rosserial-arduino ros-noetic-rosserial-client
ros-noetic-rqt-controller-manager ros-noetic-rqt-drone-teleop ros-noetic-rqt-ez-publisher ros-noetic-rqt-ground-robot-teleop ros-noetic-rqt-gui-cpp-dbgsym
ros-noetic-rqt-human-radar ros-noetic-rqt-human-radar-dbgsym ros-noetic-rqt-image-view-dbgsym ros-noetic-rqt-joint-trajectory-controller ros-noetic-rqt-multiplot
ros-noetic-rqt-multiplot-dbgsym ros-noetic-rqt-pr2-dashboard ros-noetic-rqt-py-trees ros-noetic-rqt-rosbag-fancy ros-noetic-rqt-rosbag-fancy-dbgsym ros-noetic-rqt-rosmon
ros-noetic-rqt-rosmon-dbgsym ros-noetic-rqt-rviz-dbgsym ros-noetic-teleop-twist-joy ros-noetic-teleop-twist-keyboard ros-noetic-unique-id ros-noetic-uuid-msgs
ros-noetic-variant-msgs ros-noetic-variant-topic-tools

ros-noetic-dynamixel-sdk
output of apt list --installed | grep "^ros" after installing dependent packages
ros-message-generation/focal
ros-message-runtime/focal
ros-noetic-actionlib-msgs/focal
ros-noetic-actionlib-tutorials/focal
ros-noetic-actionlib/focal
ros-noetic-amcl/focal
ros-noetic-angles/focal
ros-noetic-base-local-planner/focal
ros-noetic-bond-core/focal
ros-noetic-bond/focal
ros-noetic-bondcpp/focal
ros-noetic-bondpy/focal
ros-noetic-carrot-planner/focal
ros-noetic-catkin/focal
ros-noetic-class-loader/focal
ros-noetic-clear-costmap-recovery/focal
ros-noetic-cmake-modules/focal
ros-noetic-common-msgs/focal
ros-noetic-common-tutorials/focal
ros-noetic-compressed-image-transport/focal
ros-noetic-control-msgs/focal
ros-noetic-controller-manager-msgs/focal
ros-noetic-costmap-2d/focal
ros-noetic-cpp-common/focal
ros-noetic-cv-bridge/focal
ros-noetic-depth-image-proc/focal
ros-noetic-desktop/focal
ros-noetic-diagnostic-aggregator/focal
ros-noetic-diagnostic-analysis/focal
ros-noetic-diagnostic-common-diagnostics/focal
ros-noetic-diagnostic-msgs/focal
ros-noetic-diagnostic-updater/focal
ros-noetic-diagnostics/focal
ros-noetic-drone-wrapper/focal
ros-noetic-dwa-local-planner/focal
ros-noetic-dynamic-reconfigure/focal
ros-noetic-dynamixel-sdk/focal
ros-noetic-eigen-conversions/focal
ros-noetic-executive-smach/focal
ros-noetic-fake-localization/focal
ros-noetic-filters/focal
ros-noetic-gazebo-dev/focal
ros-noetic-gazebo-msgs/focal
ros-noetic-gazebo-ros/focal
ros-noetic-gencpp/focal
ros-noetic-geneus/focal
ros-noetic-genlisp/focal
ros-noetic-genmsg/focal
ros-noetic-gennodejs/focal
ros-noetic-genpy/focal
ros-noetic-geographic-msgs/focal
ros-noetic-geometry-msgs/focal
ros-noetic-geometry-tutorials/focal
ros-noetic-geometry/focal
ros-noetic-gl-dependency/focal
ros-noetic-global-planner/focal
ros-noetic-gmapping/focal
ros-noetic-grid-map-core/focal
ros-noetic-grid-map-cv/focal
ros-noetic-grid-map-demos/focal
ros-noetic-grid-map-filters/focal
ros-noetic-grid-map-loader/focal
ros-noetic-grid-map-msgs/focal
ros-noetic-grid-map-octomap/focal
ros-noetic-grid-map-ros/focal
ros-noetic-grid-map-rviz-plugin/focal
ros-noetic-grid-map-visualization/focal
ros-noetic-grid-map/focal
ros-noetic-hls-lfcd-lds-driver/focal
ros-noetic-hri-msgs/focal
ros-noetic-hri/focal
ros-noetic-image-geometry/focal
ros-noetic-image-proc/focal
ros-noetic-image-transport/focal
ros-noetic-interactive-marker-tutorials/focal
ros-noetic-interactive-markers/focal
ros-noetic-joint-state-publisher-gui/focal
ros-noetic-joint-state-publisher/focal
ros-noetic-joy/focal
ros-noetic-kdl-conversions/focal
ros-noetic-kdl-parser/focal
ros-noetic-laser-geometry/focal
ros-noetic-laser-proc/focal
ros-noetic-libmavconn/focal
ros-noetic-librviz-tutorial/focal
ros-noetic-map-msgs/focal
ros-noetic-map-server/focal
ros-noetic-mavlink/focal
ros-noetic-mavros-msgs/focal
ros-noetic-mavros/focal
ros-noetic-media-export/focal
ros-noetic-message-filters/focal
ros-noetic-message-generation/focal
ros-noetic-message-runtime/focal
ros-noetic-mk/focal
ros-noetic-move-base-msgs/focal
ros-noetic-move-base/focal
ros-noetic-move-slow-and-clear/focal
ros-noetic-nav-core/focal
ros-noetic-nav-msgs/focal
ros-noetic-navfn/focal
ros-noetic-navigation/focal
ros-noetic-nodelet-core/focal
ros-noetic-nodelet-topic-tools/focal
ros-noetic-nodelet-tutorial-math/focal
ros-noetic-nodelet/focal
ros-noetic-octomap-mapping/focal
ros-noetic-octomap-msgs/focal
ros-noetic-octomap-ros/focal
ros-noetic-octomap-server/focal
ros-noetic-octomap/focal
ros-noetic-openslam-gmapping/focal
ros-noetic-pcl-conversions/focal
ros-noetic-pcl-msgs/focal
ros-noetic-pcl-ros/focal
ros-noetic-pluginlib-tutorials/focal
ros-noetic-pluginlib/focal
ros-noetic-pr2-msgs/focal
ros-noetic-pr2-power-board/focal
ros-noetic-py-trees-msgs/focal
ros-noetic-py-trees/focal
ros-noetic-pybind11-catkin/focal
ros-noetic-python-qt-binding/focal
ros-noetic-qt-dotgraph/focal
ros-noetic-qt-gui-cpp/focal
ros-noetic-qt-gui-py-common/focal
ros-noetic-qt-gui/focal
ros-noetic-qwt-dependency/focal
ros-noetic-resource-retriever/focal
ros-noetic-rgbd-launch/focal
ros-noetic-robot-state-publisher/focal
ros-noetic-robot/focal
ros-noetic-ros-base/focal
ros-noetic-ros-comm/focal
ros-noetic-ros-core/focal
ros-noetic-ros-environment/focal
ros-noetic-ros-numpy/focal
ros-noetic-ros-tutorials/focal
ros-noetic-ros/focal
ros-noetic-rosbag-fancy-msgs/focal
ros-noetic-rosbag-migration-rule/focal
ros-noetic-rosbag-storage/focal
ros-noetic-rosbag/focal
ros-noetic-rosbash/focal
ros-noetic-rosboost-cfg/focal
ros-noetic-rosbuild/focal
ros-noetic-rosclean/focal
ros-noetic-rosconsole-bridge/focal
ros-noetic-rosconsole/focal
ros-noetic-roscpp-core/focal
ros-noetic-roscpp-serialization/focal
ros-noetic-roscpp-traits/focal
ros-noetic-roscpp-tutorials/focal
ros-noetic-roscpp/focal
ros-noetic-roscreate/focal
ros-noetic-rosfmt/focal
ros-noetic-rosgraph-msgs/focal
ros-noetic-rosgraph/focal
ros-noetic-roslang/focal
ros-noetic-roslaunch/focal
ros-noetic-roslib/focal
ros-noetic-roslint/focal
ros-noetic-roslisp/focal
ros-noetic-roslz4/focal
ros-noetic-rosmake/focal
ros-noetic-rosmaster/focal
ros-noetic-rosmon-msgs/focal
ros-noetic-rosmsg/focal
ros-noetic-rosnode/focal
ros-noetic-rosout/focal
ros-noetic-rospack/focal
ros-noetic-rosparam/focal
ros-noetic-rospy-tutorials/focal
ros-noetic-rospy/focal
ros-noetic-rosserial-arduino/focal
ros-noetic-rosserial-client/focal
ros-noetic-rosserial-msgs/focal
ros-noetic-rosserial-python/focal
ros-noetic-rosservice/focal
ros-noetic-rostest/focal
ros-noetic-rostime/focal
ros-noetic-rostopic/focal
ros-noetic-rosunit/focal
ros-noetic-roswtf/focal
ros-noetic-rotate-recovery/focal
ros-noetic-rqt-action/focal
ros-noetic-rqt-bag-plugins/focal
ros-noetic-rqt-bag/focal
ros-noetic-rqt-common-plugins/focal
ros-noetic-rqt-console/focal
ros-noetic-rqt-controller-manager/focal
ros-noetic-rqt-dep/focal
ros-noetic-rqt-drone-teleop/focal
ros-noetic-rqt-ez-publisher/focal
ros-noetic-rqt-graph/focal
ros-noetic-rqt-ground-robot-teleop/focal
ros-noetic-rqt-gui-cpp-dbgsym/focal
ros-noetic-rqt-gui-cpp/focal
ros-noetic-rqt-gui-py/focal
ros-noetic-rqt-gui/focal
ros-noetic-rqt-human-radar-dbgsym/focal
ros-noetic-rqt-human-radar/focal
ros-noetic-rqt-image-view-dbgsym/focal
ros-noetic-rqt-image-view/focal
ros-noetic-rqt-joint-trajectory-controller/focal
ros-noetic-rqt-launch/focal
ros-noetic-rqt-logger-level/focal
ros-noetic-rqt-moveit/focal
ros-noetic-rqt-msg/focal
ros-noetic-rqt-multiplot-dbgsym/focal
ros-noetic-rqt-multiplot/focal
ros-noetic-rqt-nav-view/focal
ros-noetic-rqt-plot/focal
ros-noetic-rqt-pose-view/focal
ros-noetic-rqt-pr2-dashboard/focal
ros-noetic-rqt-publisher/focal
ros-noetic-rqt-py-common/focal
ros-noetic-rqt-py-console/focal
ros-noetic-rqt-py-trees/focal
ros-noetic-rqt-reconfigure/focal
ros-noetic-rqt-robot-dashboard/focal
ros-noetic-rqt-robot-monitor/focal
ros-noetic-rqt-robot-plugins/focal
ros-noetic-rqt-robot-steering/focal
ros-noetic-rqt-rosbag-fancy-dbgsym/focal
ros-noetic-rqt-rosbag-fancy/focal
ros-noetic-rqt-rosmon-dbgsym/focal
ros-noetic-rqt-rosmon/focal
ros-noetic-rqt-runtime-monitor/focal
ros-noetic-rqt-rviz-dbgsym/focal
ros-noetic-rqt-rviz/focal
ros-noetic-rqt-service-caller/focal
ros-noetic-rqt-shell/focal
ros-noetic-rqt-srv/focal
ros-noetic-rqt-tf-tree/focal
ros-noetic-rqt-top/focal
ros-noetic-rqt-topic/focal
ros-noetic-rqt-web/focal
ros-noetic-rqt/focal
ros-noetic-rviz-plugin-tutorials/focal
ros-noetic-rviz-python-tutorial/focal
ros-noetic-rviz/focal
ros-noetic-self-test/focal
ros-noetic-sensor-msgs/focal
ros-noetic-shape-msgs/focal
ros-noetic-smach-msgs/focal
ros-noetic-smach-ros/focal
ros-noetic-smach/focal
ros-noetic-smclib/focal
ros-noetic-std-msgs/focal
ros-noetic-std-srvs/focal
ros-noetic-stereo-msgs/focal
ros-noetic-teleop-twist-joy/focal
ros-noetic-teleop-twist-keyboard/focal
ros-noetic-tf-conversions/focal
ros-noetic-tf2-eigen/focal
ros-noetic-tf2-geometry-msgs/focal
ros-noetic-tf2-kdl/focal
ros-noetic-tf2-msgs/focal
ros-noetic-tf2-py/focal
ros-noetic-tf2-ros/focal
ros-noetic-tf2-tools/focal
ros-noetic-tf2/focal
ros-noetic-tf/focal
ros-noetic-topic-tools/focal
ros-noetic-trajectory-msgs/focal
ros-noetic-turtle-actionlib/focal
ros-noetic-turtle-tf2/focal
ros-noetic-turtle-tf/focal
ros-noetic-turtlebot3-autorace-2020/focal
ros-noetic-turtlebot3-autorace-camera/focal
ros-noetic-turtlebot3-autorace-core/focal
ros-noetic-turtlebot3-autorace-detect/focal
ros-noetic-turtlebot3-autorace-driving/focal
ros-noetic-turtlebot3-autorace-msgs/focal
ros-noetic-turtlebot3-bringup-dbgsym/focal
ros-noetic-turtlebot3-bringup/focal
ros-noetic-turtlebot3-description/focal
ros-noetic-turtlebot3-example/focal
ros-noetic-turtlebot3-fake-dbgsym/focal
ros-noetic-turtlebot3-fake/focal
ros-noetic-turtlebot3-gazebo-dbgsym/focal
ros-noetic-turtlebot3-gazebo/focal
ros-noetic-turtlebot3-msgs/focal
ros-noetic-turtlebot3-navigation/focal
ros-noetic-turtlebot3-simulations/focal
ros-noetic-turtlebot3-slam-dbgsym/focal
ros-noetic-turtlebot3-slam/focal
ros-noetic-turtlebot3-teleop/focal
ros-noetic-turtlebot3/focal
ros-noetic-turtlesim/focal
ros-noetic-unique-id/focal
ros-noetic-urdf-parser-plugin/focal
ros-noetic-urdf-tutorial/focal
ros-noetic-urdf/focal
ros-noetic-uuid-msgs/focal
ros-noetic-variant-msgs/focal
ros-noetic-variant-topic-tools/focal
ros-noetic-velodyne-driver/focal
ros-noetic-velodyne-laserscan/focal
ros-noetic-velodyne-msgs/focal
ros-noetic-velodyne-pointcloud/focal
ros-noetic-velodyne/focal
ros-noetic-visualization-marker-tutorials/focal
ros-noetic-visualization-msgs/focal
ros-noetic-visualization-tutorials/focal
ros-noetic-viz/focal
ros-noetic-voxel-grid/focal
ros-noetic-webkit-dependency/focal
ros-noetic-xacro/focal
ros-noetic-xmlrpcpp/focal

I noticed that the author of this official video about getting started with TurtleBot3 in ROS1 Noetic cloned turtlebot3 and turtlebot3_simulations from the github repo and built with catkin, rather than installing them via apt. I tried that, they built fine, and I re-sourced, but this did not resolve the issue either.

With roslaunch turtlebot3_bringup turtlebot3_model.launch, there's also no "odom":
Screenshot from 2024-05-30 21-39-21

When I run roslaunch turtlebot3_gazebo turtlebot3_empty_world.launch, the turtlebot visually appears in gazebo:
Screenshot from 2024-05-30 20-56-41

However, no tf data seems to be published:
Screenshot from 2024-05-30 21-00-23

It's the same with roslaunch turtlebot3_gazebo turtlebot3_world.launch:
Screenshot from 2024-05-30 21-06-50

But with roslaunch turtlebot3_fake turtlebot3_fake.launch, the tf tree shows up and includes "odom":
Screenshot from 2024-05-30 21-10-28

In addition to experiencing the missing "odom" issue on the aforementioned bare-metal Jetson device, I am able to replicate it in a docker container built from the following Dockerfile I've made for elevation_mapping_cupy:

`Dockerfile` for `elevation_mapping_cupy`
FROM nvidia/cuda:12.3.2-cudnn9-devel-ubuntu20.04

ARG DEBIAN_FRONTEND=noninteractive

ARG ROS_DISTRO=noetic

RUN apt-key adv \
      --keyserver "hkp:https://keyserver.ubuntu.com:80" \
      --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 && \
    echo "deb http:https://packages.ros.org/ros/ubuntu focal main" \
      > /etc/apt/sources.list.d/ros-latest.list && \
    apt-get update && \
    apt-get install \
      --yes \
      --no-install-recommends \
      git \
      libboost-all-dev \
      libeigen3-dev \
      libgmp-dev \
      libmpfr-dev \
      libopencv-dev \
      python3-pip \
      python3.8 \
      ros-$ROS_DISTRO-grid-map-core \
      ros-$ROS_DISTRO-grid-map-msgs \
      ros-$ROS_DISTRO-grid-map-ros \
      ros-$ROS_DISTRO-grid-map-rviz-plugin \
      ros-$ROS_DISTRO-pcl-ros \
      ros-$ROS_DISTRO-pybind11-catkin \
      ros-$ROS_DISTRO-robot-state-publisher \
      ros-$ROS_DISTRO-ros-base \
      ros-$ROS_DISTRO-ros-numpy \
      ros-$ROS_DISTRO-tf-conversions \
      ros-$ROS_DISTRO-turtlebot3-gazebo \
      ros-$ROS_DISTRO-turtlebot3-teleop && \
    apt-get clean && \
    pip3 install --upgrade \
      catkin-tools \
      cupy-cuda12x \
      matplotlib \
      networkx==3.0 \
      opencv-python \
      scikit-learn \
      ruamel.yaml \
      scikit-image==0.19 \
      scipy==1.7 \
      shapely==1.7.1 \
      simple-parsing && \
    pip3 install \
      torch \
      torchvision \
      torchaudio \
      --index-url "https://download.pytorch.org/whl/cu118" && \
    pip3 install \
      numpy==1.22 \
      "git+https://github.com/facebookresearch/detectron2.git" && \
    mkdir -p /catkin_ws/src && \
    cd /catkin_ws/src && \
    git clone https://github.com/leggedrobotics/elevation_mapping_cupy && \
    cd /catkin_ws && \
    . /opt/ros/$ROS_DISTRO/setup.sh && \
    catkin init && \
    catkin build

RUN echo "source /opt/ros/noetic/setup.bash" >> /etc/bash.bashrc && \
    echo "source /catkin_ws/devel/setup.bash" >> /etc/bash.bashrc

ENV TURTLEBOT3_MODEL=waffle

I run the image with the following script, which assumes that the image is named elevation_mapping_cupy and whose purpose is to allow GUI programs to run through the host X server:

`run.sh`
containerID=$(docker create \
                --device /dev/dri \
                --env="DISPLAY" \
                --env="QT_X11_NO_MITSHM=1" \
                --interactive \
                --rm \
                --tty \
                --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \
                elevation_mapping_cupy)

hostname=$(docker inspect --format='{{ .Config.Hostname }}' $containerID)

xhost +local:$hostname

docker start --interactive $containerID

xhost -local:$hostname

To run that exact image, you'll need an NVIDIA graphics card with CUDA and the NVIDIA container toolkit, plus an X server, and you'll need to adjust the base image and pip installed major version of cupy. But the point with this Dockerfile is to show that the missing "odom" behavior doesn't only happen only in one environment. I've run the built container on a completely different machine and architecture, and still don't see any "odom" frame. This Dockerfile doesn't include the so-called dependent ROS packages, but as I noted above, installing those didn't change anything with the missing "odom", and yes, I did try this also in the running docker container and re-sourcing.

For a more minimal example, I made the following Dockerfile which includes all of the so-called dependent packages, doesn't require any GPU, and builds turtlebot3_simulations and turtlebot3_simulations with catkin_build:

minimal `Dockerfile` for turtlebot3 to illustrate issue
FROM ros:noetic-ros-base

ARG DEBIAN_FRONTEND=noninteractive

RUN apt-get update && \
    apt-get install \
      --yes \
      --no-install-recommends \
      git \
      python3-pip \
      python3.8 \
      ros-$ROS_DISTRO-amcl \
      ros-$ROS_DISTRO-compressed-image-transport \
      ros-$ROS_DISTRO-dynamixel-sdk \
      ros-$ROS_DISTRO-gmapping \
      ros-$ROS_DISTRO-interactive-markers \
      ros-$ROS_DISTRO-joy \
      ros-$ROS_DISTRO-laser-proc \
      ros-$ROS_DISTRO-map-server \
      ros-$ROS_DISTRO-move-base \
      ros-$ROS_DISTRO-navigation \
      ros-$ROS_DISTRO-rgbd-launch \
      ros-$ROS_DISTRO-rosserial-arduino \
      ros-$ROS_DISTRO-rosserial-client \
      ros-$ROS_DISTRO-rosserial-msgs \
      ros-$ROS_DISTRO-rosserial-python \
      ros-$ROS_DISTRO-rqt* \
      ros-$ROS_DISTRO-rviz \
      ros-$ROS_DISTRO-teleop-twist-joy \
      ros-$ROS_DISTRO-teleop-twist-keyboard \
      ros-$ROS_DISTRO-turtlebot3 \
      ros-$ROS_DISTRO-turtlebot3-gazebo \
      ros-$ROS_DISTRO-turtlebot3-msgs \
      ros-$ROS_DISTRO-urdf \
      ros-$ROS_DISTRO-xacro && \
    apt-get clean && \
    pip3 install --upgrade \
      catkin-tools && \
    mkdir -p /catkin_ws/src && \
    cd /catkin_ws/src && \
    git clone https://github.com/ROBOTIS-GIT/turtlebot3.git && \
    git clone https://github.com/ROBOTIS-GIT/turtlebot3_simulations.git && \
    cd /catkin_ws && \
    . /opt/ros/$ROS_DISTRO/setup.sh && \
    catkin init && \
    catkin build

RUN echo "source /opt/ros/noetic/setup.bash" >> /etc/bash.bashrc && \
    echo "source /catkin_ws/devel/setup.bash" >> /etc/bash.bashrc

ENV TURTLEBOT3_MODEL=waffle

Run it with:

`run.sh`
#!/bin/bash

containerID=$(docker create \
                --env="DISPLAY" \
                --env="QT_X11_NO_MITSHM=1" \
                --interactive \
                --rm \
                --tty \
                --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \
                turtlebot3 \
              roslaunch turtlebot3_bringup turtlebot3_model.launch)

echo "container ID: $containerID"

hostname=$(docker inspect --format='{{ .Config.Hostname }}' $containerID)

echo "hostname: $hostname"

xhost +local:$hostname

xhost

docker start --interactive $containerID

xhost -local:$hostname

Then in another window, to view the tf tree (replace boring_noether with the name of the running container, which you can get from docker ps):

docker exec \
  --env="DISPLAY" \
  --env="QT_X11_NO_MITSHM=1" \
  --interactive \
  --tty \
  boring_noether \
  /bin/bash -c "source /opt/ros/noetic/setup.bash; "`\
  `"source /catkin_ws/devel/setup.bash; "`\
  `"rosrun rqt_tf_tree rqt_tf_tree"

With this, I again see no "odom":
Screenshot from 2024-05-30 23-03-14

Am I missing something simple, or is this a bug? In the latter case, is there any fix or workaround?

@doctorcolossus doctorcolossus changed the title no "odom" frame turtlebot3_gazebo: no "odom" frame May 31, 2024
@ZhoZhicheng
Copy link

It looks like a problem between turtlebot and gazebo. Perhaps you can check if ros-noetic-turtlebot3-gazebo is installed. If not, the model in gazebo may wrong.

@doctorcolossus
Copy link
Author

Hi @ZhoZhicheng, thank you for your idea. I listed my ROS-related apt packages above, and as you can see, ros-noetic-turtlebot3-gazebo/focal is installed. What do you mean that the model in Gazebo may be wrong? Do you know how that could be checked or fixed?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants