Issues After Migrating to ROS 2 Jazzy: RViz Icons and Mesh Loading

Hi everyone,

I recently migrated to ROS 2 Jazzy and I’m encountering two issues that I haven’t been able to resolve:

1. RViz2 Icon Loading Errors

When I launch RViz2, I get several errors related to loading icons. The log shows messages like:

[rviz2-3] [ERROR] [...]: Could not load pixmap package://rviz_common/icons/rotate.svg -- using default cursor instead.
[rviz2-3] [ERROR] [...]: Could not load pixmap package://rviz_common/icons/rotate_cam.svg -- using default cursor instead.
[rviz2-3] [ERROR] [...]: Could not load pixmap package://rviz_common/icons/move2d.svg -- using default cursor instead.
[rviz2-3] [ERROR] [...]: Could not load pixmap package://rviz_common/icons/zoom.svg -- using default cursor instead.
[rviz2-3] [ERROR] [...]: Could not load pixmap package://rviz_common/icons/crosshair.svg -- using default cursor instead.

RViz still works, but all cursors appear as default.

2. URDF Mesh File Not Found

When I launch my robot description, I get an error saying it cannot find the .stl mesh files, even though they are correctly placed in the install directory.

In my URDF I use the following line:

<mesh filename="file://$(find niryo_robot_description)/urdf/ned3/stl/ned3_pro_shoulder_assembly.stl"/>

Is there any change in how ROS 2 Jazzy handles resource paths or mesh loading? Any advice on how to fix these two issues would be greatly appreciated.

Thanks in advance!

Jaime

I have had similar issues recently, the issue appears to be a incorrectly installed rivz2 on the workstation running rviz. On one workstation there was no issue, but on the compromised workstation, it couldn’t parse the path to mesh files.

Try reinstalling rviz2. This solved similar issues for me on one of the two workstations I use. Hard to debug if it was working on one and not the other.

Hi @Alan_Federman,

Thanks for your quick response. I reinstalled rviz2 using the following command:

sudo apt install --reinstall ros-jazzy-rviz2

However, the issue persists — it still doesn’t detect the .stl files. To rule out a general problem with RViz2, I tested the turtlebot4_viz package with:

ros2 launch turtlebot4_viz view_model.launch.py

and that one works fine.

I really appreciate your help.

Best regards,
Jaime

Hi @Alan_Federman,

Problem resolved! I downloaded the RViz source and tried compiling rviz_common. At around 82% of the build process, I encountered the following errors:

/usr/bin/ld: /opt/ros/jazzy/lib/libresource_retriever.so: undefined reference to `curl_global_cleanup@CURL_OPENSSL_4'
/usr/bin/ld: /opt/ros/jazzy/lib/libresource_retriever.so: undefined reference to `curl_global_init@CURL_OPENSSL_4'
/usr/bin/ld: /opt/ros/jazzy/lib/libresource_retriever.so: undefined reference to `curl_easy_perform@CURL_OPENSSL_4'
/usr/bin/ld: /opt/ros/jazzy/lib/libresource_retriever.so: undefined reference to `curl_easy_init@CURL_OPENSSL_4'
/usr/bin/ld: /opt/ros/jazzy/lib/libresource_retriever.so: undefined reference to `curl_easy_setopt@CURL_OPENSSL_4'
/usr/bin/ld: /opt/ros/jazzy/lib/libresource_retriever.so: undefined reference to `curl_easy_cleanup@CURL_OPENSSL_4'

To fix it, I reinstalled libcurl with:

sudo apt update
sudo apt install libcurl4-openssl-dev

After that, I ran rviz2 and it worked perfectly.

Thanks again and best regards,

Jaime

I am wondering if the problem first occurred after an apt upgrade or rosdep update?
I am just now experiencing a problem with teleop_twist_joy not working after an upgrade of Ubuntu.
I guess something to try is building it from source and seeing if it is missing a dependency.
Playing whack-a-mole with missing dependencies is the bane of my ROS existance.

Hi @Alan_Federman
The happiness didn’t last long — it’s stopped working again. I don’t know whether to laugh or cry.

Best regards,

Jaime

Hi everyone,

I don’t want to be annoying by saying “it’s fixed” and then coming back to say “actually, it’s not,” but I think I’ve finally solved the issue.

The root of the problem was with the curl library. I was getting this error:

curl: /usr/local/lib/libcurl.so.4: no version information available (required by curl)
curl 8.5.0 (x86_64-pc-linux-gnu) libcurl/8.10.1 OpenSSL/3.0.13 zlib/1.2.13.zlib-ng
Release-Date: 2023-12-06, security patched: 8.5.0-2ubuntu10.6
Protocols: http https
Features: alt-svc AsynchDNS HSTS HTTPS-proxy IPv6 Largefile libz NTLM SSL threadsafe TLS-SRP UnixSockets
WARNING: curl and libcurl versions do not match. Functionality may be affected.

It turned out to be a version conflict between curl and libcurl. I followed a few steps to resolve it (which I can share if needed), and after rebooting my machine, everything still works — which wasn’t the case yesterday.

  • The curl executable: version 8.5.0 (from Ubuntu).
  • The libcurl.so.4 dynamic library: version 8.10.1, installed in /usr/local/lib/.

The Problem

A custom version of libcurl was installed in /usr/local/lib/, likely built from source, and it’s interfering with Ubuntu’s default curl binary, which expects a different version.

This causes:

  • Runtime symbol errors like:

    undefined reference to `curl_global_init@CURL_OPENSSL_4`
    
  • And warnings such as:

    WARNING: curl and libcurl versions do not match.
    

Recommended Fix: Remove the conflicting /usr/local/lib version

Step 1: Check if the custom version exists

ls -l /usr/local/lib/libcurl*

If you see output like:

/usr/local/lib/libcurl.so
/usr/local/lib/libcurl.so.4
/usr/local/lib/libcurl.so.4.8.10

Then the custom installation is indeed present and causing issues.


Step 2: Remove the manual installation

sudo rm /usr/local/lib/libcurl.so*

This won’t break your system as long as libcurl is properly installed via APT.


Step 3: Regenerate the shared library cache

sudo ldconfig

Step 4: Verify the system version is now used

ldd $(which curl) | grep libcurl

Expected output:

libcurl.so.4 => /usr/lib/x86_64-linux-gnu/libcurl.so.4

Step 5: Reinstall the official version (just in case)

sudo apt install --reinstall libcurl4-openssl-dev

Expected Result

Now when you run:

curl --version

Hope this helps someone else.

Cheers!

1 Like