https://github.com/mgonzs13/esp32_ros
https://github.com/mgonzs13/esp32_ros
Last synced: 6 days ago
JSON representation
- Host: GitHub
- URL: https://github.com/mgonzs13/esp32_ros
- Owner: mgonzs13
- License: gpl-3.0
- Created: 2025-01-20T22:34:55.000Z (4 months ago)
- Default Branch: main
- Last Pushed: 2025-01-22T09:38:45.000Z (4 months ago)
- Last Synced: 2025-01-22T10:28:46.062Z (4 months ago)
- Language: C++
- Size: 43.9 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# esp32_ros
This repository demonstrates a simple use case of **micro-ROS** with an ESP32 board (specifically the ESP32-S3) to publish Wi-Fi scan data. Additionally, it provides a service to control the board's LED.
## Installation and Usage
### 1. Install micro-ROS Setup and Agent
Follow the [official micro-ROS installation guide](https://micro.ros.org/docs/tutorials/core/first_application_linux/) to set up micro-ROS. Below is a summary of the steps:
```bash
# Source the ROS 2 installation
source /opt/ros/$ROS_DISTRO/setup.bash# Create a workspace and download the micro-ROS tools
mkdir microros_ws
cd microros_ws
git clone -b $ROS_DISTRO https://github.com/micro-ROS/micro_ros_setup.git src/micro_ros_setup# Update dependencies using rosdep and pip
sudo apt update && rosdep update
rosdep install --from-paths src --ignore-src -y
sudo apt-get install python3-pip# Build micro-ROS tools and source them
colcon build
source install/local_setup.bash# Download micro-ROS-Agent packages
ros2 run micro_ros_setup create_agent_ws.sh
ros2 run micro_ros_setup build_agent.sh
source install/local_setup.bash
```### 2. Install the Arduino IDE
Install the Arduino IDE using the following commands:
```bash
sudo apt install flatpak -y
sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
flatpak install flathub cc.arduino.arduinoide -y
```### 3. Prepare micro-ROS for Arduino
1. Download the [micro_ros_arduino](https://github.com/micro-ROS/micro_ros_arduino/releases/tag/v2.0.7-humble) library and place it in `~/Arduino/libraries`.
2. Create custom interfaces for the `esp32_msgs` package:```bash
# Copy the message package to the extra_packages directory
cp -r esp32_msgs ~/Arduino/libraries/micro_ros_arduino/extras/library_generation/extra_packages# Modify the colcon.meta file to use the parameter server in micro_ros_arduino
# You have to increase the max services to 6
# Take a look at the provided colcon.meta file in this repository
nano ~/Arduino/libraries/micro_ros_arduino/extras/library_generation/colcon.meta# Create the code for Arduino
cd ~/Arduino/libraries/micro_ros_arduino
docker run -it --rm -v $(pwd):/project --env MICROROS_LIBRARY_FOLDER=extras microros/micro_ros_static_library_builder:humble# Optional: Copy the ESP32 library for the ESP32-S3 board
cd ~/Arduino/libraries/micro_ros_arduino/src
cp -r esp32 esp32s3
```### 4. Configure the Arduino IDE
1. Open the Arduino IDE.
2. Install the **Adafruit_NeoPixel** library via `Tools > Manage Libraries`.
3. Install the **ESP32 board support package** via `Tools > Board > Board Manager`.
4. Select the correct port (`/dev/ttyACM0`) and the board (`ESP32S3 DEV Module`).### 5. Load the Code and Run the micro-ROS Agent
1. Load the code from the `esp32_node` directory onto the ESP32 board using the Arduino IDE.
2. Start the micro-ROS agent:```bash
ros2 run micro_ros_agent micro_ros_agent serial --dev /dev/ttyACM0
```### 6. Verify the Setup
- Check the `/wifi_scan` topic:
```bash
ros2 topic echo /wifi_scan
```- Test the `/set_led_color` service:
```bash
ros2 service call /set_led_color esp32_msgs/srv/SetLedColor "{'color': {'r': 1, 'g': 0, 'b': 1}}"
```## Additional Notes
- The `esp32_msgs` package defines the custom message and service types used in this project.
- Ensure all dependencies are properly installed to avoid build or runtime issues.---
This project showcases the seamless integration of an ESP32-S3 board with ROS 2 using micro-ROS, providing an excellent starting point for robotics projects requiring lightweight and efficient communication between devices.