Ultimate 4WD Robot Teleoperation Guide
This guide takes you from zero to a fully working 4WD robot using Raspberry Pi + ROS Noetic, controlled via keyboard or Xbox Controller with speed modes and auto-start capability.
Day 1: Raspberry Pi Setup
- Install Ubuntu 20.04 on Raspberry Pi using Raspberry Pi Imager.
- Enable SSH:
sudo systemctl enable ssh sudo systemctl start ssh - Update packages:
sudo apt update sudo apt upgrade -y - Install Python and essential tools:
sudo apt install python3-pip python3-venv git -y
Day 2: Installing ROS Noetic
- Add ROS repository:
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu focal main" > /etc/apt/sources.list.d/ros-latest.list' sudo apt install curl -y curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add - - Install ROS Noetic Desktop Full:
sudo apt update sudo apt install ros-noetic-desktop-full -y - Initialize rosdep:
sudo rosdep init rosdep update - Add ROS setup to bash:
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc source ~/.bashrc
Day 3: Motor Driver Node
- Create workspace:
mkdir -p ~/catkin_ws/src cd ~/catkin_ws catkin_make source devel/setup.bash - Create motor driver node:
Paste the code:cd ~/catkin_ws/src mkdir my_4wd_robot cd my_4wd_robot mkdir scripts nano scripts/motor_driver_node.py#!/usr/bin/env python3 import rospy from geometry_msgs.msg import Twist import RPi.GPIO as GPIO LEFT_FORWARD = 17 LEFT_BACKWARD = 27 RIGHT_FORWARD = 22 RIGHT_BACKWARD = 23 GPIO.setmode(GPIO.BCM) GPIO.setup([LEFT_FORWARD, LEFT_BACKWARD, RIGHT_FORWARD, RIGHT_BACKWARD], GPIO.OUT) def move(linear, angular): if linear > 0: GPIO.output(LEFT_FORWARD, True) GPIO.output(RIGHT_FORWARD, True) elif linear < 0: GPIO.output(LEFT_BACKWARD, True) GPIO.output(RIGHT_BACKWARD, True) else: GPIO.output([LEFT_FORWARD, LEFT_BACKWARD, RIGHT_FORWARD, RIGHT_BACKWARD], False) def callback(msg): linear = msg.linear.x angular = msg.angular.z move(linear, angular) rospy.init_node('motor_driver_node') sub = rospy.Subscriber('/cmd_vel', Twist, callback) rospy.spin() - Make executable:
chmod +x scripts/motor_driver_node.py - Test node:
roscore rosrun my_4wd_robot motor_driver_node.py
Day 4: Keyboard Teleoperation
- Install keyboard teleop:
cd ~/catkin_ws/src git clone https://github.com/ros-teleop/teleop_twist_keyboard.git cd teleop_twist_keyboard sudo python3 setup.py install - Run keyboard teleop:
rosrun teleop_twist_keyboard teleop_twist_keyboard.py rostopic echo /cmd_vel - Robot moves with arrow keys. Forward/backward and left/right verified.
Day 5: Xbox Controller Teleoperation
- Pair Xbox controller via Bluetooth:
bluetoothctl power on agent on default-agent scan on pair XX:XX:XX:XX:XX:XX trust XX:XX:XX:XX:XX:XX connect XX:XX:XX:XX:XX:XX quit - Install xpadneo driver:
sudo apt install dkms sudo modprobe hid_xpadneo - Create xbox teleop node and paste full Day 5 code (headless-safe, speed modes, sensitivity):
cd ~/catkin_ws/src/xbox_teleop/src nano xbox_teleop_node.py chmod +x xbox_teleop_node.py - Test launch:
roslaunch my_4wd_robot robot_bringup.launch rosnode list rostopic echo /cmd_vel
Day 6: Auto-Connect & Production Hardening
- Create launch file:
Paste:nano ~/catkin_ws/src/my_4wd_robot/launch/robot_bringup.launch<launch> <node pkg="my_4wd_robot" type="motor_driver_node.py" name="motor_driver_node" output="screen" /> <node pkg="xbox_teleop" type="xbox_teleop_node.py" name="xbox_teleop" output="screen" /> </launch> - Rebuild workspace:
cd ~/catkin_ws catkin_make source devel/setup.bash - Create systemd service for auto-start:
Paste:sudo nano /etc/systemd/system/robot_bringup.service[Unit] Description=Robot Auto Bringup After=network.target bluetooth.target [Service] Type=simple User=ubuntu WorkingDirectory=/home/ubuntu/catkin_ws ExecStart=/opt/ros/noetic/bin/roslaunch my_4wd_robot robot_bringup.launch Restart=always Environment="DISPLAY=:0" [Install] WantedBy=multi-user.target - Enable & start:
sudo systemctl daemon-reload sudo systemctl enable robot_bringup.service sudo systemctl start robot_bringup.service - Verify:
Joystick forward/backward → moves Left/right → correct turns A/B/Y → speed modes More pressure → faster movementrosnode list rostopic echo /cmd_vel
Next Steps
- Add deadman button (robot moves only while pressed)
- Auto-stop on controller disconnect
- Status LED or log
- Tune speed modes and joystick sensitivity
Congratulations! You now have a fully working 4WD robot with:
- Keyboard & Xbox controller control
- Speed modes & sensitivity curves
- Auto-start after power ON
- Ready for production-level testing with safety improvements
Comments
Post a Comment