Venom is a 12-DOF unmanned quadruped (four-legged robot) equipped with 12 servo actuators and an ARM processor for onboard computation.
The quadruped uses sprawling-type motion, with creep and trot gaits implemented and tested.
Built as part of a research project in Legged Mobility at the Society of Robotics and Automation, VJTI.
- Most robots in industry rely on wheels for navigation. Venom's goal is legged mobility with multi-terrain capability beyond what wheeled or tracked vehicles can achieve.
- The aim is a system that can travel anywhere a person or animal could go on foot, carrying its own power and payload, and negotiating terrain with minimal human guidance.
Demo Video: VENOM — All-terrain Quadruped
The robot control code lives under src/Quadruped/:
| Module | Responsibility |
|---|---|
Quadruped.py |
Top-level Quadruped and Leg classes — configures servo IDs and leg geometry, and implements the gait state machines (Creep, Creep_w_bump, Trot, stanceBackward) driven through walk() / walkOnce() |
constants.py |
Per-gait tuning parameters (Creep, Trot classes: step height, stance limits, timing), gait-mode IDs (CREEP, TROT, TROT_BACK, CREEP_DYN), and link lengths used for kinematics |
Core/kinematics.py |
Inverse kinematics (getInverse) that converts a target foot position (x, y, z) into joint angles for each leg |
Core/pwmServo.py |
PWM servo driver interface (via the adafruit_servokit/PCA9685 stack) |
Core/IMU.py, Core/GPS.py |
Sensor interfaces for orientation and position — used by the CREEP_DYN gait to actively stabilize the base against terrain unevenness (feedback loop in Leg.StepInY_feedback) |
Core/kalman_filter.py |
Kalman filtering for sensor fusion |
Core/trajectory_fourier.py |
Fourier-based trajectory generation experiments |
Core/imu/ |
IMU calibration scripts and reference material (RTIMULib config, ellipsoid-fit MATLAB scripts for magnetometer calibration) |
Components/Gamepad.py |
Linux joystick (/dev/input/js*) input handling for manual teleoperation |
JGpio.py |
GPIO helper for bump-switch / digital I/O pins used in dynamic leg placement |
unit_Tests/ |
Standalone scripts for exercising individual servo angles (writeAngles.py, writeAllAngles0.py) |
Four gait modes are defined in constants.py and dispatched via Quadruped.walk(Mode):
CREEP— static creep gait, one leg moves at a timeTROT— diagonal-pair trot gaitTROT_BACK— reverse trotCREEP_DYN— creep gait with dynamic, IMU-feedback-driven leg placement for stability on uneven terrain (this is the mode used inQuadruped.py's own__main__)
from Quadruped import Quadruped
from constants import CREEP, TROT, CREEP_DYN
venom = Quadruped(servoId) # Servo ID array
venom.setParams(dirVector, FixedPoints) # Servo direction and fixed set points
venom.go2CreepStartPosition()
input("Press Enter") # Wait for user input
venom.walk(CREEP) # Static creep gait
venom.walk(TROT) # Trot gait
venom.walk(CREEP_DYN) # IMU-stabilized dynamic creep gait- Python 3.4+ on a Raspberry Pi (or similar single-board computer / ARM dev board).
git clone https://github.com/chinmaynehate/Venom.gitInstall dependencies:
python3 -m pip install numpy adafruit_servokit busio sympy- Jetson Nano (a Raspberry Pi will also work)
- Servo motors: 12x Dynamixel AX-12A or better, or any standard PWM servo (torque > 20 kg·cm)
- Alternate servos: coreless servo, 35 kg·cm
- PCA9685 16-channel PWM servo driver for PWM servos, or CM-530 Robotis servo controller for Dynamixel servos
- Acrylic chassis — CAD files available in
CAD Files/(Fusion 360.f3d: frame base/top, additional floor, Tibia side plate, end-effector)
| Chinmay Nehate | Suyash More | Shashank Deshmukh |
|---|---|---|
github.com/chinmaynehate |
github.com/SuyashMore |
github.com/shanks-d |
- How do I do specifically so and so?
- Create an issue on this repo — we'll respond to the query.


