From 998114d3bed97a7a5d20ee8684782e09b886f10f Mon Sep 17 00:00:00 2001 From: agus-darmawan Date: Sun, 18 Oct 2026 13:19:59 +0700 Subject: [PATCH 1/3] build: dharma packages through pashupati.repos --- .gitignore | 5 ++++- pashupati.repos | 22 ++++++++++++++++++++++ script/setup.sh | 25 ++++++++++++++++++++++--- 3 files changed, 48 insertions(+), 4 deletions(-) create mode 100644 pashupati.repos diff --git a/.gitignore b/.gitignore index 3bc84be..98ee250 100644 --- a/.gitignore +++ b/.gitignore @@ -38,4 +38,7 @@ desktop.ini .cache/ __MACOSX/ -.vscode/settings.json \ No newline at end of file +.vscode/settings.json + +# ---- dharma packages (vcs import src < pashupati.repos) ---- +src/dharma/ diff --git a/pashupati.repos b/pashupati.repos new file mode 100644 index 0000000..1f1fd97 --- /dev/null +++ b/pashupati.repos @@ -0,0 +1,22 @@ +# Dharma packages Pashupati runs on: vcs import src < pashupati.repos +repositories: + dharma/dharma_interfaces: + type: git + url: git@github.com:DarmawanRobotics/dharma_interfaces.git + version: dev + dharma/dharma_odometry: + type: git + url: git@github.com:DarmawanRobotics/dharma_odometry.git + version: dev + dharma/dharma_localization: + type: git + url: git@github.com:DarmawanRobotics/dharma_localization.git + version: dev + dharma/dharma_navigation: + type: git + url: git@github.com:DarmawanRobotics/dharma_navigation.git + version: dev + dharma/dharma_perception: + type: git + url: git@github.com:DarmawanRobotics/dharma_perception.git + version: dev diff --git a/script/setup.sh b/script/setup.sh index 411bec3..51ae1db 100755 --- a/script/setup.sh +++ b/script/setup.sh @@ -7,7 +7,7 @@ # script/setup.sh install livox build # install only these # script/setup.sh install all # every component, including ros and service # -# Components: ros tools submodules livox robot legkilo rosdep realsense webrtc ollama people_model +# Components: ros tools submodules dharma livox robot legkilo rosdep realsense webrtc ollama people_model # build config service network # Settings come from the environment, then from /etc/pashupati/pashupati.env (ROBOT_SETUP, # ROBOT_IP, PEOPLE, INSPECTION, ...): no need to source it first. @@ -64,9 +64,9 @@ BUILD_STAMP="$ROOT/install/.pashupati_build" UVC_BLACKLIST=/etc/modprobe.d/blacklist-uvcvideo-realsense.conf REALSENSE_BLACKLIST_UVC="${REALSENSE_BLACKLIST_UVC:-$([[ "$(uname -m)" == aarch64 ]] && echo 1 || echo 0)}" -ALL=(ros tools submodules livox robot legkilo rosdep realsense webrtc ollama people_model build +ALL=(ros tools submodules dharma livox robot legkilo rosdep realsense webrtc ollama people_model build config service network) -DEFAULT_INSTALL=(tools submodules livox robot legkilo rosdep realsense webrtc ollama build config) +DEFAULT_INSTALL=(tools submodules dharma livox robot legkilo rosdep realsense webrtc ollama build config) SUDO=$([[ "$(id -u)" -eq 0 ]] && echo "" || echo "sudo") IN_DOCKER=$([[ -f /.dockerenv ]] && echo 1 || echo 0) @@ -147,6 +147,25 @@ install_submodules() { submodule update --init --recursive } +check_dharma() { + local missing=() name + for name in $(awk '/^ dharma\// {sub(":", ""); print $1}' "$ROOT/pashupati.repos"); do + [[ -f "$ROOT/src/$name/README.md" ]] || missing+=("$name") + done + [[ ${#missing[@]} -eq 0 ]] && echo "src/dharma: all checked out" && return 0 + echo "not checked out: ${missing[*]}"; return 1 +} +install_dharma() { + command -v vcs >/dev/null || apt_install python3-vcstool + if ! vcs import --skip-existing "$ROOT/src" < "$ROOT/pashupati.repos"; then + log "SSH clone failed, retrying the dharma packages over HTTPS" + GIT_CONFIG_COUNT=1 GIT_CONFIG_KEY_0=url.https://github.com/.insteadOf \ + GIT_CONFIG_VALUE_0=git@github.com: \ + vcs import --skip-existing "$ROOT/src" < "$ROOT/pashupati.repos" + fi + vcs pull "$ROOT/src/dharma" +} + check_livox() { [[ -f /usr/local/lib/liblivox_lidar_sdk_shared.so ]] \ && echo "/usr/local/lib/liblivox_lidar_sdk_shared.so" && return 0 From 35840762d323e7d64c86651f2463dc155055704d Mon Sep 17 00:00:00 2001 From: agus-darmawan Date: Sun, 18 Oct 2026 13:19:59 +0700 Subject: [PATCH 2/3] refactor: keep the tuned configs in src/pashupati/config --- src/{robot_odometry => pashupati}/config/fast_lio.yaml | 0 src/{robot_odometry => pashupati}/config/leg_kilo.yaml | 0 .../config/localization_params.yaml | 0 src/{robot_navigation => pashupati}/config/navigation_params.yaml | 0 src/{robot_odometry => pashupati}/config/odometry_params.yaml | 0 src/{robot_perception => pashupati}/config/perception_params.yaml | 0 6 files changed, 0 insertions(+), 0 deletions(-) rename src/{robot_odometry => pashupati}/config/fast_lio.yaml (100%) rename src/{robot_odometry => pashupati}/config/leg_kilo.yaml (100%) rename src/{robot_localization => pashupati}/config/localization_params.yaml (100%) rename src/{robot_navigation => pashupati}/config/navigation_params.yaml (100%) rename src/{robot_odometry => pashupati}/config/odometry_params.yaml (100%) rename src/{robot_perception => pashupati}/config/perception_params.yaml (100%) diff --git a/src/robot_odometry/config/fast_lio.yaml b/src/pashupati/config/fast_lio.yaml similarity index 100% rename from src/robot_odometry/config/fast_lio.yaml rename to src/pashupati/config/fast_lio.yaml diff --git a/src/robot_odometry/config/leg_kilo.yaml b/src/pashupati/config/leg_kilo.yaml similarity index 100% rename from src/robot_odometry/config/leg_kilo.yaml rename to src/pashupati/config/leg_kilo.yaml diff --git a/src/robot_localization/config/localization_params.yaml b/src/pashupati/config/localization_params.yaml similarity index 100% rename from src/robot_localization/config/localization_params.yaml rename to src/pashupati/config/localization_params.yaml diff --git a/src/robot_navigation/config/navigation_params.yaml b/src/pashupati/config/navigation_params.yaml similarity index 100% rename from src/robot_navigation/config/navigation_params.yaml rename to src/pashupati/config/navigation_params.yaml diff --git a/src/robot_odometry/config/odometry_params.yaml b/src/pashupati/config/odometry_params.yaml similarity index 100% rename from src/robot_odometry/config/odometry_params.yaml rename to src/pashupati/config/odometry_params.yaml diff --git a/src/robot_perception/config/perception_params.yaml b/src/pashupati/config/perception_params.yaml similarity index 100% rename from src/robot_perception/config/perception_params.yaml rename to src/pashupati/config/perception_params.yaml From ccde955102ac441108241960fcd51d30e510e65f Mon Sep 17 00:00:00 2001 From: agus-darmawan Date: Sun, 18 Oct 2026 13:20:00 +0700 Subject: [PATCH 3/3] refactor!: odometry, localization, navigation and perception from dharma --- .github/scripts/check_people_model.py | 4 +- .github/workflows/ci.yml | 17 +- .github/workflows/people-model.yml | 2 +- CONTRIBUTING.md | 2 +- README.md | 26 +- docs/pdf/build.py | 8 +- script/start_tmux.sh | 12 +- src/pashupati/README.md | 2 +- src/pashupati/launch/robot.launch.py | 29 +- src/pashupati/package.xml | 10 +- .../README.md | 4 +- .../launch/people.launch.py} | 14 +- .../package.xml | 7 +- .../pashupati_perception}/__init__.py | 0 .../pashupati_perception}/detector.py | 0 .../person_detector_node.py | 4 +- .../person_projection.py | 0 .../resource/pashupati_perception} | 0 src/pashupati_perception/setup.cfg | 4 + .../setup.py | 13 +- .../test/test_copyright.py | 0 .../test/test_detector.py | 2 +- .../test/test_flake8.py | 0 .../test/test_node_members.py | 0 .../test/test_pep257.py | 0 .../test/test_person_projection.py | 2 +- src/robot_bridge/README.md | 4 +- src/robot_bridge/launch/bridge.launch.py | 2 +- src/robot_bridge/package.xml | 3 +- .../robot_bridge/control_mux_node.py | 263 --- src/robot_bridge/robot_bridge/mux.py | 94 -- .../robot_bridge/protective_field.py | 102 -- .../robot_bridge/teleop_udp_node.py | 4 +- src/robot_bridge/setup.py | 1 - src/robot_bridge/test/test_mux.py | 64 - src/robot_bridge/test/test_mux_node.py | 197 --- .../test/test_protective_field.py | 84 - src/robot_fleet/package.xml | 2 +- .../robot_fleet/fleet_uplink_node.py | 4 +- src/robot_interfaces/CMakeLists.txt | 23 - src/robot_interfaces/README.md | 13 - src/robot_interfaces/msg/AvoidanceCommand.msg | 7 - src/robot_interfaces/msg/MissionStatus.msg | 4 - src/robot_interfaces/msg/NavigationStatus.msg | 3 - src/robot_interfaces/msg/SectorScan.msg | 10 - src/robot_interfaces/msg/StopPointEvent.msg | 11 - src/robot_interfaces/msg/Waypoint.msg | 4 - src/robot_interfaces/msg/WaypointPath.msg | 2 - src/robot_interfaces/package.xml | 19 - src/robot_interfaces/srv/LoadPath.srv | 4 - src/robot_interfaces/srv/MarkStopPoint.srv | 4 - src/robot_interfaces/srv/SetMode.srv | 5 - src/robot_localization/README.md | 23 - .../launch/localization.launch.py | 36 - src/robot_localization/package.xml | 28 - .../robot_localization/localization_node.py | 441 ----- .../robot_localization/utils/__init__.py | 0 .../utils/pose_localization.py | 76 - .../robot_localization/utils/tag_recording.py | 53 - src/robot_localization/setup.cfg | 4 - src/robot_navigation/README.md | 78 - .../launch/navigation.launch.py | 60 - .../launch/path_follower.launch.py | 53 - src/robot_navigation/package.xml | 29 - .../resource/robot_navigation | 0 .../robot_navigation/__init__.py | 0 .../obstacle_avoidance_node.py | 215 --- .../robot_navigation/path_follower_node.py | 1428 ----------------- .../robot_navigation/path_loader_node.py | 183 --- .../robot_navigation/utils/__init__.py | 0 .../utils/avoidance/__init__.py | 0 .../utils/avoidance/base_avoidance.py | 44 - .../utils/avoidance/braitenberg_avoidance.py | 114 -- .../utils/avoidance/follow_gap_avoidance.py | 91 -- .../avoidance/potential_field_avoidance.py | 67 - .../utils/avoidance/registry.py | 20 - .../utils/avoidance/vfh_avoidance.py | 114 -- .../robot_navigation/utils/command_filter.py | 43 - .../utils/controllers/__init__.py | 0 .../utils/controllers/base_controller.py | 36 - .../utils/controllers/holonomic_controller.py | 136 -- .../utils/controllers/lqr_controller.py | 73 - .../utils/controllers/mppi_controller.py | 106 -- .../utils/controllers/pid_controller.py | 60 - .../controllers/pure_pursuit_controller.py | 40 - .../utils/controllers/registry.py | 22 - .../utils/controllers/stanley_controller.py | 55 - .../robot_navigation/utils/final_approach.py | 107 -- .../robot_navigation/utils/geometry.py | 29 - .../robot_navigation/utils/path_processing.py | 200 --- .../robot_navigation/utils/path_progress.py | 174 -- .../robot_navigation/utils/path_shift.py | 150 -- .../robot_navigation/utils/pose2d.py | 10 - .../robot_navigation/utils/pure_pursuit.py | 61 - .../robot_navigation/utils/safety.py | 53 - .../robot_navigation/utils/speed_regulator.py | 26 - .../robot_navigation/utils/visualization.py | 166 -- src/robot_navigation/setup.cfg | 4 - src/robot_navigation/setup.py | 32 - src/robot_navigation/test/conftest.py | 4 - src/robot_navigation/test/sim_utils.py | 58 - src/robot_navigation/test/test_avoidance.py | 47 - src/robot_navigation/test/test_controllers.py | 42 - src/robot_navigation/test/test_copyright.py | 25 - .../test/test_final_approach.py | 22 - src/robot_navigation/test/test_flake8.py | 23 - .../test/test_follower_node.py | 118 -- src/robot_navigation/test/test_holonomic.py | 154 -- .../test/test_node_members.py | 105 -- .../test/test_path_processing.py | 68 - src/robot_navigation/test/test_pep257.py | 23 - src/robot_odometry/README.md | 77 - src/robot_odometry/launch/odometry.launch.py | 164 -- src/robot_odometry/package.xml | 33 - src/robot_odometry/resource/robot_odometry | 0 src/robot_odometry/robot_odometry/__init__.py | 0 src/robot_odometry/robot_odometry/checks.py | 42 - .../robot_odometry/odometry_monitor_node.py | 175 -- .../robot_odometry/route_recorder_node.py | 207 --- .../robot_odometry/wait_still.py | 147 -- src/robot_odometry/setup.cfg | 4 - src/robot_odometry/setup.py | 36 - src/robot_odometry/test/test_checks.py | 53 - src/robot_odometry/test/test_copyright.py | 25 - src/robot_odometry/test/test_flake8.py | 23 - src/robot_odometry/test/test_node_members.py | 105 -- .../test/test_odometry_nodes.py | 182 --- src/robot_odometry/test/test_pep257.py | 23 - .../launch/perception.launch.py | 81 - .../resource/robot_perception | 0 .../robot_perception/__init__.py | 0 .../robot_perception/image_throttle_node.py | 70 - .../robot_perception/lidar_sector_node.py | 327 ---- .../robot_perception/livox_cdr.py | 56 - .../robot_perception/sectors.py | 52 - src/robot_perception/setup.cfg | 4 - src/robot_perception/setup.py | 32 - src/robot_perception/test/test_copyright.py | 25 - src/robot_perception/test/test_flake8.py | 23 - .../test/test_image_throttle_node.py | 57 - .../test/test_lidar_sector_node.py | 85 - src/robot_perception/test/test_livox_cdr.py | 113 -- .../test/test_node_members.py | 105 -- src/robot_perception/test/test_pep257.py | 23 - src/robot_perception/test/test_sectors.py | 48 - src/robot_rviz/CMakeLists.txt | 6 +- .../include/robot_rviz/control_panel.hpp | 20 +- src/robot_rviz/package.xml | 2 +- src/robot_rviz/src/control_panel.cpp | 20 +- src/robot_sim/test/test_sim_patrol.py | 4 +- 150 files changed, 126 insertions(+), 8847 deletions(-) rename src/{robot_perception => pashupati_perception}/README.md (96%) rename src/{robot_navigation/launch/obstacle_avoidance.launch.py => pashupati_perception/launch/people.launch.py} (56%) rename src/{robot_perception => pashupati_perception}/package.xml (81%) rename src/{robot_localization/robot_localization => pashupati_perception/pashupati_perception}/__init__.py (100%) rename src/{robot_perception/robot_perception => pashupati_perception/pashupati_perception}/detector.py (100%) rename src/{robot_perception/robot_perception => pashupati_perception/pashupati_perception}/person_detector_node.py (98%) rename src/{robot_perception/robot_perception => pashupati_perception/pashupati_perception}/person_projection.py (100%) rename src/{robot_localization/resource/robot_localization => pashupati_perception/resource/pashupati_perception} (100%) create mode 100644 src/pashupati_perception/setup.cfg rename src/{robot_localization => pashupati_perception}/setup.py (64%) rename src/{robot_localization => pashupati_perception}/test/test_copyright.py (100%) rename src/{robot_perception => pashupati_perception}/test/test_detector.py (96%) rename src/{robot_localization => pashupati_perception}/test/test_flake8.py (100%) rename src/{robot_localization => pashupati_perception}/test/test_node_members.py (100%) rename src/{robot_localization => pashupati_perception}/test/test_pep257.py (100%) rename src/{robot_perception => pashupati_perception}/test/test_person_projection.py (94%) delete mode 100644 src/robot_bridge/robot_bridge/control_mux_node.py delete mode 100644 src/robot_bridge/robot_bridge/mux.py delete mode 100644 src/robot_bridge/robot_bridge/protective_field.py delete mode 100644 src/robot_bridge/test/test_mux.py delete mode 100644 src/robot_bridge/test/test_mux_node.py delete mode 100644 src/robot_bridge/test/test_protective_field.py delete mode 100644 src/robot_interfaces/CMakeLists.txt delete mode 100644 src/robot_interfaces/README.md delete mode 100644 src/robot_interfaces/msg/AvoidanceCommand.msg delete mode 100644 src/robot_interfaces/msg/MissionStatus.msg delete mode 100644 src/robot_interfaces/msg/NavigationStatus.msg delete mode 100644 src/robot_interfaces/msg/SectorScan.msg delete mode 100644 src/robot_interfaces/msg/StopPointEvent.msg delete mode 100644 src/robot_interfaces/msg/Waypoint.msg delete mode 100644 src/robot_interfaces/msg/WaypointPath.msg delete mode 100644 src/robot_interfaces/package.xml delete mode 100644 src/robot_interfaces/srv/LoadPath.srv delete mode 100644 src/robot_interfaces/srv/MarkStopPoint.srv delete mode 100644 src/robot_interfaces/srv/SetMode.srv delete mode 100644 src/robot_localization/README.md delete mode 100644 src/robot_localization/launch/localization.launch.py delete mode 100644 src/robot_localization/package.xml delete mode 100644 src/robot_localization/robot_localization/localization_node.py delete mode 100644 src/robot_localization/robot_localization/utils/__init__.py delete mode 100644 src/robot_localization/robot_localization/utils/pose_localization.py delete mode 100644 src/robot_localization/robot_localization/utils/tag_recording.py delete mode 100644 src/robot_localization/setup.cfg delete mode 100644 src/robot_navigation/README.md delete mode 100644 src/robot_navigation/launch/navigation.launch.py delete mode 100644 src/robot_navigation/launch/path_follower.launch.py delete mode 100644 src/robot_navigation/package.xml delete mode 100644 src/robot_navigation/resource/robot_navigation delete mode 100644 src/robot_navigation/robot_navigation/__init__.py delete mode 100644 src/robot_navigation/robot_navigation/obstacle_avoidance_node.py delete mode 100644 src/robot_navigation/robot_navigation/path_follower_node.py delete mode 100644 src/robot_navigation/robot_navigation/path_loader_node.py delete mode 100644 src/robot_navigation/robot_navigation/utils/__init__.py delete mode 100644 src/robot_navigation/robot_navigation/utils/avoidance/__init__.py delete mode 100644 src/robot_navigation/robot_navigation/utils/avoidance/base_avoidance.py delete mode 100644 src/robot_navigation/robot_navigation/utils/avoidance/braitenberg_avoidance.py delete mode 100644 src/robot_navigation/robot_navigation/utils/avoidance/follow_gap_avoidance.py delete mode 100644 src/robot_navigation/robot_navigation/utils/avoidance/potential_field_avoidance.py delete mode 100644 src/robot_navigation/robot_navigation/utils/avoidance/registry.py delete mode 100644 src/robot_navigation/robot_navigation/utils/avoidance/vfh_avoidance.py delete mode 100644 src/robot_navigation/robot_navigation/utils/command_filter.py delete mode 100644 src/robot_navigation/robot_navigation/utils/controllers/__init__.py delete mode 100644 src/robot_navigation/robot_navigation/utils/controllers/base_controller.py delete mode 100644 src/robot_navigation/robot_navigation/utils/controllers/holonomic_controller.py delete mode 100644 src/robot_navigation/robot_navigation/utils/controllers/lqr_controller.py delete mode 100644 src/robot_navigation/robot_navigation/utils/controllers/mppi_controller.py delete mode 100644 src/robot_navigation/robot_navigation/utils/controllers/pid_controller.py delete mode 100644 src/robot_navigation/robot_navigation/utils/controllers/pure_pursuit_controller.py delete mode 100644 src/robot_navigation/robot_navigation/utils/controllers/registry.py delete mode 100644 src/robot_navigation/robot_navigation/utils/controllers/stanley_controller.py delete mode 100644 src/robot_navigation/robot_navigation/utils/final_approach.py delete mode 100644 src/robot_navigation/robot_navigation/utils/geometry.py delete mode 100644 src/robot_navigation/robot_navigation/utils/path_processing.py delete mode 100644 src/robot_navigation/robot_navigation/utils/path_progress.py delete mode 100644 src/robot_navigation/robot_navigation/utils/path_shift.py delete mode 100644 src/robot_navigation/robot_navigation/utils/pose2d.py delete mode 100644 src/robot_navigation/robot_navigation/utils/pure_pursuit.py delete mode 100644 src/robot_navigation/robot_navigation/utils/safety.py delete mode 100644 src/robot_navigation/robot_navigation/utils/speed_regulator.py delete mode 100644 src/robot_navigation/robot_navigation/utils/visualization.py delete mode 100644 src/robot_navigation/setup.cfg delete mode 100644 src/robot_navigation/setup.py delete mode 100644 src/robot_navigation/test/conftest.py delete mode 100644 src/robot_navigation/test/sim_utils.py delete mode 100644 src/robot_navigation/test/test_avoidance.py delete mode 100644 src/robot_navigation/test/test_controllers.py delete mode 100644 src/robot_navigation/test/test_copyright.py delete mode 100644 src/robot_navigation/test/test_final_approach.py delete mode 100644 src/robot_navigation/test/test_flake8.py delete mode 100644 src/robot_navigation/test/test_follower_node.py delete mode 100644 src/robot_navigation/test/test_holonomic.py delete mode 100644 src/robot_navigation/test/test_node_members.py delete mode 100644 src/robot_navigation/test/test_path_processing.py delete mode 100644 src/robot_navigation/test/test_pep257.py delete mode 100644 src/robot_odometry/README.md delete mode 100644 src/robot_odometry/launch/odometry.launch.py delete mode 100644 src/robot_odometry/package.xml delete mode 100644 src/robot_odometry/resource/robot_odometry delete mode 100644 src/robot_odometry/robot_odometry/__init__.py delete mode 100644 src/robot_odometry/robot_odometry/checks.py delete mode 100644 src/robot_odometry/robot_odometry/odometry_monitor_node.py delete mode 100644 src/robot_odometry/robot_odometry/route_recorder_node.py delete mode 100644 src/robot_odometry/robot_odometry/wait_still.py delete mode 100644 src/robot_odometry/setup.cfg delete mode 100644 src/robot_odometry/setup.py delete mode 100644 src/robot_odometry/test/test_checks.py delete mode 100644 src/robot_odometry/test/test_copyright.py delete mode 100644 src/robot_odometry/test/test_flake8.py delete mode 100644 src/robot_odometry/test/test_node_members.py delete mode 100644 src/robot_odometry/test/test_odometry_nodes.py delete mode 100644 src/robot_odometry/test/test_pep257.py delete mode 100644 src/robot_perception/launch/perception.launch.py delete mode 100644 src/robot_perception/resource/robot_perception delete mode 100644 src/robot_perception/robot_perception/__init__.py delete mode 100644 src/robot_perception/robot_perception/image_throttle_node.py delete mode 100644 src/robot_perception/robot_perception/lidar_sector_node.py delete mode 100644 src/robot_perception/robot_perception/livox_cdr.py delete mode 100644 src/robot_perception/robot_perception/sectors.py delete mode 100644 src/robot_perception/setup.cfg delete mode 100644 src/robot_perception/setup.py delete mode 100644 src/robot_perception/test/test_copyright.py delete mode 100644 src/robot_perception/test/test_flake8.py delete mode 100644 src/robot_perception/test/test_image_throttle_node.py delete mode 100644 src/robot_perception/test/test_lidar_sector_node.py delete mode 100644 src/robot_perception/test/test_livox_cdr.py delete mode 100644 src/robot_perception/test/test_node_members.py delete mode 100644 src/robot_perception/test/test_pep257.py delete mode 100644 src/robot_perception/test/test_sectors.py diff --git a/.github/scripts/check_people_model.py b/.github/scripts/check_people_model.py index f617646..ce67a3c 100644 --- a/.github/scripts/check_people_model.py +++ b/.github/scripts/check_people_model.py @@ -16,8 +16,8 @@ def main(model: str, image: str, backends: list[str]) -> int: try: import cv2 - sys.path.insert(0, 'src/robot_perception') - from robot_perception.detector import OnnxPersonDetector + sys.path.insert(0, 'src/pashupati_perception') + from pashupati_perception.detector import OnnxPersonDetector except Exception: # noqa: B902 the environment itself is broken: say how annotate('error', 'imports', traceback.format_exc()[-1500:]) return 1 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7ab3d51..47b8cb2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,8 +16,8 @@ env: ROSDEP_SKIP: >- livox_ros_driver2 fast_lio legkilo apriltag_draw PACKAGES: >- - robot_interfaces robot_odometry robot_localization robot_perception robot_navigation - robot_bridge robot_fleet robot_inspection robot_health robot_rviz pashupati robot_sim + pashupati_perception robot_bridge robot_fleet robot_inspection robot_health robot_rviz + pashupati robot_sim jobs: scripts: @@ -87,6 +87,15 @@ jobs: shell: bash steps: - uses: actions/checkout@v4 # no submodules: they need SSH keys and vendor SDKs + - name: Dharma packages + env: + # the dharma repos are private: a fine-grained token with read access to them + DHARMA_TOKEN: ${{ secrets.DHARMA_TOKEN }} + run: | + apt-get update && apt-get install -y python3-vcstool git + git config --global url."https://x-access-token:${DHARMA_TOKEN}@github.com/".insteadOf \ + "git@github.com:" + vcs import src < pashupati.repos - name: Dependencies run: | apt-get update @@ -96,7 +105,7 @@ jobs: - name: Build run: | source /opt/ros/humble/setup.bash - colcon build --packages-select $PACKAGES --event-handlers console_cohesion+ + colcon build --packages-up-to $PACKAGES --event-handlers console_cohesion+ - name: Test run: | source /opt/ros/humble/setup.bash @@ -118,7 +127,7 @@ jobs: source /opt/ros/humble/setup.bash source install/setup.bash ros2 launch pashupati robot.launch.py --show-args > /dev/null - ros2 launch robot_odometry odometry.launch.py --show-args > /dev/null + ros2 launch dharma_odometry odometry.launch.py --show-args > /dev/null ros2 launch robot_sim sim.launch.py --show-args > /dev/null - name: Test reports if: always() diff --git a/.github/workflows/people-model.yml b/.github/workflows/people-model.yml index 6ec9fda..6382a7e 100644 --- a/.github/workflows/people-model.yml +++ b/.github/workflows/people-model.yml @@ -9,7 +9,7 @@ on: push: branches: [dev] paths: - - src/robot_perception/robot_perception/detector.py + - src/pashupati_perception/pashupati_perception/detector.py - .github/scripts/check_people_model.py - .github/workflows/people-model.yml workflow_dispatch: diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 24fd273..227b299 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -48,7 +48,7 @@ pure-logic tests also run with plain `pytest` on a laptop. `OPENBLAS_NUM_THREADS=1`. - **No per-element Python objects at sensor rate.** rclpy builds one object per element of a message array (a Livox CustomMsg has ~20k points): read big messages as numpy straight from the - buffer (`PointCloud2.data`, or `raw=True` and the CDR bytes, see `robot_perception/livox_cdr.py`). + buffer (`PointCloud2.data`, or `raw=True` and the CDR bytes, see `pashupati_perception/livox_cdr.py`). - **Subscribe to heavy topics only while someone uses them** (the teleop camera and cloud). - **Validate everything from the network** (teleop UDP, NETRA commands, spool files): clamp numbers, reject non-finite values, keep file paths inside their directory, never raise in a diff --git a/README.md b/README.md index 4f327c3..051fdf2 100644 --- a/README.md +++ b/README.md @@ -132,11 +132,11 @@ flowchart LR | Package | Role | |---|---| -| [`robot_interfaces`](src/robot_interfaces) | messages and services | -| [`robot_odometry`](src/robot_odometry) | LiDAR-inertial odometry (FAST-LIO2 or Leg-KILO), stillness gate, odometry monitor, route recording | -| [`robot_localization`](src/robot_localization) | FAST-LIO frame bridge, `map→odom` from AprilTags / RViz, tag recording | -| [`robot_perception`](src/robot_perception) | LiDAR sectors, AprilTag, person detection (YOLO11n ONNX) | -| [`robot_navigation`](src/robot_navigation) | route processing, 5 controllers, 4 avoidance algorithms, final approach, safety | +| [`dharma_interfaces`](src/dharma_interfaces) | messages and services | +| [`dharma_odometry`](src/dharma_odometry) | LiDAR-inertial odometry (FAST-LIO2 or Leg-KILO), stillness gate, odometry monitor, route recording | +| [`dharma_localization`](src/dharma_localization) | FAST-LIO frame bridge, `map→odom` from AprilTags / RViz, tag recording | +| [`pashupati_perception`](src/pashupati_perception) | LiDAR sectors, AprilTag, person detection (YOLO11n ONNX) | +| [`dharma_navigation`](src/dharma_navigation) | route processing, 5 controllers, 4 avoidance algorithms, final approach, safety | | [`robot_bridge`](src/robot_bridge) | AUTO / REMOTE control mux, UDP teleop gateway ([protocol](src/robot_bridge/PROTOCOL.md)), WebRTC video | | [`robot_fleet`](src/robot_fleet) | NETRA uplink: telemetry, events, crowd, anomalies, routes ([API](src/robot_fleet/API.md)) | | [`robot_inspection`](src/robot_inspection) | VLM inspection (Ollama): continuous, interval queue or stop points, own finding types | @@ -255,7 +255,7 @@ pnode robot_bridge teleop_udp_node bridge_params.yaml # one node, as robot.lau **Start**), or by hand: ```bash -ros2 service call /navigation/load_path robot_interfaces/srv/LoadPath "{waypoints_file: '/home/robot/dev/Pashupati/map//