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

{humble} WIP: ros-image-world fixes for Humble Kirkstone #1150

Open
wants to merge 60 commits into
base: kirkstone
Choose a base branch
from

Conversation

robwoolley
Copy link
Collaborator

@robwoolley robwoolley commented May 21, 2024

This is the latest revision to enable ignition and rviz2 to support building the turtlebot3 recipe on ROS Humble with
Yocto Kirkstone.

It requires meta-clang and meta-qt5. The following also needs to be added to local.conf:

DISTRO_FEATURES:append = " x11 opengl vulkan polkit"
PACKAGECONFIG:append:pn-clang = " libomp"
PACKAGECONFIG:append:pn-qtbase-native = " gui"
PACKAGECONFIG:append:pn-python3 = " tk"

Tested on Raspberry Pi 4 using the shell mode with this kas script found in the build branch of meta-ros:
oeros-kirkstone-humble-raspberrypi4-64.yml

Needs some work before I can merge this. I am just submitting this PR for additional feedback from people eager to support the Turtlebot3, rviz, or Ignition/Gazebo.

robwoolley added 30 commits May 21, 2024 07:35
Upstream changes set PY_DEST so that the Python module is installed
in the correct directory.

These changes also now use Python3_SOABI. This variable is introduced
in CMake 3.26, but Kirkstone uses 3.22.3. Thus, we must supply
PYTHON_SOABI in the recipe.

Signed-off-by: Rob Woolley <[email protected]>
The pid-controller dependency is no longer required.

Signed-off-by: Rob Woolley <[email protected]>
The googletest recipe provides gtest in OpenEmbedded.

Signed-off-by: Rob Woolley <[email protected]>
The identifer LGPL-3.0+ has been deprecated in favour of
LGPL-3.0-or-later.

Signed-off-by: Rob Woolley <[email protected]>
This is the latest version supported in ROS 2 Humble.

Signed-off-by: Rob Woolley <[email protected]>
The libfyaml receipe is needed by mrpt2.

Signed-off-by: Rob Woolley <[email protected]>
Add nanogui recipe as a dependency for mrpt2.

Signed-off-by: Rob Woolley <[email protected]>
Receipe does not yet build.  It currently fails on finding TrueType
fonts:
    Could not find ENTYPO_TTF_FILE using the following files: entypo.ttf

Signed-off-by: Rob Woolley <[email protected]>
Add recipe for jxrlib for freeimage, ogre-next, Gazebo and others.

Using Debian as the upstream source including additional patches.

Signed-off-by: Rob Woolley <[email protected]>
This version is being backported from scarthgap.

The tiff recipe is used by gdal, openscenegraph, and freeimage.

Signed-off-by: Rob Woolley <[email protected]>
The freeimage recipe is used by ogre, ogre-next, ignition, and Gazebo.

Debian is used as the upstream source including patches.

Signed-off-by: Rob Woolley <[email protected]>
This recipe is required by warehouse-ros-mongo which uses mongodb.

Debian is being used as the upstream source including patches.

Additional patches were required to provide bitbake variables to
the Scons build system.  Fixes to the Scons SConstruct file were
also required to use Python3.

Signed-off-by: Rob Woolley <[email protected]>
Add openexr as a dependency for freeimage and ogre.

Signed-off-by: Rob Woolley <[email protected]>
Add gts as a dependency for Gazebo and Ignition.

Signed-off-by: Rob Woolley <[email protected]>
Python3 colorcet is required by caret-analyze. Colorcet also depends
on param and pyct.

Signed-off-by: Rob Woolley <[email protected]>
We can't use CMake's find_library() macro to find libm in OpenEmbedded
when building native recipes.  CMake is intentionally configured
to not look in the host library paths.

As a result, we must ensure that CMake is provided with a suitable
default value for the name of the math library.

Upstream-Status: Pending

Signed-off-by: Rob Woolley <[email protected]>
Add sdformat9 for Ignition or Gazebo recipes that require the older version.

Signed-off-by: Rob Woolley <[email protected]>
Add sdformat12 for Ignition or Gazebo recipes that require the newer version.

Signed-off-by: Rob Woolley <[email protected]>
The imath package is a dependency of openexr.

