This repository includes the hardware and software components of "MEVION: Low-Cost Open-Source Data Collection System for Powerful and High-Speed Dual-Arm Manipulation"
Please refer to the following links for more information.
You can find all the hardware components in the following link: Goodle Drive
The supported environment is Ubuntu 24.04 with ROS 2 Jazzy. Install ROS 2 Jazzy Desktop before following the instructions below.
A Python virtual environment is used because Ubuntu 24.04 prevents pip from
modifying the system Python environment. The --system-site-packages option is
required so that the environment can also use ROS packages installed by
apt and rosdep.
sudo apt update
sudo apt install python3-colcon-common-extensions python3-rosdep python3-venv
mkdir -p ~/mevion_ws/src
cd ~/mevion_ws
git clone https://github.com/haraduka/mevion.git src/mevion
source /opt/ros/jazzy/setup.bash
sudo rosdep init # Run this only if rosdep has not been initialized before.
rosdep update
rosdep install --from-paths src --ignore-src --rosdistro jazzy -y
python3 -m venv --system-site-packages .venv
source .venv/bin/activate
python3 -m pip install --upgrade pip
python3 -m pip install -r src/mevion/requirements.txt
colcon build --symlink-install --event-handlers console_direct+
source install/setup.bashDo not use sudo pip install or pip install --break-system-packages.
Activate the ROS, Python, and workspace environments in each new terminal:
cd ~/mevion_ws
source /opt/ros/jazzy/setup.bash
source .venv/bin/activate
source install/setup.bash# Find a description such as ATTRS{serial}=="004000325246570C20393733".
udevadm info -a -p /sys/class/net/can0 | grep serial
sudo vim /etc/udev/rules.d/99-usb-can.rules
# Add the following rule, replacing the serial number as necessary.
SUBSYSTEM=="usb", ATTRS{serial}=="004000325246570C20393733", SYMLINK+="can_usb_0"
# Unplug and reconnect the device after reloading the rules.
sudo udevadm control --reload-rules
sudo udevadm triggerros2 run mevion can_setup.sh
# Sense motors.
python3 -m mevion.xiaomimotor_test -i 127 -t sense
# Move motors.
python3 -m mevion.xiaomimotor_test -i 127 -t torque -v 1.0
# Change a motor ID.
python3 -m mevion.xiaomimotor_test -i 127 -t change -n 126
# Bilateral control.
python3 -m mevion.xiaomimotor_test -i 126 127 -t bilateralpython3 -m mevion.robot_utilsMake sure that the virtual environment and workspace are sourced as shown above. Start the interactive console:
ros2 run mevion ipythonThen run the following commands in IPython. mode can be single, dual,
or quad. Two windows are opened: the scikit-robot viewer and MuJoCo viewer.
m = Mevion(mode="quad")
m.setup_sim()
m.robot_model.reset_manip_pose()
m.send_angle_vector(
m.robot_model.arms.angle_vector(),
3.0,
interpolation="minjerk",
comp_torque=True,
limb="arms",
)RViz can be launched in another sourced terminal. The robot argument accepts
single_mevion, dual_mevion, or quad_mevion.
ros2 launch mevion display_launch.py robot:=quad_mevionros2 run mevion ipythonm = Mevion(mode="quad")
m.setup_real()
m.robot_model.reset_manip_pose()
m.send_angle_vector(
m.robot_model.arms.angle_vector(),
3.0,
interpolation="minjerk",
comp_torque=True,
limb="arms",
)ros2 launch mevion display_launch.py robot:=quad_mevion- i: show axis
- w: wireframe
- o: change scale
- a: auto rotation
- s: save image
- q: quit
- f: full screen
- h: show shadow
- l: change light
- n/m: show normals
- make detailed models in solidworks and export as 3dxml
- convert 3dxml to dae using convert-urdf-mesh with --force-zero-origin option
- make simple models in solidworks and export as 3dxml
- convert 3dxml to dae using convert-urdf-mesh with --force-zero-origin option
- make simple models in solidworks and export as stl
- use converted detailed model for URDF, and use simple models for STL and DAE files
- please make mevion_dae.urdf and mevion_stl.urdf (just each file path is different)
- use mevion_dae.urdf for rviz and scikit-robot, and use mevion_stl.urdf for mujoco
- cp mevion_stl.urdf to meshes/mevion_mujoco.urdf, compile urdf into xml, change a little (stl path and geom name) and load from scene.xml
@article{kawaharazuka2026mevion,
title={{MEVION: Low-Cost Open-Source Data Collection System for Powerful and High-Speed Dual-Arm Manipulation}},
author={Kento Kawaharazuka and Yoshiki Obinata and Hirokazu Ishida and Jihoon Oh and Temma Suzuki and Shintaro Inoue and Keita Yoneda and Ayumu Iwata and Kei Okada},
journal={IEEE Robotics and Automation Practice},
year={2026},
}