Skip to content

Latest commit

ย 

History

78 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿค– LatteBot

Mobile Manipulation for Smart Farming

Autonomous dairy farm operations using industrial robotics and distributed systems

ROS Python Gazebo MoveIt

Overview โ€ข Features โ€ข Technologies โ€ข Architecture โ€ข Structure โ€ข Contributors


๐ŸŽฏ Overview

LatteBot is a ROS-based robotic system that automates dairy farm operations using a Universal Robots UR10e manipulator with Robotiq 2F-140 gripper mounted on a 10-meter linear mobile platform. The system demonstrates autonomous bucket handling and delivery to multiple cow stalls through a distributed MQTT/ROS architecture.

What It Does

graph LR
    A[Operator UI] -->|MQTT| B[Bridge]
    B -->|ROS| C[Robot Controller]
    C --> D[Platform Motion]
    C --> E[Arm Planning]
    C --> F[Gripper Control]
    D --> G[Gazebo Simulation]
    E --> G
    F --> G
    H[Arduino + Weight Sensor] -->|Serial| I[Serial Bridge]
    I -->|MQTT| B
Loading

System Capabilities:

  • ๐Ÿฆพ 6-DOF robotic arm with industrial parallel-jaw gripper
  • ๐Ÿš‚ 10-meter linear platform for multi-station operations
  • ๐ŸŒ Multi-platform architecture (Linux + Windows coordination)
  • ๐Ÿ“ก MQTT/ROS bridge with cloud-based message broker
  • ๐ŸŽฎ Interactive GUI for sequence planning and monitoring
  • โš–๏ธ Arduino weight sensors for milk consumption monitoring

โœจ Key Features

๐ŸŽช Complex Scenarios

  • โœ… Incomplete feeding detection with timeout
  • โœ… Parallel task management and queueing
  • โœ… Multi-cow delivery sequences
  • โœ… Automatic bucket lifecycle management

๐Ÿ”ง Advanced Control

  • โœ… Three-phase grasp sequences (100% reliability)
  • โœ… Collision-aware motion planning
  • โœ… Thread-safe state management
  • โœ… Dynamic model spawning

๐Ÿ› ๏ธ Interesting Techniques

๐Ÿค– ROS and Robotics

Technique Description File
URDF/Xacro Macros Parametric robot descriptions with macro-based assembly urdf/ur10e.urdf.xacro
MoveIt Planning Collision-aware trajectory planning with named poses ur10e_moveit_config/
Gazebo Physics Custom contact parameters (ฮผ=2000, kp=5M) for reliable grasping models/bucket/model.sdf
ROS Control Hardware abstraction for arm, gripper, and platform controller/
TF Transforms Complete kinematic chain from world to end effector System-wide

๐Ÿ Python Control Systems

  • Thread-Safe Queues: Lock-based sequence execution prevents race conditions โ†’ bridge_keypad2robot.py
  • State Machine Pattern: Multi-phase grasp (open โ†’ pre-grasp โ†’ close) โ†’ robot_movement.py
  • Action Servers: Non-blocking trajectory execution with feedback
  • Dynamic SDF Modification: Runtime model name changes for grasp plugin compatibility

๐Ÿ“ก MQTT Integration

  • Paho MQTT: TLS-encrypted pub/sub
  • Bidirectional Bridging: MQTT โ†” ROS topic translation with state tracking
  • Distributed Architecture: Windows UI โ†” Cloud Broker โ†” Linux Controller

๐ŸŽจ GUI Development

  • Tkinter: Custom numerical keypad with sequence planning โ†’ numerical_keypad.py
  • Scrollable Canvas: Dynamic content with mousewheel support
  • State Visualization: Real-time cow availability tracking

๐Ÿ”Œ Arduino Integration

  • Custom Binary Protocol: Efficient serial communication with header (\xff) and payload structure โ†’ bridge_serial2MQTT.py
  • Weight Monitoring: Load cell simulation with button-based weight changes and LCD display
  • Auto-detection: COM port discovery via device description matching
  • Event-Based Publishing: Triggers MQTT messages when milk consumption thresholds are met or timeout occurs (20 seconds)
  • Serial โ†’ MQTT Bridge: Translates Arduino sensor data to MQTT topics (cow/{calf_num}) for robot coordination

๐Ÿ“š Technologies and Libraries

๐Ÿค– Robotics Stack
๐Ÿ“ก Communication
๐Ÿ Python Environment
๐Ÿ”ง Hardware & Embedded
  • Arduino - Microcontroller for weight sensor simulation
  • Adafruit SSD1306 - OLED display library for weight visualization
  • Custom Serial Protocol - Binary message format with header/payload/footer structure

๐Ÿ“ Project Structure

