Add ROS 2 Jazzy and Rolling support with Dockerfiles and repository configurations

- Created ros_jazzy.repos for ROS 2 Jazzy with necessary repositories.
- Added ros_rolling.Dockerfile for building ROS 2 Rolling with a multi-stage build process.
- Introduced ros_rolling.repos for ROS 2 Rolling with updated repository versions.
- Updated CMakeLists.txt in ceres_vendor to use version 2.1.0 and modified build options.
- Adjusted package.xml in ceres_vendor to comment out unnecessary dependencies.
- Created vendor_packages.Dockerfile to build various vendor packages including Ceres, OpenCV, and PCL with optimizations for cross-compilation.
This commit is contained in:
EricX-Zhao
2026-04-20 18:04:41 +03:00
parent 514803969d
commit ec215fc2ab
11 changed files with 572 additions and 18 deletions
+10 -1
View File
@@ -1,5 +1,14 @@
# Build Cross Compiled Develop Image
```bash
PLATFORM=rk3588 docker compose build
docker compose build cc-base
PLATFORM=rk3588 docker compose build cc-toolchain
PLATFORM=rk3588 docker compose build vendor-packages
PLATFORM=rk3588 ROS_DISTRO=rolling docker compose build ros2
# debug
DOCKER_BUILDKIT=0 PLATFORM=rk3588 ROS_DISTRO=jazzy docker compose build ros2
```
+4 -4
View File
@@ -5,14 +5,14 @@ services:
cc-base:
build:
context: .
dockerfile: Dockerfile.cc_base
dockerfile: cc_base.Dockerfile
image: cc-base:latest
# 第二步:编译针对 RK3588 的镜像
cc-toolchain:
build:
context: . # 上下文设为根目录,这样才能同时访问 rk3588 文件夹
dockerfile: ${PLATFORM}/Dockerfile.cc_${PLATFORM}
dockerfile: ${PLATFORM}/cc_${PLATFORM}.Dockerfile
image: ${PLATFORM}/cc-toolchain:latest
depends_on:
- cc-base
@@ -21,7 +21,7 @@ services:
vendor-packages:
build:
context: .
dockerfile: vendor_packages/Dockerfile.vendor_packages
dockerfile: vendor_packages/vendor_packages.Dockerfile
args:
CC_PLATFORM_IMAGE: ${PLATFORM}/cc-toolchain:latest
image: ${PLATFORM}/cc-vendor-packages:latest
@@ -31,7 +31,7 @@ services:
ros2:
build:
context: .
dockerfile: ros2/Dockerfile.ros_${ROS_DISTRO}
dockerfile: ros2/${ROS_DISTRO}/ros_${ROS_DISTRO}.Dockerfile
args:
ROS_DISTRO: ${ROS_DISTRO}
PLATFORM: ${PLATFORM}
@@ -0,0 +1,95 @@
ARG CC_PLATFORM_IMAGE
ARG VENDOR_PACKAGES_IMAGE
FROM ${CC_PLATFORM_IMAGE} AS ros_src
ARG ROS_DISTRO
WORKDIR /workspace
RUN mkdir -p /workspace/src
COPY ros2/${ROS_DISTRO}/ros_${ROS_DISTRO}.repos .
RUN vcs import --shallow --workers 4 --input ros_${ROS_DISTRO}.repos src
RUN echo "Build ros ${ROS_DISTRO}"
FROM ${VENDOR_PACKAGES_IMAGE} AS vendor_images
FROM ${CC_PLATFORM_IMAGE} AS ros_builder
WORKDIR /workspace
COPY --from=ros_src /workspace /workspace
COPY --from=vendor_images ${TARGET_SYSROOT} ${TARGET_SYSROOT}
COPY ros2/ros_cpp /workspace/src/ros_cpp
RUN touch src/ros2/geometry2/tf2_bullet/COLCON_IGNORE \
&& touch src/ros2/rosbag2/rosbag2_storage_sqlite3/COLCON_IGNORE \
&& touch src/ros-perception/image_transport_plugins/theora_image_transport/COLCON_IGNORE \
&& touch src/ros2/orocos_kdl_vendor/python_orocos_kdl_vendor/COLCON_IGNORE
RUN MAKEFLAGS="-j6" colcon build \
--executor parallel \
--parallel-workers 6 \
--install-base ${TARGET_SYSROOT} \
--merge-install \
--packages-up-to ros_cpp \
--cmake-force-configure \
--cmake-args \
--no-warn-unused-cli \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_TOOLCHAIN_FILE=${CC_TOOLCHAIN_FILE} \
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
-DBUILD_TESTING=OFF \
-DTRACETOOLS_DISABLED=ON \
-DCV_BRIDGE_DISABLE_PYTHON=ON
# pybind11 python soabi issue
WORKDIR ${TARGET_SYSROOT}/lib/python3.10/site-packages/rclpy
RUN mv _rclpy_pybind11.cpython-310-x86_64-linux-gnu.so _rclpy_pybind11.cpython-310-aarch64-linux-gnu.so
WORKDIR ${TARGET_SYSROOT}/lib/python3.10/site-packages/rosbag2_py
RUN mv _transport.cpython-310-x86_64-linux-gnu.so _transport.cpython-310-aarch64-linux-gnu.so
RUN mv _info.cpython-310-x86_64-linux-gnu.so _info.cpython-310-aarch64-linux-gnu.so
RUN mv _compression_options.cpython-310-x86_64-linux-gnu.so _compression_options.cpython-310-aarch64-linux-gnu.so
RUN mv _storage.cpython-310-x86_64-linux-gnu.so _storage.cpython-310-aarch64-linux-gnu.so
RUN mv _reindexer.cpython-310-x86_64-linux-gnu.so _reindexer.cpython-310-aarch64-linux-gnu.so
RUN mv _writer.cpython-310-x86_64-linux-gnu.so _writer.cpython-310-aarch64-linux-gnu.so
RUN mv _message_definitions.cpython-310-x86_64-linux-gnu.so _message_definitions.cpython-310-aarch64-linux-gnu.so
RUN mv _reader.cpython-310-x86_64-linux-gnu.so _reader.cpython-310-aarch64-linux-gnu.so
FROM ${CC_PLATFORM_IMAGE} AS rmw_zenoh_builder
COPY --from=ros_builder ${TARGET_SYSROOT} ${TARGET_SYSROOT}
# rust install
RUN curl https://sh.rustup.rs -sSf | sh -s -- -y
RUN . "$HOME/.cargo/env" \
&& rustup install 1.75.0 \
&& rustup default 1.75.0 \
&& rustup target add aarch64-unknown-linux-gnu
RUN mkdir rmw_zenoh_ws/src -p \
&& cd rmw_zenoh_ws/src \
&& git clone --depth=1 -b jazzy https://github.com/ros2/rmw_zenoh.git
ENV CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-none-linux-gnu-gcc
RUN . "$HOME/.cargo/env" \
&& . ${TARGET_SYSROOT}/local_setup.sh \
&& colcon build \
--install-base ${TARGET_SYSROOT} \
--merge-install \
--packages-up-to rmw_zenoh_cpp \
--cmake-force-configure \
--cmake-args \
--no-warn-unused-cli \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_TOOLCHAIN_FILE=${CC_TOOLCHAIN_FILE} \
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
-DBUILD_TESTING=OFF \
-DZENOHC_CUSTOM_TARGET=aarch64-unknown-linux-gnu
RUN cp -rf ${TARGET_SYSROOT}/opt/zenoh_cpp_vendor/include ${TARGET_SYSROOT}
RUN cp -rf ${TARGET_SYSROOT}/opt/zenoh_cpp_vendor/lib ${TARGET_SYSROOT}
RUN rm -rf ${TARGET_SYSROOT}/opt
FROM ${CC_PLATFORM_IMAGE} AS final
COPY --from=rmw_zenoh_builder ${TARGET_SYSROOT} ${TARGET_SYSROOT}
+449
View File
@@ -0,0 +1,449 @@
repositories:
ament/ament_cmake:
type: git
url: https://github.com/ament/ament_cmake.git
version: jazzy
ament/ament_index:
type: git
url: https://github.com/ament/ament_index.git
version: jazzy
ament/ament_lint:
type: git
url: https://github.com/ament/ament_lint.git
version: jazzy
ament/ament_package:
type: git
url: https://github.com/ament/ament_package.git
version: jazzy
ament/google_benchmark_vendor:
type: git
url: https://github.com/ament/google_benchmark_vendor.git
version: jazzy
ament/googletest:
type: git
url: https://github.com/ament/googletest.git
version: jazzy
diagnostics:
type: git
url: https://github.com/ros/diagnostics.git
version: ros2-jazzy
eProsima/Fast-CDR:
type: git
url: https://github.com/eProsima/Fast-CDR.git
version: 2.2.x
eProsima/Fast-DDS:
type: git
url: https://github.com/eProsima/Fast-DDS.git
version: 2.14.x
eProsima/foonathan_memory_vendor:
type: git
url: https://github.com/eProsima/foonathan_memory_vendor.git
version: master
ffmpeg_image_transport_msgs:
type: git
url: https://github.com/ros-misc-utilities/ffmpeg_image_transport_msgs.git
version: rolling
ros-perception/image_transport_plugins:
type: git
url: https://github.com/ros-perception/image_transport_plugins.git
version: jazzy
osrf/osrf_pycommon:
type: git
url: https://github.com/osrf/osrf_pycommon.git
version: master
osrf/osrf_testing_tools_cpp:
type: git
url: https://github.com/osrf/osrf_testing_tools_cpp.git
version: jazzy
ros-perception/pcl_msgs:
type: git
url: https://github.com/ros-perception/pcl_msgs.git
version: ros2
ros-perception/image_common:
type: git
url: https://github.com/ros-perception/image_common.git
version: jazzy
ros-perception/laser_geometry:
type: git
url: https://github.com/ros-perception/laser_geometry.git
version: jazzy
ros-perception/perception_pcl:
type: git
url: https://github.com/ros-perception/perception_pcl.git
version: jazzy
ros-perception/point_cloud_transport:
type: git
url: https://github.com/ros-perception/point_cloud_transport.git
version: jazzy
ros-planning/navigation_msgs:
type: git
url: https://github.com/ros-planning/navigation_msgs.git
version: jazzy
ros-tooling/keyboard_handler:
type: git
url: https://github.com/ros-tooling/keyboard_handler.git
version: jazzy
ros-tooling/libstatistics_collector:
type: git
url: https://github.com/ros-tooling/libstatistics_collector.git
version: jazzy
ros-visualization/interactive_markers:
type: git
url: https://github.com/ros-visualization/interactive_markers.git
version: jazzy
ros-visualization/python_qt_binding:
type: git
url: https://github.com/ros-visualization/python_qt_binding.git
version: jazzy
ros-visualization/qt_gui_core:
type: git
url: https://github.com/ros-visualization/qt_gui_core.git
version: jazzy
ros-visualization/rqt:
type: git
url: https://github.com/ros-visualization/rqt.git
version: jazzy
ros-visualization/rqt_action:
type: git
url: https://github.com/ros-visualization/rqt_action.git
version: jazzy
ros-visualization/rqt_bag:
type: git
url: https://github.com/ros-visualization/rqt_bag.git
version: jazzy
ros-visualization/rqt_console:
type: git
url: https://github.com/ros-visualization/rqt_console.git
version: jazzy
ros-visualization/rqt_graph:
type: git
url: https://github.com/ros-visualization/rqt_graph.git
version: jazzy
ros-visualization/rqt_msg:
type: git
url: https://github.com/ros-visualization/rqt_msg.git
version: jazzy
ros-visualization/rqt_plot:
type: git
url: https://github.com/ros-visualization/rqt_plot.git
version: jazzy
ros-visualization/rqt_publisher:
type: git
url: https://github.com/ros-visualization/rqt_publisher.git
version: jazzy
ros-visualization/rqt_py_console:
type: git
url: https://github.com/ros-visualization/rqt_py_console.git
version: jazzy
ros-visualization/rqt_reconfigure:
type: git
url: https://github.com/ros-visualization/rqt_reconfigure.git
version: jazzy
ros-visualization/rqt_service_caller:
type: git
url: https://github.com/ros-visualization/rqt_service_caller.git
version: jazzy
ros-visualization/rqt_shell:
type: git
url: https://github.com/ros-visualization/rqt_shell.git
version: jazzy
ros-visualization/rqt_srv:
type: git
url: https://github.com/ros-visualization/rqt_srv.git
version: jazzy
ros-visualization/rqt_topic:
type: git
url: https://github.com/ros-visualization/rqt_topic.git
version: jazzy
ros-visualization/tango_icons_vendor:
type: git
url: https://github.com/ros-visualization/tango_icons_vendor.git
version: jazzy
ros/class_loader:
type: git
url: https://github.com/ros/class_loader.git
version: jazzy
ros/kdl_parser:
type: git
url: https://github.com/ros/kdl_parser.git
version: jazzy
ros/pluginlib:
type: git
url: https://github.com/ros/pluginlib.git
version: jazzy
ros/resource_retriever:
type: git
url: https://github.com/ros/resource_retriever.git
version: jazzy
ros/robot_state_publisher:
type: git
url: https://github.com/ros/robot_state_publisher.git
version: jazzy
ros/ros_environment:
type: git
url: https://github.com/ros/ros_environment.git
version: jazzy
ros/ros_tutorials:
type: git
url: https://github.com/ros/ros_tutorials.git
version: jazzy
ros/urdfdom:
type: git
url: https://github.com/ros/urdfdom.git
version: jazzy
ros/urdfdom_headers:
type: git
url: https://github.com/ros/urdfdom_headers.git
version: jazzy
ros/eigen_stl_containers:
type: git
url: https://github.com/ros/eigen_stl_containers.git
version: ros2
ros/angles:
type: git
url: https://github.com/ros/angles.git
version: ros2
ros-geographic-info:
type: git
url: https://github.com/ros-geographic-info/geographic_info.git
version: ros2
ros2/ament_cmake_ros:
type: git
url: https://github.com/ros2/ament_cmake_ros.git
version: jazzy
ros2/common_interfaces:
type: git
url: https://github.com/ros2/common_interfaces.git
version: jazzy
ros2/console_bridge_vendor:
type: git
url: https://github.com/ros2/console_bridge_vendor.git
version: jazzy
ros2/demos:
type: git
url: https://github.com/ros2/demos.git
version: jazzy
ros2/eigen3_cmake_module:
type: git
url: https://github.com/ros2/eigen3_cmake_module.git
version: jazzy
ros2/example_interfaces:
type: git
url: https://github.com/ros2/example_interfaces.git
version: jazzy
ros2/examples:
type: git
url: https://github.com/ros2/examples.git
version: jazzy
ros2/geometry2:
type: git
url: https://github.com/ros2/geometry2.git
version: jazzy
ros2/launch:
type: git
url: https://github.com/ros2/launch.git
version: jazzy
ros2/launch_ros:
type: git
url: https://github.com/ros2/launch_ros.git
version: jazzy
ros2/message_filters:
type: git
url: https://github.com/ros2/message_filters.git
version: jazzy
ros2/performance_test_fixture:
type: git
url: https://github.com/ros2/performance_test_fixture.git
version: jazzy
ros2/python_cmake_module:
type: git
url: https://github.com/ros2/python_cmake_module.git
version: jazzy
ros2/rcl:
type: git
url: https://github.com/ros2/rcl.git
version: jazzy
ros2/rcl_interfaces:
type: git
url: https://github.com/ros2/rcl_interfaces.git
version: jazzy
ros2/rcl_logging:
type: git
url: https://github.com/ros2/rcl_logging.git
version: jazzy
ros2/rclcpp:
type: git
url: https://github.com/ros2/rclcpp.git
version: jazzy
ros2/rclpy:
type: git
url: https://github.com/ros2/rclpy.git
version: jazzy
ros2/rcpputils:
type: git
url: https://github.com/ros2/rcpputils.git
version: jazzy
ros2/rcutils:
type: git
url: https://github.com/ros2/rcutils.git
version: jazzy
ros2/realtime_support:
type: git
url: https://github.com/ros2/realtime_support.git
version: jazzy
ros2/rmw:
type: git
url: https://github.com/ros2/rmw.git
version: jazzy
ros2/rmw_connextdds:
type: git
url: https://github.com/ros2/rmw_connextdds.git
version: jazzy
ros2/rmw_cyclonedds:
type: git
url: https://github.com/ros2/rmw_cyclonedds.git
version: jazzy
ros2/rmw_dds_common:
type: git
url: https://github.com/ros2/rmw_dds_common.git
version: jazzy
ros2/rmw_fastrtps:
type: git
url: https://github.com/ros2/rmw_fastrtps.git
version: jazzy
ros2/rmw_implementation:
type: git
url: https://github.com/ros2/rmw_implementation.git
version: jazzy
ros2/ros2_tracing:
type: git
url: https://github.com/ros2/ros2_tracing.git
version: jazzy
ros2/ros2cli:
type: git
url: https://github.com/ros2/ros2cli.git
version: jazzy
ros2/ros2cli_common_extensions:
type: git
url: https://github.com/ros2/ros2cli_common_extensions.git
version: jazzy
ros2/ros_testing:
type: git
url: https://github.com/ros2/ros_testing.git
version: jazzy
ros2/rosbag2:
type: git
url: https://github.com/ros2/rosbag2.git
version: jazzy
ros2/rosidl:
type: git
url: https://github.com/ros2/rosidl.git
version: jazzy
ros2/rosidl_core:
type: git
url: https://github.com/ros2/rosidl_core.git
version: jazzy
ros2/rosidl_dds:
type: git
url: https://github.com/ros2/rosidl_dds.git
version: jazzy
ros2/rosidl_defaults:
type: git
url: https://github.com/ros2/rosidl_defaults.git
version: jazzy
ros2/rosidl_dynamic_typesupport:
type: git
url: https://github.com/ros2/rosidl_dynamic_typesupport.git
version: jazzy
ros2/rosidl_dynamic_typesupport_fastrtps:
type: git
url: https://github.com/ros2/rosidl_dynamic_typesupport_fastrtps.git
version: jazzy
ros2/rosidl_python:
type: git
url: https://github.com/ros2/rosidl_python.git
version: jazzy
ros2/rosidl_runtime_py:
type: git
url: https://github.com/ros2/rosidl_runtime_py.git
version: jazzy
ros2/rosidl_typesupport:
type: git
url: https://github.com/ros2/rosidl_typesupport.git
version: jazzy
ros2/rosidl_typesupport_fastrtps:
type: git
url: https://github.com/ros2/rosidl_typesupport_fastrtps.git
version: jazzy
ros2/rpyutils:
type: git
url: https://github.com/ros2/rpyutils.git
version: jazzy
ros2/rviz:
type: git
url: https://github.com/ros2/rviz.git
version: jazzy
ros2/sros2:
type: git
url: https://github.com/ros2/sros2.git
version: jazzy
ros2/system_tests:
type: git
url: https://github.com/ros2/system_tests.git
version: jazzy
ros2/test_interface_files:
type: git
url: https://github.com/ros2/test_interface_files.git
version: jazzy
ros2/tlsf:
type: git
url: https://github.com/ros2/tlsf.git
version: jazzy
ros2/unique_identifier_msgs:
type: git
url: https://github.com/ros2/unique_identifier_msgs.git
version: jazzy
ros2/urdf:
type: git
url: https://github.com/ros2/urdf.git
version: jazzy
variants:
type: git
url: https://github.com/ros2/variants.git
version: jazzy
vision_msgs:
type: git
url: https://github.com/ros-perception/vision_msgs.git
version: ros2
vision_opencv:
type: git
url: https://github.com/ros-perception/vision_opencv.git
version: rolling
ros2/console_bridge_vendor:
type: git
url: https://github.com/ros2/console_bridge_vendor.git
version: rolling
ros2/libyaml_vendor:
type: git
url: https://github.com/ros2/libyaml_vendor.git
version: rolling
ros2/spdlog_vendor:
type: git
url: https://github.com/ros2/spdlog_vendor.git
version: rolling
ros2/yaml_cpp_vendor:
type: git
url: https://github.com/ros2/yaml_cpp_vendor.git
version: rolling
ros2/tinyxml2_vendor:
type: git
url: https://github.com/ros2/tinyxml2_vendor.git
version: jazzy
ros2/orocos_kdl_vendor:
type: git
url: https://github.com/ros2/orocos_kdl_vendor.git
version: jazzy
ros2/pybind11_vendor:
type: git
url: https://github.com/ros2/pybind11_vendor.git
version: jazzy
@@ -66,7 +66,7 @@ RUN . "$HOME/.cargo/env" \
RUN mkdir rmw_zenoh_ws/src -p \
&& cd rmw_zenoh_ws/src \
&& git clone -b rolling https://github.com/ros2/rmw_zenoh.git
&& git clone --depth=1 -b rolling https://github.com/ros2/rmw_zenoh.git
ENV CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-none-linux-gnu-gcc
@@ -430,4 +430,4 @@ repositories:
ros2/yaml_cpp_vendor:
type: git
url: https://github.com/ros2/yaml_cpp_vendor.git
version: rolling
version: rolling
@@ -14,16 +14,17 @@ endif()
include(FetchContent)
FetchContent_Declare(
ceres_vendor
GIT_REPOSITORY https://github.com/EricX-Zhao/ceres-solver.git
GIT_TAG suitesparse # 锁定 2.0.0 标签
GIT_SHALLOW TRUE
URL https://github.com/ceres-solver/ceres-solver/archive/refs/tags/2.1.0.tar.gz
# SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/ext/
)
# set(SUITESPARSE OFF CACHE BOOL "" FORCE)
set(BUILD_SHARED_LIBS ON CACHE BOOL "" FORCE)
set(MINIGLOG ON CACHE BOOL "Use a stripped down version of glog." FORCE)
set(GFLAGS OFF CACHE BOOL "Enable Google Flags." FORCE)
set(BUILD_SHARED_LIBS ON CACHE BOOL "Build Shared Library" FORCE)
set(BUILD_EXAMPLES OFF CACHE BOOL "BUILD_EXAMPLES" FORCE)
set(BUILD_TESTING OFF CACHE BOOL "BUILD_TESTING" FORCE)
set(BUILD_BENCHMARKS OFF CACHE BOOL "BUILD_BENCHMARKS" FORCE)
set(CMAKE_BUILD_TYPE Release)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DMAX_LOG_LEVEL=-1")
FetchContent_MakeAvailable(ceres_vendor)
@@ -8,8 +8,8 @@
<license>TODO: License declaration</license>
<depend>eigen3_vendor</depend>
<depend>glog_vendor</depend>
<depend>suitesparse_vendor</depend>
<!-- <depend>glog_vendor</depend> -->
<!-- <depend>suitesparse_vendor</depend> -->
<export>
<build_type>cmake</build_type>
@@ -20,10 +20,10 @@ RUN cd workspace \
FROM ${CC_PLATFORM_IMAGE} AS ceres_vendor
COPY vendor_packages/eigen3_vendor workspace/src/eigen3_vendor
COPY vendor_packages/gflags_vendor workspace/src/gflags_vendor
COPY vendor_packages/glog_vendor workspace/src/glog_vendor
COPY vendor_packages/openblas_vendor workspace/src/openblas_vendor
COPY vendor_packages/suitesparse_vendor workspace/src/suitesparse_vendor
# COPY vendor_packages/gflags_vendor workspace/src/gflags_vendor
# COPY vendor_packages/glog_vendor workspace/src/glog_vendor
# COPY vendor_packages/openblas_vendor workspace/src/openblas_vendor
# COPY vendor_packages/suitesparse_vendor workspace/src/suitesparse_vendor
COPY vendor_packages/ceres_vendor workspace/src/ceres_vendor
RUN cd workspace \