This repository contains source code, mechanical parts, and printed circuit boards for Str1ker drumming robot.
Striker is a human-scale teleoperated mech built with metal casting, CNC machining, 3D printing, sheet metal parts, tube frame chassis, and pre-made components.
This open-source educational project features custom electronics and Robot Operating System integration, demonstrating how to design and build a large robot that combines mobility, sensing, and manipulation.
The robot moves on a mecanum base, articulates its head and arms, and visualizes live lidar and RGB-D perception in Robot Visualization tool (RViz).
The arms terminate in percussive end-effectors, designed for future live drum performance.
More details on my blog and media on instagram. Say hello at the next Portland Area Robotics Society monthly meetup!
Autodesk Inventor mechanical parts available in ./cad.
KiCad schematics and boards available in ./boards.
The arms were cast out of Aluminum 356 in the metal foundry at Ctrl^H Hackerspace and welded together by skorndaap, then polished.
Tube frame chassis welding by skorndaap.
The CNC, sheet metal, tube frame, and 3D-printed parts were ordered from Xometry online service.
The PCB's were ordered from JLCPCB using JLCPCB KiCad plugin.
Pre-made components sourced from GoBilda, Pololu, McMaster-Carr, Robot Shop, and Amazon.
- Ubuntu 20.04
- ROS Noetic
- MoveIt
- ROS Control
- Inverse Kinematics solver
- PID controller
- ROS and ROS Serial nodes
- Teensy 4.0 MCUs for arms, body and legs
- Weidian industrial mini PC for high-level control
- Intel NUC 11 for teleoperation & simulation
The high-level controllers (Ubuntu 20.04/ROS Noetic) can run on any mini PC, NUC, a low-end Single Board Computer (SBC) like Raspberry Pi or a high-end SBC like Latte Panda 3 Delta.
The low-level serial nodes that run motors and sensors were designed for Arduino Mega, and are currently being ported to Teensy 4.0 because its more powerful specs make it a better choice for robotics.
Teleoperation and simulation requires 3D visualization software like RViz and Gazebo, which like NVidia cards.
Follow the official guide to install ROS Noetic and configure the ROS environment.
Clone the projects:
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
git clone https://github.com/01binary/str1ker.git
git clone https://github.com/01binary/str1ker_moveit_config.git
cd ./str1ker
git sparse-checkout init --cone
git sparse-checkout set .vscode src config launch description msg
Follow the official guide to build MoveIt from source using catkin_ws as the workspace name instead of moveit_ws.
Prepare Gazebo plugins to be built from source:
cd ~/catkin_ws/src
git clone https://github.com/roboticsgroup/roboticsgroup_gazebo_plugins
cd ~/catkin_ws/src
rosdep install -y --from-paths . --ignore-src --rosdistro noetic
To invoke the build command while in ~/catkin_ws use catkin_make with no parameters. Otherwise use -C to specify the workspace directory:
catkin_make -C ~/catkin_ws
To build only this package and its dependencies:
catkin_make --only-pkg-with-deps str1ker
To build only this package:
catkin_make --pkg str1ker
To clear the build filter:
catkin_make -DCATKIN_WHITELIST_PACKAGES=""
To switch between Debug and Release
catkin_make -DCMAKE_BUILD_TYPE=Debug | Release
One-time setup after the first build.
catkin_make install
source /opt/ros/noetic/setup.bash
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
The low-level hardware is handled by an Arduino ROS node in src/drivers/arm.ino.
To build it, first generate ROS message headers for Arduino:
sudo apt-get install ros-${ROS_DISTRO}-rosserial-arduino
sudo apt-get install ros-${ROS_DISTRO}-rosserial
rosrun rosserial_arduino make_libraries.py ~/Arduino/libraries
If you installed Arduino IDE as a snap plugin, Arduino libraries are likely in
~/snap/arduino(the exact location is specific to your system).
Compile and upload the ROS node. The default launch configuration in robot.launch will connect to /dev/ttyACM0 automatically.
This workspace includes VSCode tasks for compiling and uploading the Teensy firmware without Arduino IDE 2.
Install arduino-cli:
curl -fsSL https://raw.githubusercontent.com/arduino/arduino-cli/master/install.sh | BINDIR="$HOME/.local/bin" sh
arduino-cli versionThen in VSCode:
- Open the Command Palette and run
C/C++: Select a Configuration... - Pick
Arduino Teensy 4.0 - Run
Tasks: Run Task - Use
Arduino: Compile ArmorArduino: Upload Arm
The checked-in VSCode configuration targets teensy:avr:teensy40 on /dev/ttyACM0 and uses the PJRC package index through .vscode/arduino-cli.yaml.
To launch only the serial bridge to the arm firmware:
roslaunch str1ker hardware.launch
To launch ROS control nodes (URDF + controllers + state publisher):
roslaunch str1ker controllers.launch
To launch both high-level and low-level nodes:
roslaunch str1ker robot.launch
To launch Carmine with OpenNI2 (recommended on ROS Noetic):
roslaunch str1ker vision.launch
To use legacy OpenNI instead:
roslaunch str1ker vision.launch use_openni2:=false
Install the Hokuyo ROS driver:
sudo apt-get install -y ros-${ROS_DISTRO}-urg-node
The default launch path uses the stable built-in udev symlink under /dev/serial/by-id.
If you still want a custom short alias (for example /dev/str1ker_laser), create one with:
# Example when Hokuyo appears as /dev/ttyACM0
./scripts/alias.sh /dev/ttyACM0 str1ker_laser --install
To launch the laser scanner driver:
roslaunch str1ker laserscan.launch
If you want to bypass by-id and use the current kernel device path:
roslaunch str1ker laserscan.launch serial_port:=/dev/ttyACM0
To teleoperate the robot:
roslaunch str1ker_moveit_config demo.launch
To simulate the robot:
roslaunch str1ker_moveit_config gazebo.launch
The low-level configuration is in YAML format at config.
To launch the MoveIt wizard for custom robot arm setup:
roslaunch moveit_setup_assistant setup_assistant.launch
Logging level can be specified in $ROS_ROOT/config/rosconsole.config, either globally or for a specific package.








