This project uses the Steam Deck LCD to control three modules on Leo Rover. It primarily comprises:
Module | Description |
---|---|
1 | Wheel Module |
2 | Manipulator Module |
3 | Pan-Tilt-Camera Module |
In this project, we have integrated OpenMANIPULATIR-X with the Leo Rover. The payload capacity of OpenMANIPULATIR-X is 500 g and it is composed of 5 Dynamixel XM430-W350 actuators. The base of the Manipulator is 3D printed for the Leo Rover and the CAD model is available here.
# | Item | Description | Quantity |
---|---|---|---|
1 | Open MANIPULATIR-X | Manipulator | 1 |
2 | U2D2 USB to Serial Adapter | USB communication converter | 1 |
3 | U2D2 PHB SET | Power Hub Board | 1 |
4 | DIN912 M5x10mm | Thread Cap Head Screws | 4 |
5 | Manipulator Base | 3D printed base for the OpenMANIPULATIR-X | 1 |
The Rover is equipped with the Pan Tilt ArduCam B0202 for the improved field of view. The PT camera assembly comprises 2 Dynamixel XL330-M288 and some 3D printed parts. Please refer to the following list for all the required parts.
# | Item | Description | Quantity |
---|---|---|---|
1 | Dynamixel XL330-M288 | Smart servo | 2 |
2 | Arducam B0202 | 2MP wide angle low light USB camera | 1 |
3 | FPX330-H10 Dynamixel | Frame for XL330 | 2 |
4 | FPX330-S102 Dynamixel | Drame for XL330 | 2 |
5 | DIN912 M2.5x20 | M2.5x20 Socket head bolt | 4 |
6 | DIN912 M2x5 | M2x5 socket head bolt | 4 |
7 | Tappex 017M2.5 | M2.5 threaded insert | 4 |
8 | Base mount | 3D Printed Base of the pan tilt device | 1 |
9 | Camera housing | 3D Printed Housing for the camera | 1 |
10 | Camera housing cover | 3D Printed cover for the camera housing | 1 |
11 | Camera Lens cap | 3D Printed Lens cap for Arducam UC-684 | 1 |
12 | Cable clip | 3D Printed Cable clip | Optional |
The servo motors for the manipulator (Dynamixel XM430-W350) require 12V DC and the servo motors for the Pan Tilt Camera (Dynamixel XL330-M288) require 5V DC. We have used Leo Rover PowerBox for the power distribution. The PowerBox module can be replace by the Leo Rover's right quarter for easy integration.The use of PowerBox is optional and the power can be distributed by using the step down power convertors. Refer to the U2D2 Power hub guide for powering up the Dynamixel motors and connecting it to the Raspberry Pi.
As of the preparation of this document, it appears that the Steam Deck OLED version does not directly support native installation of Ubuntu LTS. To avoid the hassle of installing Ubuntu on the Steam Deck, we have chosen the Steam Deck LCD version for this project. To quickly install Ubuntu without disrupting the SteamOS environment, we prefer using Distrobox to run Ubuntu 20.04 as a subsystem from the terminal within SteamOS.
For Distrobox installation, first up, switch Steam Deck to Desktop mode, and run these installation scripts one after the other in the terminal app (i.e. Konsole on SteamOS)
curl -s https://raw.githubusercontent.com/89luca89/distrobox/main/install | sh -s -- --prefix ~/.loca
curl -s https://raw.githubusercontent.com/89luca89/distrobox/main/extras/install-podman | sh -s -- --prefix ~/.local
Next, add the directories it uses into the .bashrc file, so we can run commands as normal in terminal.
nano ~/.bashrc
Add these three lines to the bottom of the .bashrc file:
export PATH=$HOME/.local/bin:$PATH
export PATH=$HOME/.local/podman/bin:$PATH
xhost +si:localuser:$USER
You can now install a Linux distribution using Distrobox. For this project, we are using Ubuntu 20.04, as the Leo Rover is equipped with a Raspberry Pi running ROS Noetic on Ubuntu 20.04. To maintain consistency with the ROS version, we also install Ubuntu 20.04 with Distrobox.
distrobox create -i ubuntu:20.04
Then once done, you can enter Ubuntu with distrobox:
distrobox enter ubuntu-20-04
This is where the fun begins. Now you can install or do whatever you like inside Ubuntu.
sudo apt install x11-xserver-utils
sudo apt install lsb-release
sudo apt install ros-noetic-desktop-full
After ROS installation, source the ROS environment:
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
Then install ROS dependencies and initialize rosdep
sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential
sudo apt install python3-rosdep
sudo rosdep init
rosdep update
Create a catkin workspace and clone those packages from this repository to the source folder:
source /opt/ros/noetic/setup.bash
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
git clone https://github.com/everskyrube/LeoRover_SteamDeck.git
You can now build the packages using catkin_make:
cd ~/catkin_ws && catkin_make
Assume that you have correctly connected the Openmanipulator to the U2D2 Power Hub Board, to find the use_port connected with the U2D2: NOTE: The ttyUSB port number will change sometimes when you disconnect and re-connect the serial port
ls -l /dev/ttyUSB*
Grant permission to access the corresponding serial port ttyUSB(x), in our case, the openmanipulator is connected with ttyUSB0:
sudo chmod 666 /dev/ttyUSB0
NOTE: For steamdeck, the default controls of the joystick is desktop mode, to switch to gamepad mode, hold the menu/start button to switch the mode of using steamdeck, (the 3 line button on the right side)
sudo apt install joystick jstest-gtk
jstest /dev/input/js0
STEP 6: Source the environment and launch the package. Remember to update the usb_port argument to match the connected port.
NOTE:Manually hold the manipulator hardware to a proper position (i.e. home position) when you are launching the ROS package
cd ~/catkin_ws
source devel/setup.bash
roslaunch open_manipulator_controller open_manipulator_controller.launch use_platform:=true usb_port:=/dev/ttyUSB0
If the manipulator_controlloer is successfully launched, you will see some ouput from the terminal like this:
##port_name and baud_rate are set to /dev/ttyUSB0, 1000000
##Joint Dynamixel ID : 11, Model Name : XM430-W350
##Joint Dynamixel ID : 12, Model Name : XM430-W350
##Joint Dynamixel ID : 13, Model Name : XM430-W350
##Joint Dynamixel ID : 14, Model Name : XM430-W350
##Gripper Dynamixel ID : 15, Model Name :XM430-W350
distrobox enter ubuntu-20-04
cd ~/catkin_ws
source devel/setup.bash
roslaunch open_manipulator_teleop open_manipulator_teleop_joystick.launch
You're in! Now, have fun playing with it!