{"id":25508952,"url":"https://github.com/bcanozter/microros-esp32","last_synced_at":"2026-05-05T14:33:08.471Z","repository":{"id":278099933,"uuid":"934427931","full_name":"bcanozter/microROS-ESP32","owner":"bcanozter","description":"microROS ESP32 programs","archived":false,"fork":false,"pushed_at":"2025-02-18T01:16:32.000Z","size":271,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-18T02:24:57.809Z","etag":null,"topics":["docker","esp-idf","esp32","esp32-camera","esp32-s3","espressif","macos","microros"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bcanozter.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-02-17T20:17:23.000Z","updated_at":"2025-02-18T01:23:02.000Z","dependencies_parsed_at":"2025-02-18T02:25:00.032Z","dependency_job_id":"120c6bc4-7e9c-4ad1-a6a5-052c7da55d95","html_url":"https://github.com/bcanozter/microROS-ESP32","commit_stats":null,"previous_names":["bcanozter/microros-esp32"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bcanozter%2FmicroROS-ESP32","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bcanozter%2FmicroROS-ESP32/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bcanozter%2FmicroROS-ESP32/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bcanozter%2FmicroROS-ESP32/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bcanozter","download_url":"https://codeload.github.com/bcanozter/microROS-ESP32/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239625242,"owners_count":19670650,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","esp-idf","esp32","esp32-camera","esp32-s3","espressif","macos","microros"],"created_at":"2025-02-19T08:31:32.204Z","updated_at":"2026-05-05T14:33:08.465Z","avatar_url":"https://github.com/bcanozter.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# microROS-ESP32\n\n## Technologies\n\n- MacOS 15.3 Intel Chip\n- Docker Engine 27.5.1\n- Docker Desktop 4.38.0\n- ROS Jazzy\n- ESP-IDF 5.2\n- ESP32-S3 with 8MB PSRAM\n\n## References\n\n- https://github.com/micro-ROS/micro_ros_espidf_component\n- https://github.com/espressif/esp32-camera\n- https://micro.ros.org/docs/tutorials/advanced/handling_type_memory/\n\n## MacOS Docker Limitation\n\nUnable to mount `/dev/tty.usb*` devices even when running docker with `--privileged` argument. Espressif has a tool to remotely connect to a serial port.\n\nIssue\n\n- https://github.com/docker/for-mac/issues/900\n\nSolution\n\n- [Remote Serial Port](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/tools/idf-docker-image.html#using-remote-serial-port)\n\n## Packages\n\nThis will be populated with different packages as I go.\n\n### camera_publisher\n\n#### Build\n\n#### Terminal 1\n\n`docker run -it --rm --user espidf --volume=\"/etc/timezone:/etc/timezone:ro\" -v  $(pwd):/microROS-ESP32 -v  /dev:/dev  --privileged --ipc host --workdir /microROS-ESP32 microros-esp32:latest /bin/bash  -c \"cd sources/camera_publisher; idf.py  --port 'rfc2217://host.docker.internal:4000?ign_set_control' menuconfig build flash monitor\"`\n\n_Ensure PSRAM is enabled. The ESP32-S3 chip I am using has a 8 MB PSRAM. PSRAM Mode is `Octal Mode PSRAM`, and the clock RAM speed is `80MHz`._\n\n_Ensure to set MicroROS Agent WIFI Adress and Port._\n\n#### Terminal 2\n\n`docker run -it --rm --privileged --ipc host  -p \"8888:8888/udp\" microros/micro-ros-agent:jazzy udp4 --port 8888 -v6`\n\n#### Terminal 3\n\n`esp_rfc2217_server.py -v -p 4000 /dev/tty.usbmodem14401`\n\n#### Output\n\nI used `rqt` to monitor the image topic and visualize. Feel free to use any other ros tool to visualize the image topic.\n\n\u003cimg src=\"/docs/screenshots/Image_Output.png\" width=\"50%\" height=\"50%\"\u003e\n\n### gpio_interrupt_publisher\n\nPublish to a ros topic on GPIO interrupt trigger.\n\n### reconnection_example\n\nThis example demonsrates the ability to reconnect to a ros agent. De-init node entities gracefully before trying to reconnect.\nThen, reinitialize necessary components in order to establish a healthy connection to the microros agent before publishing dummy data.\n\n1. Agent running as initial state.\n2. Disconnect agent. Observe `Lost connection` output.\n3. Start micro-ros agent.\n4. Confirm connection.\n\n\u003cimg src=\"/docs/screenshots/reconnection_example.png\" width=\"30%\"\u003e\n\n[micro-ROS tutorials](https://micro.ros.org/docs/tutorials/programming_rcl_rclc/micro-ROS/)\nI came across this helpful micro-ROS tutorial above where I discovered there is a way to ping agent.\n\nUsing the `rmw_uros_ping_agent` function to check connection and break the main loop.\n\n```c\nif (rmw_uros_ping_agent(100, 3) != RMW_RET_OK)\n{\n    ...\n    printf(\"Lost connection to micro-ros-agent\\n\");\n    ...\n}\n```\n\n### joystick_controller\n\n[Turtlesim](https://docs.ros.org/en/jazzy/Tutorials/Beginner-CLI-Tools/Introducing-Turtlesim/Introducing-Turtlesim.html#use-turtlesim)\n\n\u003cimg src=\"/docs/2_axis_joystick.jpg\" width=\"20%\"\u003e\n\nPublish `cmd_vel (geometry_msgs/msg/Twist)` using a 2-axis Joystick connected to esp32.\n\nUse the official ROS turtlesim to test and observe the movement on screen.\n\nResult\n\n\u003cimg src=\"/docs/screenshots/turtlesim.png\" width=\"20%\"\u003e\n\n### espnow_example\n\n\u003e TODO\n\n## Extras\n\n### Display forwarding MacOS\n\nCheck out this guide.\n\n[X11 forwarding on macOS and docker](https://gist.github.com/sorny/969fe55d85c9b0035b0109a31cbcb088)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbcanozter%2Fmicroros-esp32","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbcanozter%2Fmicroros-esp32","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbcanozter%2Fmicroros-esp32/lists"}