A research-oriented autonomous lawn mower robot platform integrating mobile robotics, embedded control, sensor fusion, LiDAR-based perception, differential/skid-steer drive control, and modular ROS 2 software.
GREENBOY is an experimental autonomous mower robot designed as a practical research platform for outdoor mobile robotics. The goal is to build a compact robotic system capable of navigating a residential garden, estimating its own motion, perceiving obstacles, and controlling a cutting mechanism through a modular hardware/software architecture.
The project combines:
- ROS 2-based robotic middleware for modular control, launch management, visualization, simulation, mapping, and navigation;
- Raspberry Pi onboard computing for high-level autonomy and sensor processing;
- Arduino/embedded motor control for low-level real-time actuation;
- Differential/skid-steer locomotion suitable for compact tracked or multi-wheel platforms;
- Wheel encoder feedback for odometry and velocity control;
- 2D LiDAR and IMU sensing for perception, localization, mapping, and pose estimation;
- Simulation and robot description files for testing the robot model before field deployment.
This repository is intended not only as source code, but also as a technical record of the system architecture behind an engineering prototype. It is suitable for demonstrating practical skills in robotics, embedded systems, ROS 2, mechatronics, control systems, and applied autonomous navigation.
Autonomous lawn mowing is a representative real-world robotics problem because it combines several engineering challenges:
- outdoor operation on uneven terrain;
- low-cost sensing under imperfect environmental conditions;
- robust low-speed motion control;
- reliable odometry under wheel slip;
- obstacle detection and avoidance;
- safe interaction between navigation software and a rotating cutting mechanism;
- mechanical constraints related to compact size, battery operation, waterproofing, and maintainability.
The scientific and engineering purpose of this project is to use a mower robot as a testbed for studying the interaction between mobile robot kinematics, embedded motor control, sensor fusion, SLAM/localization, and autonomous navigation in a constrained outdoor environment.
The system is developed around the following objectives:
- Create a functional autonomous ground robot platform suitable for garden-scale navigation.
- Implement ROS 2-based modular software with separate packages for robot description, sensors, control, and navigation.
- Integrate low-level motor control through Arduino and serial communication.
- Use LiDAR, IMU, and encoder feedback for perception and localization.
- Support simulation-first development through URDF/Xacro, Gazebo/Gz, RViz, and navigation configuration files.
- Provide a scalable architecture where additional sensors, safety modules, and path-planning logic can be added later.
- Document the project clearly so it can be presented as a serious engineering and research prototype.
This is an experimental research prototype, not a commercial or safety-certified mower.
Current repository scope:
- ROS 2 workspace structure;
- robot description and simulation package;
- LiDAR package integration;
- BNO08x/BNO085 IMU node integration;
- differential-drive/Arduino control packages;
- configuration files for RViz, EKF, SLAM, navigation, scan filtering, joystick control, and twist multiplexing;
- launch files for robot bring-up, simulation, localization, navigation, camera, joystick, and RPLIDAR.
Planned or ongoing development areas:
- full field validation on real grass;
- robust perimeter/geofence logic;
- improved cutting-system safety interlock;
- waterproof enclosure and cable management;
- automated mowing-pattern planner;
- improved state estimation under wheel slip;
- battery monitoring and docking/charging logic.
Mower_robot/
├── src/
│ ├── my_bot/
│ │ ├── config/ # RViz, EKF, Nav2, SLAM, scan filter, joystick, controller configs
│ │ ├── description/ # URDF/Xacro robot model, sensors, ros2_control, Gazebo plugins
│ │ ├── launch/ # Robot, simulation, localization, navigation, joystick, camera launches
│ │ └── worlds/ # Gazebo/Gz worlds for simulation
│ │
│ ├── diffdrive_arduino/ # ros2_control hardware interface for Arduino differential drive
│ ├── serial_motor_demo/ # ROS 2 serial motor driver and GUI/debug utilities
│ ├── mower_control_ros2/ # ROS 2 package for interfacing with the mower Arduino controller
│ ├── sllidar_ros2/ # SLAMTEC/RPLIDAR ROS 2 integration
│ ├── BNO085-ROS2-Node/ # ROS 2-compatible BNO085 IMU node
│ ├── bno080_ros2/ # Additional BNO080 ROS 2 package
│ ├── serial/ # Serial communication support
│ └── imu_node.py # IMU-related Python node
└── .gitignore
The robot follows a layered architecture separating high-level autonomy from low-level actuation.
┌─────────────────────────────────────────────────────────────┐
│ High-Level Autonomy │
│ ROS 2 / Nav2 / SLAM / RViz / Robot Description / Planning │
│ Raspberry Pi onboard computer │
└───────────────────────┬─────────────────────────────────────┘
│ /cmd_vel, /scan, /imu, /odom, /tf
┌───────────────────────▼─────────────────────────────────────┐
│ Middleware and Control Layer │
│ twist_mux │ diff_drive_controller │ EKF │ scan filters │
│ serial drivers │ ros2_control hardware interface │
└───────────────────────┬─────────────────────────────────────┘
│ Serial / USB / GPIO / I2C
┌───────────────────────▼─────────────────────────────────────┐
│ Embedded Control Layer │
│ Arduino motor controller │ encoder reading │ PWM generation │
│ PID velocity control │ safety watchdogs │
└───────────────────────┬─────────────────────────────────────┘
│ Motor drivers / power electronics
┌───────────────────────▼─────────────────────────────────────┐
│ Physical Robot Platform │
│ Differential/skid-steer drive │ cutting module │ battery │
│ LiDAR │ IMU │ encoders │ optional camera/GPS/ToF sensors │
└─────────────────────────────────────────────────────────────┘
The key design principle is modularity: each functional subsystem can be developed, tested, replaced, or upgraded independently.
The robot is designed as a compact outdoor mobile platform with tracked or skid-steer motion. The current prototype concept includes the following subsystems.
| Subsystem | Role |
|---|---|
| Raspberry Pi onboard computer | Runs ROS 2, navigation, sensor processing, launch files, visualization support |
| Arduino-based controller | Handles low-level motor control, encoder feedback, and direct actuator interfacing |
| DC gear motors with encoders | Provide differential/skid-steer locomotion and odometry feedback |
| Motor drivers | Convert control commands into motor power signals |
| 2D LiDAR | Provides planar obstacle detection, mapping, and navigation input |
| BNO080/BNO085 IMU | Provides inertial measurements for orientation and state estimation |
| Battery pack with BMS | Supplies the mobile platform and protects the energy system |
| Cutting motor/module | Performs mowing operation, controlled separately from navigation |
| Optional sensors | Camera, GPS, ToF sensors, bumper switches, lift/tilt sensors, current sensors |
Target mechanical concept:
- compact body suitable for home-garden operation;
- differential/skid-steer mobility;
- low center of gravity for stability;
- modular sensor mounting;
- serviceable cutting assembly;
- protected electronics compartment.
The software stack is based on ROS 2 packages and embedded firmware concepts.
| Layer | Technologies / Components |
|---|---|
| Operating system | Ubuntu Linux on Raspberry Pi |
| Middleware | ROS 2 |
| Build system | colcon, ament_cmake, ament_python |
| Robot model | URDF/Xacro |
| Visualization | RViz |
| Simulation | Gazebo/Gz worlds and plugins |
| Navigation | Nav2-style configuration and launch structure |
| Mapping | SLAM configuration files |
| State estimation | EKF configuration using odometry and IMU data |
| Motor interface | serial communication, ros2_control, differential drive controller |
| Sensor drivers | SLAMTEC/RPLIDAR, BNO08x/BNO085 IMU nodes |
| Languages | C++, Python, C, CMake |
The robot is treated as a differential-drive or skid-steer mobile platform. For a simplified differential-drive model, the linear and angular velocities of the robot are:
v = r / 2 · (ω_R + ω_L)
ω = r / L · (ω_R - ω_L)
where:
vis the forward linear velocity of the robot;ωis the yaw angular velocity;ris the wheel or effective track radius;Lis the distance between the left and right drive contact lines;ω_Randω_Lare the right and left wheel angular velocities.
In practice, skid-steer platforms experience slip, especially on grass. Therefore, encoder odometry alone is not sufficient for robust outdoor localization. This is why the system architecture includes IMU feedback, LiDAR-based mapping/localization, filtering, and future extension toward sensor fusion with GPS or visual data.
Low-level control is separated from high-level planning:
- ROS 2 navigation or teleoperation publishes velocity commands.
- The differential drive controller converts commands into wheel velocities.
- The serial/Arduino interface transfers motor commands to the embedded controller.
- The embedded controller applies PWM/PID logic and reads encoders.
- Encoder feedback is published back to ROS 2 for odometry estimation.
The perception stack is designed around the combination of LiDAR, IMU, and odometry.
The sllidar_ros2 package provides integration for SLAMTEC/RPLIDAR devices. The LiDAR data is used for:
- obstacle detection;
- occupancy grid mapping;
- scan visualization in RViz;
- input to SLAM and navigation algorithms.
The BNO08x/BNO085 IMU node publishes inertial information used for:
- orientation estimation;
- yaw-rate information;
- improved localization stability;
- future fusion with wheel odometry using an EKF.
Wheel encoders provide relative motion estimates. Encoder odometry is useful for short-term motion tracking, but it must be corrected or fused with other sensors because grass, slopes, and turns can introduce slip.
The repository includes navigation-related launch and configuration files. The intended pipeline is:
LiDAR scan + odometry + IMU
↓
SLAM / localization / EKF
↓
local and global costmaps
↓
path planning and obstacle avoidance
↓
/cmd_vel velocity command
↓
differential drive motor control
Because this project involves a mobile robot and a rotating cutting mechanism, safety must be treated as a core engineering requirement.
Minimum recommended safety layers:
- physical emergency stop button;
- independent blade enable/disable relay;
- software watchdog for command timeout;
- bumper or contact sensors;
- tilt/lift detection;
- current monitoring for stalled motors;
- geofence or perimeter constraint;
- child/pet exclusion during testing;
- blade disabled during software debugging, mapping, and teleoperation tests;
- supervised operation only until the system is thoroughly validated.
Important: This project is not certified as a commercial autonomous mower. It should be used only as an experimental platform under controlled conditions.
mkdir -p ~/mower_ws/src
cd ~/mower_ws/src
git clone https://github.com/hevrosy/Mower_robot.gitDepending on your preferred workspace layout, you may either clone the whole repository and build from its root, or copy the internal packages from Mower_robot/src/ into your own ROS 2 workspace.
Example:
cd ~/mower_ws
rosdep update
rosdep install --from-paths src --ignore-src -r -y
colcon build --symlink-install
source install/setup.bashTo source the workspace automatically:
echo "source ~/mower_ws/install/setup.bash" >> ~/.bashrc
source ~/.bashrcros2 launch my_bot rsp.launch.pyros2 launch my_bot launch_sim.launch.pyros2 launch my_bot launch_robot.launch.pyros2 launch my_bot rplidar.launch.pyor, depending on the LiDAR package configuration:
ros2 launch sllidar_ros2 view_sllidar_c1_launch.pyros2 launch my_bot localization_launch.pyros2 launch my_bot navigation_launch.pyros2 launch my_bot joystick.launch.pyros2 run serial_motor_demo driver --ros-args \
-p encoder_cpr:=5850 \
-p loop_rate:=30 \
-p serial_port:=/dev/ttyUSB0 \
-p baud_rate:=57600Adjust encoder_cpr, serial port, wheel radius, track width, and PID settings according to the real hardware.
Recommended development sequence:
-
Mechanical validation
- verify drive alignment;
- check wheel/track tension;
- test motor mounting and cutting module isolation.
-
Low-level motor testing
- run motors with the blade disabled;
- verify encoder direction;
- measure counts per revolution;
- tune PID velocity loops.
-
ROS 2 communication test
- verify serial connection;
- publish test velocity commands;
- monitor
/odom,/tf, and encoder topics.
-
Sensor validation
- verify LiDAR scan in RViz;
- verify IMU orientation and frame alignment;
- check timestamp consistency.
-
Simulation test
- run the robot model in simulation;
- validate URDF/Xacro geometry and frames;
- test navigation parameters without physical risk.
-
Mapping and localization
- create a test map;
- validate scan matching;
- tune EKF and costmap parameters.
-
Outdoor supervised testing
- start with blade disabled;
- test slow teleoperation;
- test obstacle detection;
- validate emergency stop;
- only then proceed to mowing tests.
The most important technical challenges in this project are:
- encoder odometry drift on grass;
- slip during skid-steer turns;
- LiDAR reliability outdoors under changing light, dust, and vegetation;
- sensor mounting vibration;
- power noise from motors affecting logic electronics;
- safe separation between the cutting system and navigation electronics;
- waterproofing without overheating the electronics;
- guaranteeing safe behavior when communication is lost;
- designing a mowing pattern that covers the area efficiently without damaging plants or borders.
- Add complete root-level documentation and diagrams.
- Finalize hardware wiring diagrams.
- Add Arduino firmware documentation.
- Add blade safety relay and emergency stop documentation.
- Add battery monitoring node.
- Tune
ros2_controlanddiff_drive_controllerfor the real robot. - Validate EKF odometry + IMU fusion.
- Add outdoor SLAM/localization experiments.
- Implement perimeter/geofence logic.
- Add mowing coverage planner.
- Add test videos, photos, and field results.
- Add scientific evaluation: localization error, coverage percentage, path efficiency, runtime, and obstacle detection reliability.
For a research-style presentation, the system can be evaluated using:
| Metric | Purpose |
|---|---|
| Odometry drift | Measures accumulated localization error |
| Path tracking error | Measures motion-control accuracy |
| Coverage percentage | Measures mowing completeness |
| Obstacle detection rate | Measures perception reliability |
| Runtime per battery charge | Measures energy efficiency |
| Communication latency | Measures control-loop responsiveness |
| Emergency stop response time | Measures safety-critical reaction |
| Slip ratio during turning | Measures traction performance |
| Mapping consistency | Measures SLAM quality |
These metrics can turn the project from a hobby prototype into a documented engineering experiment.
GREENBOY is my experimental autonomous ROS 2 mower robot platform. The project combines embedded motor control, Raspberry Pi-based robotics, Arduino low-level actuation, LiDAR perception, IMU-based state estimation, differential-drive control, simulation, and navigation. The goal is to create a compact autonomous mower that can serve both as a practical garden robot and as a research platform for outdoor mobile robotics, sensor fusion, and safe autonomous navigation.
Key technologies: ROS 2, Raspberry Pi, Arduino, C++, Python, LiDAR, IMU, wheel encoders, Gazebo/Gz, RViz, Nav2-style navigation, differential drive control, embedded systems, and mechatronics.
This project is under active development. It is intended for research, education, and experimental engineering work. Any real-world test involving motors or cutting blades must be performed with proper supervision, physical safety measures, and emergency stop functionality.
Developed by hevrosy as an experimental robotics and mechatronics project.
GitHub: https://github.com/hevrosy/Mower_robot
Научно-инженерен прототип на автономна роботизирана косачка, обединяващ мобилна роботика, вградени системи, сензорно сливане, LiDAR възприятие, диференциално/ skid-steer управление и модулна ROS 2 архитектура.
GREENBOY е експериментална автономна роботизирана косачка, разработвана като практическа платформа за изследване и демонстрация на мобилна роботика в реална външна среда. Целта на проекта е изграждане на компактен робот, способен да се движи в дворна среда, да оценява собственото си движение, да възприема препятствия и да управлява косещ механизъм чрез модулна хардуерно-софтуерна архитектура.
Проектът комбинира:
- ROS 2 middleware за модулно управление, стартиране на възли, визуализация, симулация, картографиране и навигация;
- Raspberry Pi бордови компютър за високонивова автономност и обработка на сензорни данни;
- Arduino/embedded контролер за нискониво управление на задвижването;
- диференциално / skid-steer задвижване, подходящо за компактна верижна или многоколесна платформа;
- енкодери на моторите за одометрия и обратна връзка по скорост;
- 2D LiDAR и IMU за възприятие, локализация, картографиране и оценка на ориентацията;
- URDF/Xacro описание и симулация за тестване на модела преди реални полеви експерименти.
Хранилището е замислено не само като код, а и като техническа документация на архитектурата зад реален инженерно-научен прототип. Проектът е подходящ за представяне на умения в роботика, вградени системи, ROS 2, мехатроника, автоматично управление и автономна навигация.
Автономната косачка е представителен пример за реален проблем в роботиката, защото обединява няколко важни инженерни предизвикателства:
- движение на открито върху неравен терен;
- евтини сензори в неперфектни условия;
- стабилно нискоскоростно управление;
- надеждна одометрия при приплъзване;
- откриване и избягване на препятствия;
- безопасно взаимодействие между навигационен софтуер и въртящ се режещ механизъм;
- механични ограничения, свързани с компактност, батерийно захранване, защита от влага и сервизируемост.
Научно-инженерната цел е роботът косачка да служи като тестова платформа за изследване на взаимодействието между кинематика на мобилни роботи, вградено управление на мотори, сензорно сливане, SLAM/локализация и автономна навигация в ограничена дворна среда.
Системата се разработва около следните цели:
- Изграждане на функционална автономна наземна роботизирана платформа за навигация в дворна среда.
- Реализация на модулен ROS 2 софтуер с отделни пакети за описание на робота, сензори, управление и навигация.
- Интеграция на нискониво управление на моторите чрез Arduino и серийна комуникация.
- Използване на LiDAR, IMU и енкодери за възприятие, локализация и обратна връзка.
- Simulation-first подход чрез URDF/Xacro, Gazebo/Gz, RViz и навигационни конфигурации.
- Мащабируема архитектура, позволяваща бъдещо добавяне на сензори, safety модули и алгоритми за покриване на площ.
- Ясна документация, подходяща за GitHub и професионално представяне в LinkedIn.
Това е експериментален научно-инженерен прототип, а не сертифицирана комерсиална автономна косачка.
Текущият обхват на хранилището включва:
- ROS 2 workspace структура;
- пакет за robot description и симулация;
- интеграция на LiDAR пакет;
- интеграция на BNO08x/BNO085 IMU възли;
- пакети за differential-drive/Arduino управление;
- конфигурации за RViz, EKF, SLAM, навигация, scan filtering, joystick control и twist multiplexing;
- launch файлове за реален робот, симулация, локализация, навигация, камера, joystick и RPLIDAR.
Предстоящи или текущи направления за развитие:
- пълна валидация върху реална тревна площ;
- надеждна perimeter/geofence логика;
- подобрен safety interlock за косещия механизъм;
- влагоустойчив корпус и подредено окабеляване;
- алгоритъм за систематично покриване на площта при косене;
- по-добра оценка на състоянието при приплъзване;
- мониторинг на батерията и бъдеща docking/charging логика.
Mower_robot/
├── src/
│ ├── my_bot/
│ │ ├── config/ # RViz, EKF, Nav2, SLAM, scan filter, joystick, controller configs
│ │ ├── description/ # URDF/Xacro модел, сензори, ros2_control, Gazebo plugins
│ │ ├── launch/ # Стартиране на робот, симулация, локализация, навигация, joystick, камера
│ │ └── worlds/ # Gazebo/Gz среди за симулация
│ │
│ ├── diffdrive_arduino/ # ros2_control hardware interface за Arduino differential drive
│ ├── serial_motor_demo/ # ROS 2 serial motor driver и GUI/debug инструменти
│ ├── mower_control_ros2/ # ROS 2 пакет за интерфейс към Arduino контролера на косачката
│ ├── sllidar_ros2/ # SLAMTEC/RPLIDAR ROS 2 интеграция
│ ├── BNO085-ROS2-Node/ # ROS 2-compatible BNO085 IMU node
│ ├── bno080_ros2/ # Допълнителен BNO080 ROS 2 пакет
│ ├── serial/ # Поддръжка за серийна комуникация
│ └── imu_node.py # Python възел, свързан с IMU
└── .gitignore
Роботът използва слоеста архитектура, разделяща високонивовата автономност от нисконивовото управление на актуаторите.
┌─────────────────────────────────────────────────────────────┐
│ Високонивова автономност │
│ ROS 2 / Nav2 / SLAM / RViz / Robot Description / Planning │
│ Raspberry Pi бордови компютър │
└───────────────────────┬─────────────────────────────────────┘
│ /cmd_vel, /scan, /imu, /odom, /tf
┌───────────────────────▼─────────────────────────────────────┐
│ Middleware и слой за управление │
│ twist_mux │ diff_drive_controller │ EKF │ scan filters │
│ serial drivers │ ros2_control hardware interface │
└───────────────────────┬─────────────────────────────────────┘
│ Serial / USB / GPIO / I2C
┌───────────────────────▼─────────────────────────────────────┐
│ Вграден контролен слой │
│ Arduino motor controller │ encoder reading │ PWM generation │
│ PID velocity control │ safety watchdogs │
└───────────────────────┬─────────────────────────────────────┘
│ Motor drivers / power electronics
┌───────────────────────▼─────────────────────────────────────┐
│ Физическа роботизирана платформа │
│ Differential/skid-steer drive │ cutting module │ battery │
│ LiDAR │ IMU │ encoders │ optional camera/GPS/ToF sensors │
└─────────────────────────────────────────────────────────────┘
Основният принцип е модулност: всеки функционален подсистемен блок може да бъде разработван, тестван, заменян или надграждан независимо.
Роботът е проектиран като компактна външна мобилна платформа с верижно или skid-steer движение. Концепцията включва следните подсистеми.
| Подсистема | Роля |
|---|---|
| Raspberry Pi бордови компютър | Изпълнява ROS 2, навигация, обработка на сензори, launch файлове и визуализация |
| Arduino контролер | Нискониво управление на мотори, енкодери и директни актуатори |
| DC редукторни мотори с енкодери | Осигуряват движение и обратна връзка за одометрия |
| Драйвери за мотори | Преобразуват управляващите команди в силови сигнали |
| 2D LiDAR | Използва се за препятствия, картографиране и навигация |
| BNO080/BNO085 IMU | Измерва инерциални данни за ориентация и оценка на състоянието |
| Батериен пакет с BMS | Захранва платформата и предпазва енергийната система |
| Режещ/косещ модул | Извършва косенето, отделен от навигационното управление |
| Допълнителни сензори | Камера, GPS, ToF сензори, bumper switches, lift/tilt sensors, current sensors |
Целева механична концепция:
- компактно тяло за дворна среда;
- differential/skid-steer мобилност;
- нисък център на тежестта;
- модулно закрепване на сензори;
- сервизируем косещ механизъм;
- защитено отделение за електроника.
Софтуерът е базиран на ROS 2 пакети и embedded firmware концепция.
| Слой | Технологии / компоненти |
|---|---|
| Операционна система | Ubuntu Linux върху Raspberry Pi |
| Middleware | ROS 2 |
| Build system | colcon, ament_cmake, ament_python |
| Robot model | URDF/Xacro |
| Визуализация | RViz |
| Симулация | Gazebo/Gz worlds и plugins |
| Навигация | Nav2-style конфигурация и launch структура |
| Картографиране | SLAM конфигурационни файлове |
| Оценка на състоянието | EKF конфигурация чрез одометрия и IMU |
| Интерфейс към моторите | serial communication, ros2_control, differential drive controller |
| Сензорни драйвери | SLAMTEC/RPLIDAR, BNO08x/BNO085 IMU nodes |
| Езици | C++, Python, C, CMake |
Роботът се разглежда като differential-drive или skid-steer мобилна платформа. При опростен differential-drive модел линейната и ъгловата скорост са:
v = r / 2 · (ω_R + ω_L)
ω = r / L · (ω_R - ω_L)
където:
vе линейната скорост напред;ωе ъгловата скорост около вертикалната ос;rе радиусът на колелото или ефективният радиус на задвижващия контакт;Lе разстоянието между левия и десния задвижващ контакт;ω_Rиω_Lса ъгловите скорости на десния и левия двигател/колело.
При реална skid-steer платформа върху трева възниква приплъзване, особено при завой. Затова само енкодерната одометрия не е достатъчна за надеждна външна локализация. Архитектурата включва IMU, LiDAR-базирано картографиране/локализация, филтриране и възможност за бъдещо сензорно сливане с GPS или визуални данни.
Разделението между високонивово и нискониво управление е следното:
- ROS 2 навигация или teleoperation публикува velocity commands.
- Differential drive controller преобразува командите в скорости на ляв/десен мотор.
- Serial/Arduino интерфейсът предава командите към embedded контролера.
- Embedded контролерът прилага PWM/PID управление и чете енкодерите.
- Обратната връзка от енкодерите се връща към ROS 2 за одометрия.
Сензорният стек е изграден около комбинация от LiDAR, IMU и одометрия.
Пакетът sllidar_ros2 осигурява интеграция на SLAMTEC/RPLIDAR устройства. LiDAR данните се използват за:
- откриване на препятствия;
- occupancy grid картографиране;
- визуализация на scan данни в RViz;
- вход за SLAM и навигационни алгоритми.
BNO08x/BNO085 IMU възелът публикува инерциални данни, използвани за:
- оценка на ориентацията;
- yaw-rate информация;
- по-стабилна локализация;
- бъдещо сливане с одометрия чрез EKF.
Енкодерите дават относителна оценка на движението. Тя е полезна за краткосрочно проследяване, но трябва да бъде коригирана или слята с други сензори, защото трева, наклони и завои могат да доведат до приплъзване.
Хранилището съдържа launch и configuration файлове за навигация. Предвиденият pipeline е:
LiDAR scan + odometry + IMU
↓
SLAM / localization / EKF
↓
local and global costmaps
↓
path planning and obstacle avoidance
↓
/cmd_vel velocity command
↓
differential drive motor control
Тъй като проектът включва мобилен робот и въртящ се режещ механизъм, безопасността трябва да бъде основно инженерно изискване.
Минимални препоръчителни safety слоеве:
- физически emergency stop бутон;
- независимо реле за enable/disable на режещия механизъм;
- software watchdog при загуба на команди;
- bumper/contact сензори;
- tilt/lift detection;
- мониторинг на ток при блокирали мотори;
- geofence или perimeter ограничение;
- забрана за присъствие на деца/домашни любимци по време на тестове;
- изключен нож при debug, mapping и teleoperation тестове;
- работа само под наблюдение до пълна валидация.
Важно: Проектът не е сертифицирана комерсиална косачка. Трябва да се използва само като експериментална платформа в контролирана среда.
mkdir -p ~/mower_ws/src
cd ~/mower_ws/src
git clone https://github.com/hevrosy/Mower_robot.gitСпоред предпочитания workspace layout може да се build-не цялото хранилище или да се копират вътрешните пакети от Mower_robot/src/ в отделен ROS 2 workspace.
Пример:
cd ~/mower_ws
rosdep update
rosdep install --from-paths src --ignore-src -r -y
colcon build --symlink-install
source install/setup.bashАвтоматично source-ване на workspace:
echo "source ~/mower_ws/install/setup.bash" >> ~/.bashrc
source ~/.bashrcros2 launch my_bot rsp.launch.pyros2 launch my_bot launch_sim.launch.pyros2 launch my_bot launch_robot.launch.pyros2 launch my_bot rplidar.launch.pyили според конфигурацията на LiDAR пакета:
ros2 launch sllidar_ros2 view_sllidar_c1_launch.pyros2 launch my_bot localization_launch.pyros2 launch my_bot navigation_launch.pyros2 launch my_bot joystick.launch.pyros2 run serial_motor_demo driver --ros-args \
-p encoder_cpr:=5850 \
-p loop_rate:=30 \
-p serial_port:=/dev/ttyUSB0 \
-p baud_rate:=57600Параметрите encoder_cpr, serial port, wheel radius, track width и PID settings трябва да се настроят според реалния хардуер.
Препоръчителна последователност на разработка:
-
Механична валидация
- проверка на геометрията на задвижването;
- проверка на опъна на веригите/колелата;
- проверка на закрепването на моторите и изолацията на косещия модул.
-
Нискониво тестване на моторите
- тест на моторите с изключен нож;
- проверка на посоката на енкодерите;
- измерване на counts per revolution;
- PID tuning на velocity loops.
-
ROS 2 комуникационен тест
- проверка на serial връзката;
- публикуване на тестови velocity команди;
- наблюдение на
/odom,/tfи encoder topics.
-
Проверка на сензорите
- визуализация на LiDAR scan в RViz;
- проверка на IMU ориентация и frame alignment;
- проверка на timestamp consistency.
-
Симулационен тест
- стартиране на модела в симулация;
- проверка на URDF/Xacro геометрията и frames;
- тест на навигационни параметри без риск за реалния робот.
-
Картографиране и локализация
- създаване на тестова карта;
- проверка на scan matching;
- настройка на EKF и costmap параметри.
-
Полеви тестове под наблюдение
- начало с изключен нож;
- бавна teleoperation проверка;
- тест за препятствия;
- проверка на emergency stop;
- едва след това — тестове с косене.
Най-важните технически предизвикателства са:
- drift на енкодерната одометрия върху трева;
- приплъзване при skid-steer завой;
- надеждност на LiDAR навън при променлива светлина, прах и растителност;
- вибрации върху сензорните монтажи;
- електрически шум от моторите към логическата електроника;
- безопасно разделение между режещата система и навигационната електроника;
- влагоустойчивост без прегряване;
- гарантирано безопасно поведение при загуба на комуникация;
- алгоритъм за ефективно покриване на площта без повреждане на растения и бордюри.
- Добавяне на пълна root-level документация и диаграми.
- Финализиране на wiring diagrams.
- Документация на Arduino firmware.
- Документация на blade safety relay и emergency stop.
- Добавяне на battery monitoring node.
- Настройка на
ros2_controlиdiff_drive_controllerза реалния робот. - Валидация на EKF odometry + IMU fusion.
- Outdoor SLAM/localization експерименти.
- Реализация на perimeter/geofence логика.
- Алгоритъм за mowing coverage planning.
- Добавяне на видеа, снимки и резултати от полеви тестове.
- Научна оценка: localization error, coverage percentage, path efficiency, runtime и obstacle detection reliability.
За научно-инженерно представяне системата може да се оценява чрез:
| Метрика | Цел |
|---|---|
| Odometry drift | Измерва натрупаната грешка в локализацията |
| Path tracking error | Оценява точността на управлението |
| Coverage percentage | Оценява пълнотата на косене |
| Obstacle detection rate | Оценява надеждността на възприятието |
| Runtime per battery charge | Оценява енергийната ефективност |
| Communication latency | Оценява бързодействието на control loop |
| Emergency stop response time | Оценява safety реакцията |
| Slip ratio during turning | Оценява сцеплението и механиката |
| Mapping consistency | Оценява качеството на SLAM |
Тези метрики превръщат проекта от хоби прототип в документиран инженерно-научен експеримент.
GREENBOY е моя експериментална автономна ROS 2 роботизирана косачка. Проектът комбинира embedded motor control, Raspberry Pi базирана роботика, Arduino нискониво управление, LiDAR възприятие, IMU-базирана оценка на състоянието, differential-drive control, симулация и навигация. Целта е създаване на компактен автономен робот, който може да служи както като практична градинска платформа, така и като научно-инженерен тестбед за външна мобилна роботика, сензорно сливане и безопасна автономна навигация.
Ключови технологии: ROS 2, Raspberry Pi, Arduino, C++, Python, LiDAR, IMU, wheel encoders, Gazebo/Gz, RViz, Nav2-style navigation, differential drive control, embedded systems и mechatronics.
Проектът е в активна разработка. Предназначен е за научно-образователни и експериментални инженерни цели. Всеки реален тест с мотори или режещ механизъм трябва да се извършва с надзор, физически safety мерки и работещ emergency stop.
Разработен от hevrosy като експериментален проект по роботика и мехатроника.