Package Summary
| Version | 0.1.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/mangdangroboticsclub/mini_pupper_ros.git |
| VCS Type | git |
| VCS Version | ros2-dev |
| Last Updated | 2026-05-30 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- MangDang
Authors
- cullensun
mini_pupper_hardware
ROS 2 ros2_control hardware interface plugin for the Mini Pupper 2 quadruped robot.
For a full description of the ros2_control architecture and data flow, see docs/ros2-control-architecture.md.
Socket protocol (BB12B12H)
38-byte packet sent to /tmp/esp32-proxy.socket (SOCK_SEQPACKET):
| Bytes | Format | Content |
|---|---|---|
| 0 | B |
Packet size = 38 |
| 1 | B |
Command = 1 (SETPOS) |
| 2–13 | 12B |
Torque enable per servo (uint8, 1 = enabled) |
| 14–37 | 12H |
Servo positions, uint16 little-endian (0–1023, neutral = 512) |
Servo layout
| Index | Joint | Leg |
|---|---|---|
| 0–2 | abd, hip, knee_abs | RF (right front) |
| 3–5 | abd, hip, knee_abs | LF (left front) |
| 6–8 | abd, hip, knee_abs | RB (right back) |
| 9–11 | abd, hip, knee_abs | LB (left back) |
knee_abs = hip_angle + knee_angle (absolute, not relative to hip).
Angle → servo conversion
servo = 512 − MICROS_PER_RAD × (angle − neutral_angle) × multiplier
MICROS_PER_RAD = (760 − 210) / π ≈ 175.07
Neutral angles and per-axis/per-leg multipliers are defined in
include/mini_pupper_hardware/mini_pupper_hardware.hpp.
Building
cd ~/ros2_ws
colcon build --packages-select mini_pupper_hardware
source install/setup.bash
Running
ros2 launch mini_pupper_bringup bringup.launch.py
Set hardware_interface_type: mock in the URDF <ros2_control> block to run
without a physical robot.
Hardware diagnostic tests
The test/ directory contains standalone diagnostic scripts that run directly
on the robot without ROS 2. See test/README.md.
Troubleshooting
| Symptom | Check |
|---|---|
| Plugin not found |
colcon build, then source install/setup.bash
|
| Servos not moving | Is esp32-proxy running? Does /tmp/esp32-proxy.socket exist? |
| Wrong standing pose | Check default_positions in mini_pupper_2_controllers.yaml — knee values must be knee_abs (absolute angle from IK ≈ −0.774 at default_z_ref=-0.07), not the raw inter-link angle |
| Front/rear leg mismatch | Check SERVO_MULTIPLIERS abduction row in mini_pupper_hardware.hpp
|
License
Apache License 2.0
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_cmake_gtest | |
| ament_lint_auto | |
| ament_lint_common | |
| hardware_interface | |
| pluginlib | |
| rclcpp | |
| rclcpp_lifecycle | |
| controller_manager |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged mini_pupper_hardware at Robotics Stack Exchange
Package Summary
| Version | 0.1.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/mangdangroboticsclub/mini_pupper_ros.git |
| VCS Type | git |
| VCS Version | ros2-dev |
| Last Updated | 2026-05-30 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- MangDang
Authors
- cullensun
mini_pupper_hardware
ROS 2 ros2_control hardware interface plugin for the Mini Pupper 2 quadruped robot.
For a full description of the ros2_control architecture and data flow, see docs/ros2-control-architecture.md.
Socket protocol (BB12B12H)
38-byte packet sent to /tmp/esp32-proxy.socket (SOCK_SEQPACKET):
| Bytes | Format | Content |
|---|---|---|
| 0 | B |
Packet size = 38 |
| 1 | B |
Command = 1 (SETPOS) |
| 2–13 | 12B |
Torque enable per servo (uint8, 1 = enabled) |
| 14–37 | 12H |
Servo positions, uint16 little-endian (0–1023, neutral = 512) |
Servo layout
| Index | Joint | Leg |
|---|---|---|
| 0–2 | abd, hip, knee_abs | RF (right front) |
| 3–5 | abd, hip, knee_abs | LF (left front) |
| 6–8 | abd, hip, knee_abs | RB (right back) |
| 9–11 | abd, hip, knee_abs | LB (left back) |
knee_abs = hip_angle + knee_angle (absolute, not relative to hip).
Angle → servo conversion
servo = 512 − MICROS_PER_RAD × (angle − neutral_angle) × multiplier
MICROS_PER_RAD = (760 − 210) / π ≈ 175.07
Neutral angles and per-axis/per-leg multipliers are defined in
include/mini_pupper_hardware/mini_pupper_hardware.hpp.
Building
cd ~/ros2_ws
colcon build --packages-select mini_pupper_hardware
source install/setup.bash
Running
ros2 launch mini_pupper_bringup bringup.launch.py
Set hardware_interface_type: mock in the URDF <ros2_control> block to run
without a physical robot.
Hardware diagnostic tests
The test/ directory contains standalone diagnostic scripts that run directly
on the robot without ROS 2. See test/README.md.
Troubleshooting
| Symptom | Check |
|---|---|
| Plugin not found |
colcon build, then source install/setup.bash
|
| Servos not moving | Is esp32-proxy running? Does /tmp/esp32-proxy.socket exist? |
| Wrong standing pose | Check default_positions in mini_pupper_2_controllers.yaml — knee values must be knee_abs (absolute angle from IK ≈ −0.774 at default_z_ref=-0.07), not the raw inter-link angle |
| Front/rear leg mismatch | Check SERVO_MULTIPLIERS abduction row in mini_pupper_hardware.hpp
|
License
Apache License 2.0
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_cmake_gtest | |
| ament_lint_auto | |
| ament_lint_common | |
| hardware_interface | |
| pluginlib | |
| rclcpp | |
| rclcpp_lifecycle | |
| controller_manager |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged mini_pupper_hardware at Robotics Stack Exchange
Package Summary
| Version | 0.1.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/mangdangroboticsclub/mini_pupper_ros.git |
| VCS Type | git |
| VCS Version | ros2-dev |
| Last Updated | 2026-05-30 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- MangDang
Authors
- cullensun
mini_pupper_hardware
ROS 2 ros2_control hardware interface plugin for the Mini Pupper 2 quadruped robot.
For a full description of the ros2_control architecture and data flow, see docs/ros2-control-architecture.md.
Socket protocol (BB12B12H)
38-byte packet sent to /tmp/esp32-proxy.socket (SOCK_SEQPACKET):
| Bytes | Format | Content |
|---|---|---|
| 0 | B |
Packet size = 38 |
| 1 | B |
Command = 1 (SETPOS) |
| 2–13 | 12B |
Torque enable per servo (uint8, 1 = enabled) |
| 14–37 | 12H |
Servo positions, uint16 little-endian (0–1023, neutral = 512) |
Servo layout
| Index | Joint | Leg |
|---|---|---|
| 0–2 | abd, hip, knee_abs | RF (right front) |
| 3–5 | abd, hip, knee_abs | LF (left front) |
| 6–8 | abd, hip, knee_abs | RB (right back) |
| 9–11 | abd, hip, knee_abs | LB (left back) |
knee_abs = hip_angle + knee_angle (absolute, not relative to hip).
Angle → servo conversion
servo = 512 − MICROS_PER_RAD × (angle − neutral_angle) × multiplier
MICROS_PER_RAD = (760 − 210) / π ≈ 175.07
Neutral angles and per-axis/per-leg multipliers are defined in
include/mini_pupper_hardware/mini_pupper_hardware.hpp.
Building
cd ~/ros2_ws
colcon build --packages-select mini_pupper_hardware
source install/setup.bash
Running
ros2 launch mini_pupper_bringup bringup.launch.py
Set hardware_interface_type: mock in the URDF <ros2_control> block to run
without a physical robot.
Hardware diagnostic tests
The test/ directory contains standalone diagnostic scripts that run directly
on the robot without ROS 2. See test/README.md.
Troubleshooting
| Symptom | Check |
|---|---|
| Plugin not found |
colcon build, then source install/setup.bash
|
| Servos not moving | Is esp32-proxy running? Does /tmp/esp32-proxy.socket exist? |
| Wrong standing pose | Check default_positions in mini_pupper_2_controllers.yaml — knee values must be knee_abs (absolute angle from IK ≈ −0.774 at default_z_ref=-0.07), not the raw inter-link angle |
| Front/rear leg mismatch | Check SERVO_MULTIPLIERS abduction row in mini_pupper_hardware.hpp
|
License
Apache License 2.0
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_cmake_gtest | |
| ament_lint_auto | |
| ament_lint_common | |
| hardware_interface | |
| pluginlib | |
| rclcpp | |
| rclcpp_lifecycle | |
| controller_manager |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged mini_pupper_hardware at Robotics Stack Exchange
Package Summary
| Version | 0.1.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/mangdangroboticsclub/mini_pupper_ros.git |
| VCS Type | git |
| VCS Version | ros2-dev |
| Last Updated | 2026-05-30 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- MangDang
Authors
- cullensun
mini_pupper_hardware
ROS 2 ros2_control hardware interface plugin for the Mini Pupper 2 quadruped robot.
For a full description of the ros2_control architecture and data flow, see docs/ros2-control-architecture.md.
Socket protocol (BB12B12H)
38-byte packet sent to /tmp/esp32-proxy.socket (SOCK_SEQPACKET):
| Bytes | Format | Content |
|---|---|---|
| 0 | B |
Packet size = 38 |
| 1 | B |
Command = 1 (SETPOS) |
| 2–13 | 12B |
Torque enable per servo (uint8, 1 = enabled) |
| 14–37 | 12H |
Servo positions, uint16 little-endian (0–1023, neutral = 512) |
Servo layout
| Index | Joint | Leg |
|---|---|---|
| 0–2 | abd, hip, knee_abs | RF (right front) |
| 3–5 | abd, hip, knee_abs | LF (left front) |
| 6–8 | abd, hip, knee_abs | RB (right back) |
| 9–11 | abd, hip, knee_abs | LB (left back) |
knee_abs = hip_angle + knee_angle (absolute, not relative to hip).
Angle → servo conversion
servo = 512 − MICROS_PER_RAD × (angle − neutral_angle) × multiplier
MICROS_PER_RAD = (760 − 210) / π ≈ 175.07
Neutral angles and per-axis/per-leg multipliers are defined in
include/mini_pupper_hardware/mini_pupper_hardware.hpp.
Building
cd ~/ros2_ws
colcon build --packages-select mini_pupper_hardware
source install/setup.bash
Running
ros2 launch mini_pupper_bringup bringup.launch.py
Set hardware_interface_type: mock in the URDF <ros2_control> block to run
without a physical robot.
Hardware diagnostic tests
The test/ directory contains standalone diagnostic scripts that run directly
on the robot without ROS 2. See test/README.md.
Troubleshooting
| Symptom | Check |
|---|---|
| Plugin not found |
colcon build, then source install/setup.bash
|
| Servos not moving | Is esp32-proxy running? Does /tmp/esp32-proxy.socket exist? |
| Wrong standing pose | Check default_positions in mini_pupper_2_controllers.yaml — knee values must be knee_abs (absolute angle from IK ≈ −0.774 at default_z_ref=-0.07), not the raw inter-link angle |
| Front/rear leg mismatch | Check SERVO_MULTIPLIERS abduction row in mini_pupper_hardware.hpp
|
License
Apache License 2.0
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_cmake_gtest | |
| ament_lint_auto | |
| ament_lint_common | |
| hardware_interface | |
| pluginlib | |
| rclcpp | |
| rclcpp_lifecycle | |
| controller_manager |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged mini_pupper_hardware at Robotics Stack Exchange
Package Summary
| Version | 0.1.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/mangdangroboticsclub/mini_pupper_ros.git |
| VCS Type | git |
| VCS Version | ros2-dev |
| Last Updated | 2026-05-30 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- MangDang
Authors
- cullensun
mini_pupper_hardware
ROS 2 ros2_control hardware interface plugin for the Mini Pupper 2 quadruped robot.
For a full description of the ros2_control architecture and data flow, see docs/ros2-control-architecture.md.
Socket protocol (BB12B12H)
38-byte packet sent to /tmp/esp32-proxy.socket (SOCK_SEQPACKET):
| Bytes | Format | Content |
|---|---|---|
| 0 | B |
Packet size = 38 |
| 1 | B |
Command = 1 (SETPOS) |
| 2–13 | 12B |
Torque enable per servo (uint8, 1 = enabled) |
| 14–37 | 12H |
Servo positions, uint16 little-endian (0–1023, neutral = 512) |
Servo layout
| Index | Joint | Leg |
|---|---|---|
| 0–2 | abd, hip, knee_abs | RF (right front) |
| 3–5 | abd, hip, knee_abs | LF (left front) |
| 6–8 | abd, hip, knee_abs | RB (right back) |
| 9–11 | abd, hip, knee_abs | LB (left back) |
knee_abs = hip_angle + knee_angle (absolute, not relative to hip).
Angle → servo conversion
servo = 512 − MICROS_PER_RAD × (angle − neutral_angle) × multiplier
MICROS_PER_RAD = (760 − 210) / π ≈ 175.07
Neutral angles and per-axis/per-leg multipliers are defined in
include/mini_pupper_hardware/mini_pupper_hardware.hpp.
Building
cd ~/ros2_ws
colcon build --packages-select mini_pupper_hardware
source install/setup.bash
Running
ros2 launch mini_pupper_bringup bringup.launch.py
Set hardware_interface_type: mock in the URDF <ros2_control> block to run
without a physical robot.
Hardware diagnostic tests
The test/ directory contains standalone diagnostic scripts that run directly
on the robot without ROS 2. See test/README.md.
Troubleshooting
| Symptom | Check |
|---|---|
| Plugin not found |
colcon build, then source install/setup.bash
|
| Servos not moving | Is esp32-proxy running? Does /tmp/esp32-proxy.socket exist? |
| Wrong standing pose | Check default_positions in mini_pupper_2_controllers.yaml — knee values must be knee_abs (absolute angle from IK ≈ −0.774 at default_z_ref=-0.07), not the raw inter-link angle |
| Front/rear leg mismatch | Check SERVO_MULTIPLIERS abduction row in mini_pupper_hardware.hpp
|
License
Apache License 2.0
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_cmake_gtest | |
| ament_lint_auto | |
| ament_lint_common | |
| hardware_interface | |
| pluginlib | |
| rclcpp | |
| rclcpp_lifecycle | |
| controller_manager |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged mini_pupper_hardware at Robotics Stack Exchange
Package Summary
| Version | 0.1.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/mangdangroboticsclub/mini_pupper_ros.git |
| VCS Type | git |
| VCS Version | ros2-dev |
| Last Updated | 2026-05-30 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- MangDang
Authors
- cullensun
mini_pupper_hardware
ROS 2 ros2_control hardware interface plugin for the Mini Pupper 2 quadruped robot.
For a full description of the ros2_control architecture and data flow, see docs/ros2-control-architecture.md.
Socket protocol (BB12B12H)
38-byte packet sent to /tmp/esp32-proxy.socket (SOCK_SEQPACKET):
| Bytes | Format | Content |
|---|---|---|
| 0 | B |
Packet size = 38 |
| 1 | B |
Command = 1 (SETPOS) |
| 2–13 | 12B |
Torque enable per servo (uint8, 1 = enabled) |
| 14–37 | 12H |
Servo positions, uint16 little-endian (0–1023, neutral = 512) |
Servo layout
| Index | Joint | Leg |
|---|---|---|
| 0–2 | abd, hip, knee_abs | RF (right front) |
| 3–5 | abd, hip, knee_abs | LF (left front) |
| 6–8 | abd, hip, knee_abs | RB (right back) |
| 9–11 | abd, hip, knee_abs | LB (left back) |
knee_abs = hip_angle + knee_angle (absolute, not relative to hip).
Angle → servo conversion
servo = 512 − MICROS_PER_RAD × (angle − neutral_angle) × multiplier
MICROS_PER_RAD = (760 − 210) / π ≈ 175.07
Neutral angles and per-axis/per-leg multipliers are defined in
include/mini_pupper_hardware/mini_pupper_hardware.hpp.
Building
cd ~/ros2_ws
colcon build --packages-select mini_pupper_hardware
source install/setup.bash
Running
ros2 launch mini_pupper_bringup bringup.launch.py
Set hardware_interface_type: mock in the URDF <ros2_control> block to run
without a physical robot.
Hardware diagnostic tests
The test/ directory contains standalone diagnostic scripts that run directly
on the robot without ROS 2. See test/README.md.
Troubleshooting
| Symptom | Check |
|---|---|
| Plugin not found |
colcon build, then source install/setup.bash
|
| Servos not moving | Is esp32-proxy running? Does /tmp/esp32-proxy.socket exist? |
| Wrong standing pose | Check default_positions in mini_pupper_2_controllers.yaml — knee values must be knee_abs (absolute angle from IK ≈ −0.774 at default_z_ref=-0.07), not the raw inter-link angle |
| Front/rear leg mismatch | Check SERVO_MULTIPLIERS abduction row in mini_pupper_hardware.hpp
|
License
Apache License 2.0
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_cmake_gtest | |
| ament_lint_auto | |
| ament_lint_common | |
| hardware_interface | |
| pluginlib | |
| rclcpp | |
| rclcpp_lifecycle | |
| controller_manager |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged mini_pupper_hardware at Robotics Stack Exchange
Package Summary
| Version | 0.1.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/mangdangroboticsclub/mini_pupper_ros.git |
| VCS Type | git |
| VCS Version | ros2-dev |
| Last Updated | 2026-05-30 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- MangDang
Authors
- cullensun
mini_pupper_hardware
ROS 2 ros2_control hardware interface plugin for the Mini Pupper 2 quadruped robot.
For a full description of the ros2_control architecture and data flow, see docs/ros2-control-architecture.md.
Socket protocol (BB12B12H)
38-byte packet sent to /tmp/esp32-proxy.socket (SOCK_SEQPACKET):
| Bytes | Format | Content |
|---|---|---|
| 0 | B |
Packet size = 38 |
| 1 | B |
Command = 1 (SETPOS) |
| 2–13 | 12B |
Torque enable per servo (uint8, 1 = enabled) |
| 14–37 | 12H |
Servo positions, uint16 little-endian (0–1023, neutral = 512) |
Servo layout
| Index | Joint | Leg |
|---|---|---|
| 0–2 | abd, hip, knee_abs | RF (right front) |
| 3–5 | abd, hip, knee_abs | LF (left front) |
| 6–8 | abd, hip, knee_abs | RB (right back) |
| 9–11 | abd, hip, knee_abs | LB (left back) |
knee_abs = hip_angle + knee_angle (absolute, not relative to hip).
Angle → servo conversion
servo = 512 − MICROS_PER_RAD × (angle − neutral_angle) × multiplier
MICROS_PER_RAD = (760 − 210) / π ≈ 175.07
Neutral angles and per-axis/per-leg multipliers are defined in
include/mini_pupper_hardware/mini_pupper_hardware.hpp.
Building
cd ~/ros2_ws
colcon build --packages-select mini_pupper_hardware
source install/setup.bash
Running
ros2 launch mini_pupper_bringup bringup.launch.py
Set hardware_interface_type: mock in the URDF <ros2_control> block to run
without a physical robot.
Hardware diagnostic tests
The test/ directory contains standalone diagnostic scripts that run directly
on the robot without ROS 2. See test/README.md.
Troubleshooting
| Symptom | Check |
|---|---|
| Plugin not found |
colcon build, then source install/setup.bash
|
| Servos not moving | Is esp32-proxy running? Does /tmp/esp32-proxy.socket exist? |
| Wrong standing pose | Check default_positions in mini_pupper_2_controllers.yaml — knee values must be knee_abs (absolute angle from IK ≈ −0.774 at default_z_ref=-0.07), not the raw inter-link angle |
| Front/rear leg mismatch | Check SERVO_MULTIPLIERS abduction row in mini_pupper_hardware.hpp
|
License
Apache License 2.0
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_cmake_gtest | |
| ament_lint_auto | |
| ament_lint_common | |
| hardware_interface | |
| pluginlib | |
| rclcpp | |
| rclcpp_lifecycle | |
| controller_manager |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged mini_pupper_hardware at Robotics Stack Exchange
Package Summary
| Version | 0.1.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/mangdangroboticsclub/mini_pupper_ros.git |
| VCS Type | git |
| VCS Version | ros2-dev |
| Last Updated | 2026-05-30 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- MangDang
Authors
- cullensun
mini_pupper_hardware
ROS 2 ros2_control hardware interface plugin for the Mini Pupper 2 quadruped robot.
For a full description of the ros2_control architecture and data flow, see docs/ros2-control-architecture.md.
Socket protocol (BB12B12H)
38-byte packet sent to /tmp/esp32-proxy.socket (SOCK_SEQPACKET):
| Bytes | Format | Content |
|---|---|---|
| 0 | B |
Packet size = 38 |
| 1 | B |
Command = 1 (SETPOS) |
| 2–13 | 12B |
Torque enable per servo (uint8, 1 = enabled) |
| 14–37 | 12H |
Servo positions, uint16 little-endian (0–1023, neutral = 512) |
Servo layout
| Index | Joint | Leg |
|---|---|---|
| 0–2 | abd, hip, knee_abs | RF (right front) |
| 3–5 | abd, hip, knee_abs | LF (left front) |
| 6–8 | abd, hip, knee_abs | RB (right back) |
| 9–11 | abd, hip, knee_abs | LB (left back) |
knee_abs = hip_angle + knee_angle (absolute, not relative to hip).
Angle → servo conversion
servo = 512 − MICROS_PER_RAD × (angle − neutral_angle) × multiplier
MICROS_PER_RAD = (760 − 210) / π ≈ 175.07
Neutral angles and per-axis/per-leg multipliers are defined in
include/mini_pupper_hardware/mini_pupper_hardware.hpp.
Building
cd ~/ros2_ws
colcon build --packages-select mini_pupper_hardware
source install/setup.bash
Running
ros2 launch mini_pupper_bringup bringup.launch.py
Set hardware_interface_type: mock in the URDF <ros2_control> block to run
without a physical robot.
Hardware diagnostic tests
The test/ directory contains standalone diagnostic scripts that run directly
on the robot without ROS 2. See test/README.md.
Troubleshooting
| Symptom | Check |
|---|---|
| Plugin not found |
colcon build, then source install/setup.bash
|
| Servos not moving | Is esp32-proxy running? Does /tmp/esp32-proxy.socket exist? |
| Wrong standing pose | Check default_positions in mini_pupper_2_controllers.yaml — knee values must be knee_abs (absolute angle from IK ≈ −0.774 at default_z_ref=-0.07), not the raw inter-link angle |
| Front/rear leg mismatch | Check SERVO_MULTIPLIERS abduction row in mini_pupper_hardware.hpp
|
License
Apache License 2.0
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_cmake_gtest | |
| ament_lint_auto | |
| ament_lint_common | |
| hardware_interface | |
| pluginlib | |
| rclcpp | |
| rclcpp_lifecycle | |
| controller_manager |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged mini_pupper_hardware at Robotics Stack Exchange
Package Summary
| Version | 0.1.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/mangdangroboticsclub/mini_pupper_ros.git |
| VCS Type | git |
| VCS Version | ros2-dev |
| Last Updated | 2026-05-30 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- MangDang
Authors
- cullensun
mini_pupper_hardware
ROS 2 ros2_control hardware interface plugin for the Mini Pupper 2 quadruped robot.
For a full description of the ros2_control architecture and data flow, see docs/ros2-control-architecture.md.
Socket protocol (BB12B12H)
38-byte packet sent to /tmp/esp32-proxy.socket (SOCK_SEQPACKET):
| Bytes | Format | Content |
|---|---|---|
| 0 | B |
Packet size = 38 |
| 1 | B |
Command = 1 (SETPOS) |
| 2–13 | 12B |
Torque enable per servo (uint8, 1 = enabled) |
| 14–37 | 12H |
Servo positions, uint16 little-endian (0–1023, neutral = 512) |
Servo layout
| Index | Joint | Leg |
|---|---|---|
| 0–2 | abd, hip, knee_abs | RF (right front) |
| 3–5 | abd, hip, knee_abs | LF (left front) |
| 6–8 | abd, hip, knee_abs | RB (right back) |
| 9–11 | abd, hip, knee_abs | LB (left back) |
knee_abs = hip_angle + knee_angle (absolute, not relative to hip).
Angle → servo conversion
servo = 512 − MICROS_PER_RAD × (angle − neutral_angle) × multiplier
MICROS_PER_RAD = (760 − 210) / π ≈ 175.07
Neutral angles and per-axis/per-leg multipliers are defined in
include/mini_pupper_hardware/mini_pupper_hardware.hpp.
Building
cd ~/ros2_ws
colcon build --packages-select mini_pupper_hardware
source install/setup.bash
Running
ros2 launch mini_pupper_bringup bringup.launch.py
Set hardware_interface_type: mock in the URDF <ros2_control> block to run
without a physical robot.
Hardware diagnostic tests
The test/ directory contains standalone diagnostic scripts that run directly
on the robot without ROS 2. See test/README.md.
Troubleshooting
| Symptom | Check |
|---|---|
| Plugin not found |
colcon build, then source install/setup.bash
|
| Servos not moving | Is esp32-proxy running? Does /tmp/esp32-proxy.socket exist? |
| Wrong standing pose | Check default_positions in mini_pupper_2_controllers.yaml — knee values must be knee_abs (absolute angle from IK ≈ −0.774 at default_z_ref=-0.07), not the raw inter-link angle |
| Front/rear leg mismatch | Check SERVO_MULTIPLIERS abduction row in mini_pupper_hardware.hpp
|
License
Apache License 2.0
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_cmake_gtest | |
| ament_lint_auto | |
| ament_lint_common | |
| hardware_interface | |
| pluginlib | |
| rclcpp | |
| rclcpp_lifecycle | |
| controller_manager |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged mini_pupper_hardware at Robotics Stack Exchange
Package Summary
| Version | 0.1.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/mangdangroboticsclub/mini_pupper_ros.git |
| VCS Type | git |
| VCS Version | ros2-dev |
| Last Updated | 2026-05-30 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- MangDang
Authors
- cullensun
mini_pupper_hardware
ROS 2 ros2_control hardware interface plugin for the Mini Pupper 2 quadruped robot.
For a full description of the ros2_control architecture and data flow, see docs/ros2-control-architecture.md.
Socket protocol (BB12B12H)
38-byte packet sent to /tmp/esp32-proxy.socket (SOCK_SEQPACKET):
| Bytes | Format | Content |
|---|---|---|
| 0 | B |
Packet size = 38 |
| 1 | B |
Command = 1 (SETPOS) |
| 2–13 | 12B |
Torque enable per servo (uint8, 1 = enabled) |
| 14–37 | 12H |
Servo positions, uint16 little-endian (0–1023, neutral = 512) |
Servo layout
| Index | Joint | Leg |
|---|---|---|
| 0–2 | abd, hip, knee_abs | RF (right front) |
| 3–5 | abd, hip, knee_abs | LF (left front) |
| 6–8 | abd, hip, knee_abs | RB (right back) |
| 9–11 | abd, hip, knee_abs | LB (left back) |
knee_abs = hip_angle + knee_angle (absolute, not relative to hip).
Angle → servo conversion
servo = 512 − MICROS_PER_RAD × (angle − neutral_angle) × multiplier
MICROS_PER_RAD = (760 − 210) / π ≈ 175.07
Neutral angles and per-axis/per-leg multipliers are defined in
include/mini_pupper_hardware/mini_pupper_hardware.hpp.
Building
cd ~/ros2_ws
colcon build --packages-select mini_pupper_hardware
source install/setup.bash
Running
ros2 launch mini_pupper_bringup bringup.launch.py
Set hardware_interface_type: mock in the URDF <ros2_control> block to run
without a physical robot.
Hardware diagnostic tests
The test/ directory contains standalone diagnostic scripts that run directly
on the robot without ROS 2. See test/README.md.
Troubleshooting
| Symptom | Check |
|---|---|
| Plugin not found |
colcon build, then source install/setup.bash
|
| Servos not moving | Is esp32-proxy running? Does /tmp/esp32-proxy.socket exist? |
| Wrong standing pose | Check default_positions in mini_pupper_2_controllers.yaml — knee values must be knee_abs (absolute angle from IK ≈ −0.774 at default_z_ref=-0.07), not the raw inter-link angle |
| Front/rear leg mismatch | Check SERVO_MULTIPLIERS abduction row in mini_pupper_hardware.hpp
|
License
Apache License 2.0
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_cmake_gtest | |
| ament_lint_auto | |
| ament_lint_common | |
| hardware_interface | |
| pluginlib | |
| rclcpp | |
| rclcpp_lifecycle | |
| controller_manager |