Hello everyone,
My name is Vito Ammirata and I am a robotics enthusiast developing a project called SmartMower: a fully autonomous robotic lawnmower, based on ROS 2.
Project Goal
The goal is to create a DIY grass-cutting system that is robust, economical, and fully customizable. Key features I intend to implement include:
-
Autonomous Mapping and Localization: Using sensors to map the working area (the lawn) and localize the robot within it without the use of boundary wires.
-
Navigation and Path Planning: Implementing motion planning algorithms to ensure efficient and complete coverage of the area.
-
Obstacle Detection and Safety: Using sensors (such as ultrasonic sensors and a camera) to detect obstacles and implementing the necessary safety logic.
-
Hardware Integration: Developing ROS 2 nodes to manage actuators (wheel and blade motors) and sensors.
Current Status and Technology
The project is currently in the initial/prototyping phase, and the architecture is based on:
-
Operating System: ROS 2 Jazzy Jalisco.
-
Main Libraries: I am evaluating/using the Navigation Stack (Nav2) for navigation and localization.
-
Hardware: The main hardware includes a Raspberry Pi 5 and a Raspberry Pico, ultrasonic sensors, bumpers, a monocular camera, IMU, GNSS GPS, and single encoders on Brushless motors (5-wire).
You can find the source code and the current project structure on the GitHub repository: https://github.com/evlas/smartmower
Request for Help and Feedback
I would appreciate receiving feedback from the ROS community on some critical aspects of the project:
-
ROS 2 Architecture: What are the recommended patterns or best practices for managing the control logic of a mobile robot from scratch (I am currently using a State Machine)?
-
Nav2 and Mapping: Does anyone have experience adapting Nav2 for semi-structured outdoor environments like a lawn, where the ground is not always flat and “walls” may not be clearly defined?
-
ROS 2 Jazzy: Are there any particular issues or specific opportunities with the Jazzy version that I should consider right away for this type of embedded application?
Any advice, constructive criticism, or offer of collaboration (especially on Python/C++ code and Nav2 integration) is highly welcome!
Thank you in advance for your time and support.
Best regards,
Vito Ammirata