I’d like to share the third major milestone in my ongoing work to run ROS 2 natively on macOS Apple Silicon.
At this point, TurtleBot4 is fully functional on ROS 2 Kilted, tested end-to-end with the complete mobile robotics stack:
-
Gazebo Ionic
-
slam_toolbox
-
Navigation2
-
ros2_control (gz_ros2_control)
This setup validates the full mobile robotics pipeline on macOS: simulation, control, SLAM, and autonomous navigation.
What is working reliably
-
SLAM + Navigation2 running stably on Apple Silicon
-
gz_ros2_control integrated and functioning correctly with TurtleBot4
-
Clean integration with ROS 2 Kilted (much closer to upstream than Humble)
-
No runtime hacks, manual relinking, or environment-variable workarounds
After successfully validating Gazebo, MoveIt 2, ros2_control, and now Navigation2, I’ve published the Kilted branchpublicly:
ROS 2 macOS (Kilted):
https://github.com/idesign0/ros2_macOS/tree/kilted
To make TurtleBot4 work correctly with Gazebo Ionic + ROS 2 Kilted, some targeted changes were required compared to the current official simulator instructions.
Those changes are now packaged and ready to test here:
TurtleBot4 (Gazebo Ionic + Kilted, macOS):
https://github.com/idesign0/ROS2_Humble/tree/kilted-mac/turtlebot4
Reference documentation (for comparison):
https://turtlebot.github.io/turtlebot4-user-manual/software/turtlebot4_simulator.html
Toolchain improvements (Kilted, macOS)
One of the biggest improvements over my earlier Humble-on-macOS setup is the maturity of the Kilted toolchain, particularly around RPATH handling and merged installs.
The updated toolchain provides:
-
Proper RPATH configuration for merged installs
-
Reliable runtime library resolution using
@loader_path -
Clean handling of external dependencies (e.g., Boost)
-
No reliance on
DYLD_LIBRARY_PATHor manual relinking
As a result, I’ve seen no dynamic library loading issues at runtime, even when launching large stacks like Navigation2and MoveIt 2.
Startup behavior is noticeably smoother, lifecycle transitions are clean, and systems come up consistently—issues that were common for me on macOS Humble.
At this point, the toolchain feels mature enough to support Gazebo, MoveIt 2, ros2_control, and Nav2 under a single, consistent build setup.
Toolchain reference:
https://github.com/idesign0/ros2_macOS/blob/kilted/cmake/toolchain.cmake
Demo video
A short demo of TurtleBot4 running SLAM and Navigation2 on macOS Apple Silicon (Gazebo Ionic + ROS 2 Kilted) is available here:
https://www.linkedin.com/posts/classy29_ros2-ros-navigation2-activity-7409757575837036544-vJtq
This feels like the point where ROS 2 on macOS Apple Silicon moves from experimental to genuinely usable for larger systems.
If you are running ROS 2 on Apple Silicon, feedback and testing are very welcome.
I’ll also be adding Kilted-specific setup and usage instructions to the README soon.
More demos and upstream-related work to follow.