From 06e734ee9837549853eb559daf267ad7628e27a7 Mon Sep 17 00:00:00 2001 From: openhands Date: Sat, 15 Aug 2026 18:02:10 +0000 Subject: [PATCH 1/4] Unify CMake patterns and add cheatsheet - Update submodule pointers to include: - Docker/Compose standardization (COPY instead of volume mounts) - Script install unification (install(DIRECTORY scripts/)) - Add cheatsheet.md documenting all CMake block patterns used across SAS --- cheatsheet.md | 469 +++++++++++++++++++++++++++++++ src/sas_common | 2 +- src/sas_conversions | 2 +- src/sas_core | 2 +- src/sas_datalogger | 2 +- src/sas_force_sensor | 2 +- src/sas_force_sensor_bota | 2 +- src/sas_kuka_control_template | 2 +- src/sas_robot_driver | 2 +- src/sas_robot_driver_coppeliasim | 2 +- src/sas_robot_driver_gazebo | 2 +- src/sas_robot_driver_kuka | 2 +- src/sas_robot_driver_ur | 2 +- src/sas_robot_kinematics | 2 +- src/sas_ur_control_template | 2 +- 15 files changed, 483 insertions(+), 14 deletions(-) create mode 100644 cheatsheet.md diff --git a/cheatsheet.md b/cheatsheet.md new file mode 100644 index 0000000..0ca59bd --- /dev/null +++ b/cheatsheet.md @@ -0,0 +1,469 @@ +# SAS CMake Cheatsheet + +Patterns extracted from the SmartArmStack CMakeLists.txt files across all submodules. + +--- + +## Project Setup + +```cmake +cmake_minimum_required(VERSION 3.8) +project() + +if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") + add_compile_options(-Wall -Wextra -Wpedantic) +endif() + +find_package(ament_cmake REQUIRED) +``` + +Use `VERSION 3.11` when embedding pybind11 as a subdirectory. + +--- + +## Shared Library (AmenT-exported) + +The standard pattern for a library that downstream packages consume via `find_package()`. + +```cmake +add_library(${PROJECT_NAME} SHARED + src/file1.cpp + src/file2.cpp +) + +ament_target_dependencies(${PROJECT_NAME} + rclcpp geometry_msgs Eigen3 sas_core +) + +target_include_directories(${PROJECT_NAME} + PUBLIC + $ + $ +) + +ament_export_targets(export_${PROJECT_NAME} HAS_LIBRARY_TARGET) +ament_export_dependencies(rclcpp geometry_msgs Eigen3 sas_core) + +target_link_libraries(${PROJECT_NAME} + -ldqrobotics + Eigen3::Eigen +) + +install(DIRECTORY include/ DESTINATION include) + +install(TARGETS ${PROJECT_NAME} + EXPORT export_${PROJECT_NAME} + LIBRARY DESTINATION lib + RUNTIME DESTINATION bin + INCLUDES DESTINATION include +) +``` + +**Key points** + +- Use `${PROJECT_NAME}` as the library name so consumers can link `${PROJECT_NAME}` directly. +- `PUBLIC` generator expressions on `target_include_directories` let downstream packages pick up headers automatically. +- `ament_export_targets` + `ament_export_dependencies` is what makes the package discoverable to others. +- Link external CMake targets by name (e.g. `Eigen3::Eigen`), external `-l` flags directly (e.g. `-ldqrobotics`). + +--- + +## Static Library (Non-ROS / Pure C++) + +Used in `sas_core` for the library portion that must compile without ament. + +```cmake +find_package(Eigen3 REQUIRED) + +add_library(sas_core_pure STATIC) +target_sources(sas_core_pure PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/../src/sas_clock.cpp + ${CMAKE_CURRENT_LIST_DIR}/../src/sas_core.cpp +) + +set_target_properties(sas_core_pure PROPERTIES + POSITION_INDEPENDENT_CODE ON +) + +target_include_directories(sas_core_pure PUBLIC + $ + $ +) + +target_link_libraries(sas_core_pure PUBLIC -ldqrobotics Eigen3::Eigen) +``` + +Wrap in an `include(cmake/cpplib.cmake)` to factor out the logic from the top-level CMakeLists.txt. + +--- + +## C++ Binary (Node / Example) + +```cmake +add_executable(my_node + src/my_node.cpp +) + +ament_target_dependencies(my_node + rclcpp sas_core sas_common +) + +target_link_libraries(my_node + ${PROJECT_NAME} # link the project's own library + -ldqrobotics + Eigen3::Eigen +) + +target_include_directories(my_node PUBLIC + $ + $ +) + +target_compile_features(my_node PUBLIC c_std_99 cxx_std_17) + +install(TARGETS my_node + DESTINATION lib/${PROJECT_NAME}) +``` + +### Scoped Binary (set/unset pattern) + +When defining multiple binaries without duplicating variable names: + +```cmake +set(RCLCPP_LOCAL_BINARY_NAME my_node) + +add_executable(${RCLCPP_LOCAL_BINARY_NAME} + src/${RCLCPP_LOCAL_BINARY_NAME}.cpp +) + +ament_target_dependencies(${RCLCPP_LOCAL_BINARY_NAME} + rclcpp sas_core +) + +target_link_libraries(${RCLCPP_LOCAL_BINARY_NAME} + ${PROJECT_NAME} +) + +target_include_directories(${RCLCPP_LOCAL_BINARY_NAME} PUBLIC + $ + $ +) + +target_compile_features(${RCLCPP_LOCAL_BINARY_NAME} PUBLIC c_std_99 cxx_std_17) + +install(TARGETS ${RCLCPP_LOCAL_BINARY_NAME} + DESTINATION lib/${PROJECT_NAME}) + +unset(RCLCPP_LOCAL_BINARY_NAME) +``` + +--- + +## Python Library (ament) + +```cmake +ament_python_install_package(${PROJECT_NAME}) +``` + +Installs the Python package directory (`/`) — including `__init__.py` — into the ament Python install path. + +--- + +## pybind11 Embedded Module + +### 1. Import pybind11 + +```cmake +set(PYBIND11_FINDPYTHON ON) +add_subdirectory(pybind11) +``` + +The `pybind11/` directory lives at the repository root alongside CMakeLists.txt. + +### 2. Build the module + +```cmake +pybind11_add_module(_${PROJECT_NAME} SHARED + src/my_python_module.cpp +) + +target_include_directories(_${PROJECT_NAME} + PUBLIC + $ + $ +) + +target_compile_definitions(_${PROJECT_NAME} PRIVATE IS_SAS_PYTHON_BUILD) +target_link_libraries(_${PROJECT_NAME} PRIVATE ${PROJECT_NAME} -ldqrobotics) + +install(TARGETS _${PROJECT_NAME} + DESTINATION "${PYTHON_INSTALL_DIR}/${PROJECT_NAME}" +) +``` + +**Key points** + +- Module name is prefixed with `_` (e.g. `_sas_core`) — the Python `__init__.py` re-exports from this internal module. +- `IS_SAS_PYTHON_BUILD` is a compile definition used across the codebase to guard Python-only vs C++-only code paths. +- If the module needs its own source files (not just a thin wrapper), list them directly in `pybind11_add_module`: + +```cmake +pybind11_add_module(_${PROJECT_NAME} SHARED + src/my_python_module.cpp + src/my_class.cpp +) +``` + +### 3. Alternative: cmake include pattern (sas_core) + +Factor out into `cmake/pythonlib.cmake`: + +```cmake +find_package(Python3 REQUIRED COMPONENTS Development) + +set(PYBIND11_FINDPYTHON ON) +add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/../pybind11 ${CMAKE_CURRENT_BINARY_DIR}/pybind11) + +pybind11_add_module(_sas_core SHARED + ${CMAKE_CURRENT_LIST_DIR}/../src/sas_core_py.cpp + ${CMAKE_CURRENT_LIST_DIR}/../src/sas_robot_driver_py.cpp +) + +target_include_directories(_sas_core PUBLIC + $ + $ +) + +target_compile_definitions(_sas_core PRIVATE IS_SAS_PYTHON_BUILD) +target_link_libraries(_sas_core PRIVATE sas_core_pure -ldqrobotics) + +if(DEFINED _SAS_PYTHON_INSTALL_DIR) + set(_SAS_PY_DEST "${_SAS_PYTHON_INSTALL_DIR}") +else() + set(_SAS_PY_DEST "lib/python3/dist-packages/sas_core") +endif() +install(TARGETS _sas_core DESTINATION "${_SAS_PY_DEST}") +``` + +--- + +## ROS2 Message Definitions + +```cmake +find_package(rosidl_default_generators REQUIRED) + +rosidl_generate_interfaces(${PROJECT_NAME} + "msg/String.msg" + "msg/Float64.msg" + "msg/LogDatum.msg" + DEPENDENCIES + std_msgs geometry_msgs +) + +ament_export_dependencies(rosidl_default_runtime) +``` + +--- + +## Third-Party Subdirectory + +Embed a third-party library via `add_subdirectory()` and link the resulting target: + +```cmake +add_subdirectory(src/kuka) + +target_link_libraries(${PROJECT_NAME} PRIVATE kuka_libs_local_static) +``` + +--- + +## Library with Embedded Source Files (UR Client Library) + +Include source files from an embedded third-party library in your own library target: + +```cmake +add_library(${PROJECT_NAME} SHARED + src/my_driver.cpp + + $ + $ + $ +) + +target_include_directories(${PROJECT_NAME} + PRIVATE + $ + $ +) +``` + +--- + +## Install Blocks + +### Launch files + +```cmake +install(DIRECTORY + launch + DESTINATION share/${PROJECT_NAME}/ +) +``` + +### Python scripts (executable) + +```cmake +install(PROGRAMS + scripts/joint_interface_example.py + scripts/kinematic_control.py + DESTINATION lib/${PROJECT_NAME} +) +``` + +### Scripts directory (with execute permissions) + +```cmake +install(DIRECTORY + scripts/ + FILE_PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ + DESTINATION lib/${PROJECT_NAME} +) +``` + +### Robot config files (YAML) + +```cmake +install(DIRECTORY + robots + DESTINATION share/${PROJECT_NAME}/ +) +``` + +### Calibration files + +```cmake +install(DIRECTORY + calibration + DESTINATION share/${PROJECT_NAME}/ +) +``` + +### Specific resource files + +```cmake +install(FILES + ${CMAKE_CURRENT_SOURCE_DIR}/src/ur/Universal_Robots_Client_Library/resources/external_control.urscript + ${CMAKE_CURRENT_SOURCE_DIR}/src/ur/Universal_Robots_Client_Library/examples/resources/rtde_input_recipe.txt + DESTINATION share/${PROJECT_NAME} +) +``` + +### SDF / vendor directories (Gazebo) + +```cmake +install(DIRECTORY + launch sdf vendor + DESTINATION share/${PROJECT_NAME}/ +) +``` + +### Gazebo plugins + +```cmake +add_subdirectory(src/plugins/absolute_pose_publisher) +install(TARGETS AbsolutePosePublisher + LIBRARY DESTINATION share/${PROJECT_NAME}/plugins) +``` + +### Environment hooks (GZ_SIM_SYSTEM_PLUGIN_PATH) + +```cmake +ament_environment_hooks( + "${CMAKE_CURRENT_SOURCE_DIR}/env-hooks/sas_robot_driver_gazebo.dsv.in" +) +``` + +--- + +## Testing + +```cmake +if(BUILD_TESTING) + find_package(ament_lint_auto REQUIRED) + set(ament_cmake_copyright_FOUND TRUE) + set(ament_cmake_cpplint_FOUND TRUE) + ament_lint_auto_find_test_dependencies() +endif() +``` + +--- + +## Conditional ROS2 Build + +Build the library independently of ament, then add ROS2 integration conditionally: + +```cmake +option(ROS2_BUILD "Enable ROS2/ament build" ON) + +# Always build the core library +include(cmake/cpplib.cmake) +include(cmake/pythonlib.cmake) + +if(ROS2_BUILD) + find_package(ament_cmake REQUIRED) + + # Create an INTERFACE alias so downstream ROS packages can link sas_core + add_library(sas_core INTERFACE) + target_link_libraries(sas_core INTERFACE sas_core_pure) + + ament_export_targets(export_${PROJECT_NAME} HAS_LIBRARY_TARGET) + ament_export_dependencies(Eigen3) + + install(DIRECTORY include/ DESTINATION include) + install(TARGETS sas_core sas_core_pure + EXPORT export_${PROJECT_NAME} + ARCHIVE DESTINATION lib + INCLUDES DESTINATION include + ) + + # Example executables + foreach(_name IN ITEMS example1 example2 example3) + add_executable(${_name} src/examples/${_name}.cpp) + target_link_libraries(${_name} sas_core_pure) + install(TARGETS ${_name} DESTINATION lib/${PROJECT_NAME}) + endforeach() + + ament_package() +endif() +``` + +--- + +## ament_package() + +Always the last line of the top-level CMakeLists.txt: + +```cmake +ament_package() +``` + +--- + +## Quick Reference: Block Patterns + +| Pattern | Use | Source | +|---|---|---| +| **Shared Library** | Reusable code exported to other packages | Most packages | +| **Static Library** | Pure C++ lib compiled without ament | `sas_core` | +| **C++ Binary** | Executable node or example | All packages | +| **Scoped Binary (set/unset)** | Multiple binaries, scoping via variable | `sas_common`, `sas_robot_driver_*` | +| **pybind11 Module** | Python binding of C++ code | `sas_core`, `sas_common`, `sas_datalogger`, `sas_force_sensor`, `sas_robot_driver`, `sas_robot_kinematics` | +| **Python Package** | Install `__init__.py` + Python sources | All packages with Python | +| **ROS2 Messages** | Define custom msg/srv/action types | `sas_msgs` | +| **Launch Install** | Deploy launch files to share dir | All packages with launch | +| **Scripts Install** | Deploy Python scripts to lib dir | Most packages | +| **Resource Files** | Deploy UR scripts, recipes, YAML configs | `sas_robot_driver_ur`, `sas_robot_driver_kuka`, `sas_ur_control_template` | +| **Gazebo Plugin** | Build + install Gazebo simulation plugin | `sas_robot_driver_gazebo` | +| **Third-Party Subdirectory** | Embed and build external code | `sas_robot_driver_kuka` | +| **Conditional Build** | ROS2-optional library | `sas_core` | +| **Interface Alias** | Expose static lib as ament-discoverable target | `sas_core` | \ No newline at end of file diff --git a/src/sas_common b/src/sas_common index f6c2cc0..a757bce 160000 --- a/src/sas_common +++ b/src/sas_common @@ -1 +1 @@ -Subproject commit f6c2cc04e897e5c6b57d2920d8ec7011d3e641ec +Subproject commit a757bcec4a06491d3f86b027931dc133381177b9 diff --git a/src/sas_conversions b/src/sas_conversions index 2ec0e2c..ec9d808 160000 --- a/src/sas_conversions +++ b/src/sas_conversions @@ -1 +1 @@ -Subproject commit 2ec0e2cc1925a27c9531c82ed11b1b03c7f4aa59 +Subproject commit ec9d808e019536c03d97a1888562493e9579c40a diff --git a/src/sas_core b/src/sas_core index 6ae4a70..dea255e 160000 --- a/src/sas_core +++ b/src/sas_core @@ -1 +1 @@ -Subproject commit 6ae4a70cab046b19003580ec0a4f19c2892a21fe +Subproject commit dea255eb73bc9979bf5376a3af427ac0a3b98ed5 diff --git a/src/sas_datalogger b/src/sas_datalogger index b3c7f62..5c84e04 160000 --- a/src/sas_datalogger +++ b/src/sas_datalogger @@ -1 +1 @@ -Subproject commit b3c7f62ca7ab8dfa40837ca4f1b2e60755621a09 +Subproject commit 5c84e04a20de704b7a8668ace48e1bdbb075ee24 diff --git a/src/sas_force_sensor b/src/sas_force_sensor index 0f67c65..4a7ca08 160000 --- a/src/sas_force_sensor +++ b/src/sas_force_sensor @@ -1 +1 @@ -Subproject commit 0f67c65cd4ed282e1e9d04ce2756b923bc76e47a +Subproject commit 4a7ca08d129c49447848801b0c1b952006b8cf9a diff --git a/src/sas_force_sensor_bota b/src/sas_force_sensor_bota index 9d93f1b..84a7384 160000 --- a/src/sas_force_sensor_bota +++ b/src/sas_force_sensor_bota @@ -1 +1 @@ -Subproject commit 9d93f1b84df9e502947b6a1c141d80148a0daaee +Subproject commit 84a7384757d7de4514b74d1b92930518290078e1 diff --git a/src/sas_kuka_control_template b/src/sas_kuka_control_template index f7b5b8c..67cd3b6 160000 --- a/src/sas_kuka_control_template +++ b/src/sas_kuka_control_template @@ -1 +1 @@ -Subproject commit f7b5b8c9d4a166a39ae9615a2e8a845d56d00df9 +Subproject commit 67cd3b63ff67f1251c0bda468b136fc9e6066046 diff --git a/src/sas_robot_driver b/src/sas_robot_driver index 5add8a5..950aede 160000 --- a/src/sas_robot_driver +++ b/src/sas_robot_driver @@ -1 +1 @@ -Subproject commit 5add8a5988468dbcf0aa2aef7c99ff54bbfe8531 +Subproject commit 950aede407a4a6e1ede7c900e6bf44a28eca1832 diff --git a/src/sas_robot_driver_coppeliasim b/src/sas_robot_driver_coppeliasim index 20d4782..5af802d 160000 --- a/src/sas_robot_driver_coppeliasim +++ b/src/sas_robot_driver_coppeliasim @@ -1 +1 @@ -Subproject commit 20d478291018ac2d1c06d2ecaa0688b395351da6 +Subproject commit 5af802d4be6102c4617132dc1c005357b25f0060 diff --git a/src/sas_robot_driver_gazebo b/src/sas_robot_driver_gazebo index dbd088d..c22151b 160000 --- a/src/sas_robot_driver_gazebo +++ b/src/sas_robot_driver_gazebo @@ -1 +1 @@ -Subproject commit dbd088df81cda14081abc35849a2554bbda96ce1 +Subproject commit c22151be0aad733a46297777be4102d56efb0370 diff --git a/src/sas_robot_driver_kuka b/src/sas_robot_driver_kuka index b14e23c..658ffb4 160000 --- a/src/sas_robot_driver_kuka +++ b/src/sas_robot_driver_kuka @@ -1 +1 @@ -Subproject commit b14e23c4b01908b5eb7a9772c753ab4985a3a1a6 +Subproject commit 658ffb4b8a7384cccc851c12434f59bd061149ad diff --git a/src/sas_robot_driver_ur b/src/sas_robot_driver_ur index df3e2c9..af9f0a4 160000 --- a/src/sas_robot_driver_ur +++ b/src/sas_robot_driver_ur @@ -1 +1 @@ -Subproject commit df3e2c935f238a576eeeef7078ce424fe852ffef +Subproject commit af9f0a48eef6c4803f81f0191db89575e48f01b9 diff --git a/src/sas_robot_kinematics b/src/sas_robot_kinematics index 09712a5..165c368 160000 --- a/src/sas_robot_kinematics +++ b/src/sas_robot_kinematics @@ -1 +1 @@ -Subproject commit 09712a5b0a5dde32c824dcfa16750fd8e22d3a0e +Subproject commit 165c3688ab06d6ff3c443987665b5ea50ac6a00b diff --git a/src/sas_ur_control_template b/src/sas_ur_control_template index 7139774..94c6b77 160000 --- a/src/sas_ur_control_template +++ b/src/sas_ur_control_template @@ -1 +1 @@ -Subproject commit 7139774f6685ec7da46a760f227ee0315e47aa0b +Subproject commit 94c6b779b97ca321b0dcf3efd7ec8ed8c8055eb5 From 2a7ecf0714606a62e5d4639b2cc8ac98bfd85de5 Mon Sep 17 00:00:00 2001 From: openhands Date: Sat, 15 Aug 2026 19:42:24 +0000 Subject: [PATCH 2/4] Update cheatsheet: reflect CMake VERSION 3.11 standardization --- cheatsheet.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cheatsheet.md b/cheatsheet.md index 0ca59bd..6d5d2c3 100644 --- a/cheatsheet.md +++ b/cheatsheet.md @@ -7,7 +7,7 @@ Patterns extracted from the SmartArmStack CMakeLists.txt files across all submod ## Project Setup ```cmake -cmake_minimum_required(VERSION 3.8) +cmake_minimum_required(VERSION 3.11) project() if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") @@ -17,7 +17,7 @@ endif() find_package(ament_cmake REQUIRED) ``` -Use `VERSION 3.11` when embedding pybind11 as a subdirectory. +All SAS submodules use **VERSION 3.11** — required for pybind11 embedding and CMake block scope support. --- From 5d488d6006f0a937d75df3c0c3e385eefcac2878 Mon Sep 17 00:00:00 2001 From: openhands Date: Sat, 15 Aug 2026 19:50:38 +0000 Subject: [PATCH 3/4] Update all submodules to their latest remote commits --- src/sas_common | 2 +- src/sas_conversions | 2 +- src/sas_core | 2 +- src/sas_datalogger | 2 +- src/sas_force_sensor | 2 +- src/sas_force_sensor_bota | 2 +- src/sas_kuka_control_template | 2 +- src/sas_msgs | 2 +- src/sas_robot_driver | 2 +- src/sas_robot_driver_coppeliasim | 2 +- src/sas_robot_driver_gazebo | 2 +- src/sas_robot_driver_kuka | 2 +- src/sas_robot_driver_ur | 2 +- src/sas_robot_kinematics | 2 +- src/sas_ur_control_template | 2 +- 15 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/sas_common b/src/sas_common index a757bce..9e62441 160000 --- a/src/sas_common +++ b/src/sas_common @@ -1 +1 @@ -Subproject commit a757bcec4a06491d3f86b027931dc133381177b9 +Subproject commit 9e624415b1e2a089cf29f383a39939a1aba2e06a diff --git a/src/sas_conversions b/src/sas_conversions index ec9d808..a92ac92 160000 --- a/src/sas_conversions +++ b/src/sas_conversions @@ -1 +1 @@ -Subproject commit ec9d808e019536c03d97a1888562493e9579c40a +Subproject commit a92ac924bc43ebcdbf97bef383bf2fb4c306609b diff --git a/src/sas_core b/src/sas_core index dea255e..f96658b 160000 --- a/src/sas_core +++ b/src/sas_core @@ -1 +1 @@ -Subproject commit dea255eb73bc9979bf5376a3af427ac0a3b98ed5 +Subproject commit f96658bcda2e366fdc72c291c98a580d6530dfa4 diff --git a/src/sas_datalogger b/src/sas_datalogger index 5c84e04..ea50dd6 160000 --- a/src/sas_datalogger +++ b/src/sas_datalogger @@ -1 +1 @@ -Subproject commit 5c84e04a20de704b7a8668ace48e1bdbb075ee24 +Subproject commit ea50dd6937ee078e64e5d05d4be0e48bf623320e diff --git a/src/sas_force_sensor b/src/sas_force_sensor index 4a7ca08..03eaa9d 160000 --- a/src/sas_force_sensor +++ b/src/sas_force_sensor @@ -1 +1 @@ -Subproject commit 4a7ca08d129c49447848801b0c1b952006b8cf9a +Subproject commit 03eaa9dfdb33aa6b6c51bc8486d70ea353cdd1bf diff --git a/src/sas_force_sensor_bota b/src/sas_force_sensor_bota index 84a7384..5ac1d27 160000 --- a/src/sas_force_sensor_bota +++ b/src/sas_force_sensor_bota @@ -1 +1 @@ -Subproject commit 84a7384757d7de4514b74d1b92930518290078e1 +Subproject commit 5ac1d27386d69e326d80e8b2ce2cbb87e367eb2b diff --git a/src/sas_kuka_control_template b/src/sas_kuka_control_template index 67cd3b6..4739251 160000 --- a/src/sas_kuka_control_template +++ b/src/sas_kuka_control_template @@ -1 +1 @@ -Subproject commit 67cd3b63ff67f1251c0bda468b136fc9e6066046 +Subproject commit 473925188c2ba6e8d3ffb354714d21102e1ee6d5 diff --git a/src/sas_msgs b/src/sas_msgs index 018d0d5..7ab80cf 160000 --- a/src/sas_msgs +++ b/src/sas_msgs @@ -1 +1 @@ -Subproject commit 018d0d5a8e1e4fe6259165d084330e2049a4753e +Subproject commit 7ab80cf2bd22b324aec3ba3fd71bdad09e9fbe57 diff --git a/src/sas_robot_driver b/src/sas_robot_driver index 950aede..def7247 160000 --- a/src/sas_robot_driver +++ b/src/sas_robot_driver @@ -1 +1 @@ -Subproject commit 950aede407a4a6e1ede7c900e6bf44a28eca1832 +Subproject commit def724726206600e4a239fa9eccf35b2b26559e8 diff --git a/src/sas_robot_driver_coppeliasim b/src/sas_robot_driver_coppeliasim index 5af802d..fb7c724 160000 --- a/src/sas_robot_driver_coppeliasim +++ b/src/sas_robot_driver_coppeliasim @@ -1 +1 @@ -Subproject commit 5af802d4be6102c4617132dc1c005357b25f0060 +Subproject commit fb7c724238dc6d709ee76b3191c5e18f27a4faaf diff --git a/src/sas_robot_driver_gazebo b/src/sas_robot_driver_gazebo index c22151b..61c0335 160000 --- a/src/sas_robot_driver_gazebo +++ b/src/sas_robot_driver_gazebo @@ -1 +1 @@ -Subproject commit c22151be0aad733a46297777be4102d56efb0370 +Subproject commit 61c0335db94f52af80503c487d6a1f0bcfc1a78b diff --git a/src/sas_robot_driver_kuka b/src/sas_robot_driver_kuka index 658ffb4..cc35367 160000 --- a/src/sas_robot_driver_kuka +++ b/src/sas_robot_driver_kuka @@ -1 +1 @@ -Subproject commit 658ffb4b8a7384cccc851c12434f59bd061149ad +Subproject commit cc353674f9ff63b413ef22afe23145d0b449e238 diff --git a/src/sas_robot_driver_ur b/src/sas_robot_driver_ur index af9f0a4..efed4b9 160000 --- a/src/sas_robot_driver_ur +++ b/src/sas_robot_driver_ur @@ -1 +1 @@ -Subproject commit af9f0a48eef6c4803f81f0191db89575e48f01b9 +Subproject commit efed4b93db7d05fdadebdfc38f83828730dc4090 diff --git a/src/sas_robot_kinematics b/src/sas_robot_kinematics index 165c368..50a6be6 160000 --- a/src/sas_robot_kinematics +++ b/src/sas_robot_kinematics @@ -1 +1 @@ -Subproject commit 165c3688ab06d6ff3c443987665b5ea50ac6a00b +Subproject commit 50a6be64bbdf29690e1bce2b13ff062ca54eb05e diff --git a/src/sas_ur_control_template b/src/sas_ur_control_template index 94c6b77..c83135a 160000 --- a/src/sas_ur_control_template +++ b/src/sas_ur_control_template @@ -1 +1 @@ -Subproject commit 94c6b779b97ca321b0dcf3efd7ec8ed8c8055eb5 +Subproject commit c83135aae4422f8a23638968279c2e5bf0ee7ed7 From d4aa0ebfbf93474c6229257b4f4f6d8affd36848 Mon Sep 17 00:00:00 2001 From: openhands Date: Sat, 15 Aug 2026 19:59:21 +0000 Subject: [PATCH 4/4] Add submodule overview table to cheatsheet --- cheatsheet.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/cheatsheet.md b/cheatsheet.md index 6d5d2c3..4150cc8 100644 --- a/cheatsheet.md +++ b/cheatsheet.md @@ -2,6 +2,28 @@ Patterns extracted from the SmartArmStack CMakeLists.txt files across all submodules. +## Submodule Overview + +| Package | Owner | Branch | Shared Lib | pybind11 | Messages | Scripts | +|---|---|---|---|---|---|---| +| sas_common | SmartArmStack | jazzy | ✅ | ✅ | — | ✅ | +| sas_conversions | SmartArmStack | jazzy | — | — | — | — | +| sas_core | SmartArmStack | jazzy | ✅ | ✅ | — | ✅ | +| sas_datalogger | SmartArmStack | jazzy | ✅ | ✅ | — | ✅ | +| sas_force_sensor | MarinhoLab | jazzy | ✅ | ✅ | — | ✅ | +| sas_force_sensor_bota | MarinhoLab | jazzy | — | — | — | — | +| sas_kuka_control_template | MarinhoLab | main | — | — | — | ✅ | +| sas_msgs | SmartArmStack | jazzy | — | — | ✅ | — | +| sas_robot_driver | SmartArmStack | jazzy | ✅ | ✅ | — | ✅ | +| sas_robot_driver_coppeliasim | MarinhoLab | jazzy | — | — | — | — | +| sas_robot_driver_gazebo | MarinhoLab | jazzy | ✅ | ✅ | — | — | +| sas_robot_driver_kuka | MarinhoLab | jazzy | ✅ | — | — | — | +| sas_robot_driver_ur | MarinhoLab | jazzy | ✅ | — | — | — | +| sas_robot_kinematics | SmartArmStack | jazzy | ✅ | ✅ | — | ✅ | +| sas_ur_control_template | MarinhoLab | main | — | — | — | ✅ | + +**All submodules:** `cmake_minimum_required(VERSION 3.11)` + --- ## Project Setup