Signed-off-by: Rob Woolley <[email protected]>
Add CMake support for Qt5 and limit ignition-gui6 as a build
dependency that doesn't require building natively.

Signed-off-by: Rob Woolley <[email protected]>
robwoolley added 11 commits May 23, 2024 13:45
These recipes are dependencies for build tools used to build ignition.

Signed-off-by: Rob Woolley <[email protected]>
The libdeflate library is needed for ignition-common4-native.

Signed-off-by: Rob Woolley <[email protected]>
The branches listed in the generated recipes have been deleted upstream.
This means that the commit ids are orphaned and don't have an associated
branch.

However, a duplicate repository named game_controller_spl-release still
has the branches intact. Using bbappend to set the SRC_URI allows the
do_fetch task to succeed.

Missing build dependencies are also added to
game-controller-spl-interfaces matching the fix required for other
interface recipes.

Signed-off-by: Rob Woolley <[email protected]>
@whni
Copy link

whni commented May 24, 2024

@whni I have made the changes you suggested. Let me know if you would like me to give you credit for the fixes. If so, please let me know what name and email address to use.

Hi @robwoolley it's fine. So glad that I can contribute to this project. Btw, we are planning a new project so hope we could cooperate in a long term :)

@whni
Copy link

whni commented May 26, 2024

Hi @robwoolley

Reporting another issue when bitbake moveit package. Please see the attached moveit_build_fail.log
for full log

For the rosidl-adapter error, we can add it to build dependency of moveit-setup-framework recipe. However, I have no idea on the following errors. Thanks a lot if you could take a look

| -- rviz_ogre_vendor::RenderSystem_GL for IMPORTED_LOCATION_RELEASE: _render_system_gl_static_library_abs-NOTFOUND
| -- rviz_ogre_vendor::RenderSystem_GL for IMPORTED_LOCATION_DEBUG: _render_system_gl_static_library_abs-NOTFOUND
| CMake Warning at /home/weihengni/Projects/robotpi/build/BUILD-robotpi-humble-kirkstone/work/cortexa72-robotpi-linux/moveit-setup-framework/2.5.5-1-r0/recipe-sysroot/usr/lib/cmake/Qt5/Qt5Config.cmake:7 (message):
|   SkippingbecauseOE_QMAKE_PATH_EXTERNAL_HOST_BINSisnotdefined
| Call Stack (most recent call first):
|   /home/weihengni/Projects/robotpi/build/BUILD-robotpi-humble-kirkstone/work/cortexa72-robotpi-linux/moveit-setup-framework/2.5.5-1-r0/recipe-sysroot/usr/share/rviz_common/cmake/rviz_common-extras.cmake:30 (find_package)
|   /home/weihengni/Projects/robotpi/build/BUILD-robotpi-humble-kirkstone/work/cortexa72-robotpi-linux/moveit-setup-framework/2.5.5-1-r0/recipe-sysroot/usr/share/rviz_common/cmake/rviz_commonConfig.cmake:41 (include)
|   /home/weihengni/Projects/robotpi/build/BUILD-robotpi-humble-kirkstone/work/cortexa72-robotpi-linux/moveit-setup-framework/2.5.5-1-r0/recipe-sysroot/usr/share/moveit_ros_visualization/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)
|   /home/weihengni/Projects/robotpi/build/BUILD-robotpi-humble-kirkstone/work/cortexa72-robotpi-linux/moveit-setup-framework/2.5.5-1-r0/recipe-sysroot/usr/share/moveit_ros_visualization/cmake/moveit_ros_visualizationConfig.cmake:41 (include)
|   CMakeLists.txt:13 (find_package)
| 
| 
| CMake Warning at /home/weihengni/Projects/robotpi/build/BUILD-robotpi-humble-kirkstone/work/cortexa72-robotpi-linux/moveit-setup-framework/2.5.5-1-r0/recipe-sysroot/usr/lib/cmake/Qt5/Qt5Config.cmake:7 (message):
|   SkippingbecauseOE_QMAKE_PATH_EXTERNAL_HOST_BINSisnotdefined
| Call Stack (most recent call first):
|   /home/weihengni/Projects/robotpi/build/BUILD-robotpi-humble-kirkstone/work/cortexa72-robotpi-linux/moveit-setup-framework/2.5.5-1-r0/recipe-sysroot/usr/share/rviz_rendering/cmake/rviz_rendering-extras.cmake:30 (find_package)
|   /home/weihengni/Projects/robotpi/build/BUILD-robotpi-humble-kirkstone/work/cortexa72-robotpi-linux/moveit-setup-framework/2.5.5-1-r0/recipe-sysroot/usr/share/rviz_rendering/cmake/rviz_renderingConfig.cmake:41 (include)
|   /home/weihengni/Projects/robotpi/build/BUILD-robotpi-humble-kirkstone/work/cortexa72-robotpi-linux/moveit-setup-framework/2.5.5-1-r0/recipe-sysroot/usr/share/rviz_common/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)
|   /home/weihengni/Projects/robotpi/build/BUILD-robotpi-humble-kirkstone/work/cortexa72-robotpi-linux/moveit-setup-framework/2.5.5-1-r0/recipe-sysroot/usr/share/rviz_common/cmake/rviz_commonConfig.cmake:41 (include)
|   /home/weihengni/Projects/robotpi/build/BUILD-robotpi-humble-kirkstone/work/cortexa72-robotpi-linux/moveit-setup-framework/2.5.5-1-r0/recipe-sysroot/usr/share/moveit_ros_visualization/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)
|   /home/weihengni/Projects/robotpi/build/BUILD-robotpi-humble-kirkstone/work/cortexa72-robotpi-linux/moveit-setup-framework/2.5.5-1-r0/recipe-sysroot/usr/share/moveit_ros_visualization/cmake/moveit_ros_visualizationConfig.cmake:41 (include)
|   CMakeLists.txt:13 (find_package)
| 
| 
| CMake Warning at /home/weihengni/Projects/robotpi/build/BUILD-robotpi-humble-kirkstone/work/cortexa72-robotpi-linux/moveit-setup-framework/2.5.5-1-r0/recipe-sysroot/usr/lib/cmake/Qt5/Qt5Config.cmake:7 (message):
|   SkippingbecauseOE_QMAKE_PATH_EXTERNAL_HOST_BINSisnotdefined
| Call Stack (most recent call first):
|   /home/weihengni/Projects/robotpi/build/BUILD-robotpi-humble-kirkstone/work/cortexa72-robotpi-linux/moveit-setup-framework/2.5.5-1-r0/recipe-sysroot/usr/share/rviz_default_plugins/cmake/rviz_default_plugins-extras.cmake:30 (find_package)
|   /home/weihengni/Projects/robotpi/build/BUILD-robotpi-humble-kirkstone/work/cortexa72-robotpi-linux/moveit-setup-framework/2.5.5-1-r0/recipe-sysroot/usr/share/rviz_default_plugins/cmake/rviz_default_pluginsConfig.cmake:41 (include)
|   /home/weihengni/Projects/robotpi/build/BUILD-robotpi-humble-kirkstone/work/cortexa72-robotpi-linux/moveit-setup-framework/2.5.5-1-r0/recipe-sysroot/usr/share/moveit_ros_visualization/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)
|   /home/weihengni/Projects/robotpi/build/BUILD-robotpi-humble-kirkstone/work/cortexa72-robotpi-linux/moveit-setup-framework/2.5.5-1-r0/recipe-sysroot/usr/share/moveit_ros_visualization/cmake/moveit_ros_visualizationConfig.cmake:41 (include)
|   CMakeLists.txt:13 (find_package)
| 
| 
| CMake Warning at /home/weihengni/Projects/robotpi/build/BUILD-robotpi-humble-kirkstone/work/cortexa72-robotpi-linux/moveit-setup-framework/2.5.5-1-r0/recipe-sysroot/usr/lib/cmake/Qt5Core/Qt5CoreConfig.cmake:6 (message):
|   SkippingbecauseOE_QMAKE_PATH_EXTERNAL_HOST_BINSisnotdefined
| Call Stack (most recent call first):
|   CMakeLists.txt:14 (find_package)
| 
| 
| CMake Warning at /home/weihengni/Projects/robotpi/build/BUILD-robotpi-humble-kirkstone/work/cortexa72-robotpi-linux/moveit-setup-framework/2.5.5-1-r0/recipe-sysroot/usr/lib/cmake/Qt5Widgets/Qt5WidgetsConfig.cmake:6 (message):
|   SkippingbecauseOE_QMAKE_PATH_EXTERNAL_HOST_BINSisnotdefined
| Call Stack (most recent call first):
|   CMakeLists.txt:15 (find_package)
| 
| 
| CMake Error at CMakeLists.txt:25 (qt5_wrap_cpp):
|   Unknown CMake command "qt5_wrap_cpp".
| 
| 
| -- Configuring incomplete, errors occurred!
| See also "/home/weihengni/Projects/robotpi/build/BUILD-robotpi-humble-kirkstone/work/cortexa72-robotpi-linux/moveit-setup-framework/2.5.5-1-r0/build/CMakeFiles/CMakeOutput.log".
| WARNING: exit code 1 from a shell command.
ERROR: Task (/home/weihengni/Projects/robotpi/build/../layers/meta-ros/meta-ros2-humble/generated-recipes/moveit/moveit-setup-framework_2.5.5-1.bb:do_configure) failed with exit code '1'

@whni
Copy link

whni commented May 27, 2024

For the moveit-setup-framework issue,

I can resolved by adding these:

ROS_BUILDTOOL_DEPENDS += " \
    rosidl-cmake-native \
"

EXTRA_OECMAKE += "-DOE_QMAKE_PATH_EXTERNAL_HOST_BINS='${OE_QMAKE_PATH_EXTERNAL_HOST_BINS}'"

inherit qmake5

However, inherit qmake5 has to be placed before inherit ros_${ROS_BUILD_TYPE} in the original recipe. Otherwise it will throw an error like

| ls: cannot access '/home/weihengni/Projects/robotpi/build/BUILD-robotpi-humble-kirkstone/work/cortexa72-robotpi-linux/moveit-setup-framework/2.5.5-1-r0/git/*.pro': No such file or directory

@robwoolley do you know how to let inherit qmake5 take effect in the bbappend file before inherit ros_${ROS_BUILD_TYPE} in the original recipe? Otherwise, we may need you to directly patch the original recipe. Thank you so much!

@whni
Copy link

whni commented May 27, 2024

I also see some build error about moveit-setup-srdf-plugins. You could try to build moveit package then can find all the errors

|   Could not find a package configuration file provided by "ament_cmake_ros"
|   with any of the following names:
| 
|     ament_cmake_rosConfig.cmake
|     ament_cmake_ros-config.cmake

Update:
these recipes all have the similar issues:
1. moveit-setup-app-plugins_2.5.5-1.bb
2. moveit-setup-assistant_2.5.5-1.bb
3. moveit-setup-controllers_2.5.5-1.bb
4. moveit-setup-core-plugins_2.5.5-1.bb
5. moveit-setup-framework_2.5.5-1.bb
6. moveit-setup-srdf-plugins_2.5.5-1.bb

All need the above patch:

EXTRA_OECMAKE += "-DOE_QMAKE_PATH_EXTERNAL_HOST_BINS='${OE_QMAKE_PATH_EXTERNAL_HOST_BINS}'"

inherit qmake5

and add some missing ROS_BUILDTOOL_DEPENDS

@whni
Copy link

whni commented Jul 11, 2024

Hi @robwoolley will these fix been merged to kirkstone?

@robwoolley
Copy link
Collaborator Author

Hi @whni, yes I plan to merge the fixes to kirkstone after the work has been completed for rolling. That work is nearly complete, you can check out the notes from the working group meeting for details: https://docs.google.com/document/d/1LqUjcu6vdlqVJO62SreCyjzddNDZhfO2n-7qYghY_cQ/edit#heading=h.3vrwbu9vio04

@whni
Copy link

whni commented Jul 24, 2024

Checking in this topic? Any update?

@whni
Copy link

whni commented Jul 30, 2024

@robwoolley Please let us know whenever this is merged. Thank you!

@whni
Copy link

whni commented Aug 12, 2024

Hi @robwoolley could we know if this pull request will be merged soon? We need to decided if we can stick on humble. Thank you so much!

@whni
Copy link

whni commented Aug 22, 2024

Looks like no one is looking at this pull request now? @robwoolley

@robwoolley
Copy link
Collaborator Author

Hi @whni,