๐Ÿ“ฆ lattebot/
โ”œโ”€โ”€ ๐Ÿ“‚ .github/                       # GitHub configuration
โ”‚   โ”œโ”€โ”€ ๐Ÿ“„ copilot-instructions.md    # Complete system architecture reference
โ”‚   โ””โ”€โ”€ ๐Ÿ“„ COPILOT_INSTRUCTIONS_UPDATE.md
โ”œโ”€โ”€ ๐Ÿ“‚ pkg01/                         # Main ROS package โญ
โ”‚   โ”œโ”€โ”€ ๐Ÿ“‚ config/                    # MQTT/serial configuration
โ”‚   โ”œโ”€โ”€ ๐Ÿ“‚ controller/                # Joint controller parameters
โ”‚   โ”œโ”€โ”€ ๐Ÿ“‚ launch/                    # ROS launch files for simulation
โ”‚   โ”œโ”€โ”€ ๐Ÿ“‚ models/                    # Custom Gazebo models (bucket, cow)
โ”‚   โ”œโ”€โ”€ ๐Ÿ“‚ scripts/                   # Python control scripts & bridges
โ”‚   โ”‚   โ”œโ”€โ”€ ๐Ÿ robot_movement.py      # Main robot controller
โ”‚   โ”‚   โ”œโ”€โ”€ ๐Ÿ bridge_keypad2robot.py # MQTT โ†’ ROS bridge
โ”‚   โ”‚   โ”œโ”€โ”€ ๐Ÿ bridge_serial2MQTT.py  # Arduino โ†’ MQTT bridge
โ”‚   โ”‚   โ”œโ”€โ”€ ๐Ÿ pickup_site.py         # Operator interface
โ”‚   โ”‚   โ”œโ”€โ”€ ๐Ÿ numerical_keypad.py    # GUI components
โ”‚   โ”‚   โ””โ”€โ”€ ๐Ÿ“‚ calf_arduino/          # Arduino firmware
โ”‚   โ”‚       โ””โ”€โ”€ ๐Ÿ”ง calf_arduino.ino   # Weight sensor code
โ”‚   โ”œโ”€โ”€ ๐Ÿ“‚ urdf/                      # Robot description (xacro format)
โ”‚   โ”œโ”€โ”€ ๐Ÿ“‚ world/                     # Gazebo world definitions
โ”‚   โ”œโ”€โ”€ ๐Ÿ“‚ claude_explanations/       # Troubleshooting documentation ๐Ÿ“–
โ”‚   โ””โ”€โ”€ ๐Ÿ“‚ meshes/                    # 3D models for visualization
โ”œโ”€โ”€ ๐Ÿ“‚ ur10e_moveit_config/           # MoveIt configuration package โญ
โ”‚   โ”œโ”€โ”€ ๐Ÿ“‚ config/                    # Planning parameters & SRDF
โ”‚   โ””โ”€โ”€ ๐Ÿ“‚ launch/                    # Motion planning launch files
โ”œโ”€โ”€ ๐Ÿ“‚ robotiq/                       # Robotiq gripper packages (gitignored)
โ”œโ”€โ”€ ๐Ÿ“‚ roboticsgroup_gazebo_plugins/  # Mimic joint plugin (gitignored)
โ””โ”€โ”€ ๐Ÿ“„ requirements.txt               # Python dependencies

๐Ÿ“Œ Key Directories

Directory Description
pkg01/claude_explanations/ ๐Ÿ“– Comprehensive markdown docs covering physics tuning, collision troubleshooting, and grasp reliability - essential reading
pkg01/scripts/ ๐Ÿ All executable Python scripts: robot controller, MQTT bridges, test utilities
pkg01/scripts/calf_arduino/ ๐Ÿ”ง Arduino firmware for weight sensor simulation with OLED display
pkg01/models/bucket/ ๐Ÿชฃ Custom SDF model with extreme physics (ฮผ=2000, kp=5M) for stable grasping
ur10e_moveit_config/config/ โš™๏ธ MoveIt configuration with manually tuned collision matrices and named poses

๐Ÿ—๏ธ System Architecture

The project uses a three-tier distributed architecture:

Component Overview

Component Platform Purpose
Operator Interface Windows Tkinter GUI for planning cow milking sequences
MQTT Bridge Linux/WSL Translates MQTT messages to ROS topics with queue management
Robot Controller Linux/WSL Orchestrates platform motion, MoveIt planning, and gripper control
Serial Bridge Windows Reads Arduino sensor data and publishes to MQTT
Arduino System Hardware Monitors bucket weight via load cells with OLED display
Gazebo Simulation Linux/WSL Executes physics-based movements with contact-based grasping

Communication Flow

MQTT Topics:

  • Pickup-Site โ†’ Complete sequence data from operator to bridge
  • cow/{calf_num} โ†’ Weight sensor triggers from Arduino to bridge

ROS Topics:

  • /calf_num โ†’ Task commands from bridge to robot controller
  • /ur10e_robot/joint_states โ†’ Joint positions for monitoring
  • /ur10e_robot/*_controller/follow_joint_trajectory โ†’ Action servers for motion execution

Message Protocol: HiveMQ Cloud broker with QoS 2 (exactly-once delivery) ensures reliable communication across Windows/Linux boundary.

Arduino Serial Protocol

The Arduino communicates via a custom binary protocol over serial (9600 baud):

[ 0xFF | Calf_Num | Weight | 0xFE ]
  ^       1 byte    1 byte    ^
  Header                       Footer

Trigger Conditions:

  • โœ… Weight drops below starting_weight - milk_limit โ†’ Publishes 1 (cow finished)
  • โฐ 120-second timeout โ†’ Publishes 0 (incomplete feeding)

Acknowledgements

This project builds upon several open-source robotics packages:


Contributors

Contributor 1
Casali Cristian
Contributor 2
Flotta Aldo

Developed as part of Smart Robotics course project, A.Y. 2024/2025

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages