SiMMER is a ROS 1 (catkin) project for a 6-legged mobile base with a manipulator. It contains two catkin packages:
lmm_model: robot description (URDF), meshes, Gazebo controllers, and simulation launch fileslmm_sc: supervisory control stack for real-time planning, joystick input handling, gait planning, redundancy resolution, and hardware servo output
Project background (from the original documentation):
- Version: 1.1
- Date: 26 February 2020
- Core ideas: Adaptive Stroke Length, Full Cycle Planning, optimization-based solving (SciPy
fsolve)
SiMMER/
├── README.md
├── lmm_model/
│ ├── urdf/lmm.urdf
│ ├── meshes/*.STL
│ ├── config/controllers.yaml
│ ├── launch/{display.launch,gazebo.launch}
│ └── src/joint_controller.py
└── lmm_sc/
├── launch/{start.launch,simulation.launch}
├── config/joints.yaml
└── src/
├── master.py
├── joy_incremental.py
├── motor_controller.py
├── tip_tf_broadcaster.py
└── modules/*.py
- Ubuntu with ROS 1 (catkin-based setup)
- Python for ROS
rospynodes
catkinroscpprospysensor_msgsstd_msgsrobot_state_publisherjoint_state_publisherrvizgazebo/gazebo_roscontroller_managerjoyi2cpwm_board(required for hardware motor output path)
numpyscipy(for optimization-based solver paths)rospkgyaml- ROS TF libraries (
tf2_ros, TF messages)
- Create a catkin workspace (if you do not already have one):
mkdir -p ~/catkin_ws/srccd ~/catkin_ws/src
- Place this repository in
~/catkin_ws/src/SiMMER. - Build:
cd ~/catkin_wscatkin_make
- Source:
source devel/setup.bash
Note: In this repository snapshot,
catkin_makeavailability depends on your ROS installation and shell environment.
Run:
roslaunch lmm_model display.launch
This starts:
joint_state_publisherrobot_state_publisherrvizwithlmm_model/rviz/lmm.rviz
Run:
roslaunch lmm_sc simulation.launch
This launches Gazebo, spawns the model, loads controllers, and starts:
- joystick input node
- TF tip broadcaster
- supervisory controller (
master.py) - simulation joint command bridge (
lmm_model/src/joint_controller.py)
Run:
roslaunch lmm_sc start.launch
This runs:
- joystick input
- supervisory controller
- motor controller (
motor_controller.py) publishingServoArraytoservos_absolute i2cpwm_boardnode for PWM/servo output
Central real-time supervisory control node:
- subscribes to incremental end-effector commands (
lmm_incremental_inputs) - performs redundancy handling and inverse kinematics
- plans trunk-body and leg-tip trajectories when base motion is required
- publishes complete robot joint states (
lmm_joint_states) - logs runtime data to
lmm_sc/data/<timestamp>.csv
- subscribes to
joy(sensor_msgs/Joy) - maps joystick axes to Cartesian incremental commands
- publishes
lmm_incremental_inputs(Float32MultiArray)
- subscribes to
lmm_joint_states - maps joint angles to servo board input values using
lmm_sc/config/joints.yaml - publishes
servos_absolute(i2cpwm_board/ServoArray)
- simulation bridge node
- subscribes to
lmm_joint_states - republishes each joint command to Gazebo controllers under
/lmm/*_position_controller/command
- publishes tip transforms for all six legs and the end-effector tip on
/tf
joy(sensor_msgs/Joy) -> joystick inputlmm_incremental_inputs(std_msgs/Float32MultiArray) -> Cartesian incrementslmm_joint_states(sensor_msgs/JointState) -> planned joint commands/state/lmm/.../command(std_msgs/Float64) -> Gazebo controller commandsservos_absolute(i2cpwm_board/ServoArray) -> hardware servo outputs
-
lmm_sc/src/modules/inputs.py- kinematic dimensions
- initial trunk/end-effector pose
- timing (
f_in,T_in,T_stroke) - manipulability thresholds and optimization bounds
-
lmm_sc/config/joints.yaml- per-joint servo calibration:
- servo channel
- min/max joint angles
- min/max board input values
- axis direction multiplier
- per-joint servo calibration:
-
lmm_model/config/controllers.yaml- Gazebo effort position controllers and PID gains
master.py automatically logs runtime data rows to:
lmm_sc/data/<YYYY_MM_DD__HH_MM_SS>.csv
Logged values include time, input increments, end-effector and trunk position terms, manipulability indicator, stroke length, and selected joint angles.
- This project is ROS 1/catkin oriented.
- Some package metadata is still template/default (for example,
lmm_sc/package.xmllicense field isTODO). - The repository contains both simulation and hardware pathways; choose launch files accordingly.