I think this PR still needs work before it can be merged. I haven't tried running anything on the hardware yet. My focus has been on the Rolling and Styhead combo first since it is expected to be "unstable" then will backport any work to the "stable" Humble and Kirkstone combination.

I have been short on free time over the summer to make progress, but we have been making headway on getting CI/CD builds going for regression testing of all combinations. (Check out the working group minutes for the latest status: https://docs.google.com/document/d/1LqUjcu6vdlqVJO62SreCyjzddNDZhfO2n-7qYghY_cQ/edit)

Have you been able to get graphics up and running on the Raspberry Pi hardware? It would be a huge help to know that the existing recipes were working on the hardware.

Regards,
Rob

@whni
Copy link

whni commented Aug 23, 2024

Hi @robwoolley

We didn't test all graphics components but just need those to be compiled successfully. On RPi 4, we are building our own image that includes ros-image-world. At least turtlebot bringup/cartographer are running good and rviz window is working

@whni
Copy link

whni commented Sep 18, 2024

@robwoolley Hi, we are still waiting for this pull request on humble. Could we expect this to happen soon?

@robwoolley
Copy link
Collaborator Author

Note to self: Refer to this thread for ogre and rviz_rendering fixes for Humble: #1144 (comment)

@graceagrace
Copy link

Has anyone gotten Gazebo classic to run successfully on Humble? I have no problem building Gazebo and all deps using the recipe here, but I get the errors mentioned in this discussion with the shaders at runtime. It seems Gazebo classic was never made compatible with Ogre 1.12.

@robwoolley
Copy link
Collaborator Author

@graceagrace I haven't tried doing Gazebo Classic yet. I finished building Gazebo for Jazzy and Rolling: https://github.com/ros/meta-ros/tree/master-next

I am working on Humble now, however I will need to revisit the patches above. I'll keep you posted.

@robwoolley
Copy link
Collaborator Author

@graceagrace I have pushed my latest commits to build the perception and simulation variants for ROS 2 Humble and Yocto master branch to master-next: https://github.com/ros/meta-ros/tree/master-next I am still working on desktop and desktop-full for Humble.

The changes just add Ignition Fortress. I haven't tried Gazebo Classic yet, but I'm up for adding it. Out of curiosity, what is the use case for adding Gazebo Classic now that it is end-of-life? Is there anything we should be testing for to make sure it works?

Please let me know if there are any errors or omissions I have made in the patch sequence. I made sure to give you credit on the ogre fixes I merged from you. I tried to backport upstream fixes where I could. If there are any additional fixes I missed please point them out.

Thanks so much for your help with this. It is exciting to be close to having all the visualization and simulation tools working!

@graceagrace
Copy link

graceagrace commented Feb 14, 2025

@robwoolley, many thanks for your effort on this! I'll find some time to test your branch in the next few days to double-check rviz builds and runs as expected, in particular.

The main use case for supporting running Gazebo Classic with ROS2 Humble is gazebo_ros2_control. With Gazebo Classic going EOL this January, this package isn't released to any ROS distro past Humble, but it is a very useful tool that we have recipes for in meta-ros. I am able to build the gazebo11 recipe on your branch in this PR without trouble, but I get the runtime errors mentioned above due to Gazebo Classic being incompatible with Ogre 1.12.12 (an issue admitted to by the maintainers, but never resolved - it seems the latest gazebo Debian packages are built against Ogre 1.9).

The annoyance here is that rviz requires Ogre 1.12.12, and maybe other viz packages (not sure). I spent a bit of time making a separate Ogre 1.9 recipe specifically for the purpose of building Gazebo Classic against it - I ran into a bunch of build annoyances with the newer, more aggressive compiler on scarthgap, but was eventually able to build the gazebo11 recipe on this branch. I started running into issues with the gazebo-ros recipes that have gazebo11 due to the outdated version of Ogre, though, and paused my effort there.

I see you had a patch for gazebo11 started that seems like it aimed to resolve some of the issues with the rendering system in the new version of Ogre, but I wasn't able to get the gazebo11 recipe building with that patch. My preference would be to get gazebo11 working with Ogre 1.12.12, but I wonder if the quickest path forward is to continue working with an Ogre 1.9 build and getting all the Gazebo recipes to build.

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

Successfully merging this pull request may close these issues.

3 participants