Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

Can't create subscriber on ESP32-C3

未关闭
#216 9 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

评估

难度
4/5
预计耗时
3-5 天
新手友好度
38/100
Issue 类型
缺陷
描述清晰度
基本清楚
活跃度
冷清
技术栈
c, docker
领域
embedded-iot

调研方向

从 examples/int32_sub_pub 和 ping_pong 开始,然后沿着 monitor backtrace 中显示的订阅设置追踪到 rmw_wait;与 int32_publisher 进行比较,并检查 subscriber_bug.txt。使用提供的 Dockerfile 和 ESP32-C3 步骤重现该问题。当 subscriber 示例能够在不发生 panic 的情况下运行,并且通过 agent 可以看到预期的两个 topic 时,即表示完成。

由索引模型根据 Issue 内容生成。

描述

Problem description

I have recently started to experiment with micro-ROS. While the examples involving just publishers such as int32_publisher are running fine, if I run any example involving a subscriber such as int32_sub_pub or ping_pong according to the official documentation using the provided Dockerfile this results in a stack dump.

  • Hardware description: Seeed Studio Xiao ESP32C3/ESP32-C3-MINI-1
  • RTOS: FreeRTOS
  • Installation type: micro_ros_espidf_component
  • Version or commit hash: humble (27158f2369bd7bd02ce3cda61a785bf32ce10883)
Steps to reproduce the issue

In order to replicate this flash the ESP32-C3 board with one of the examples involving a subscriber (in the following I will make use of int32_sub_pub). In my case I open it in the container with the provided Dockerfile in interactive mode:

$ export LC_ALL=C # Override locale settings
$ . $IDF_PATH/export.sh
$ cd examples/int32_sub_pub
$ idf.py set-target esp32c3
$ idf.py menuconfig
# Set micro-ROS agent Settings ->
#   WiFi configuration ->
#     WiFI SSID (test_hotspot)
#     WiFI Password (test_password)
#   micro-ROS Agent IP (10.42.0.1)
$ idf.py build
$ sudo chmod o+rw /dev/ttyACM0 # Allow to write to device file
$ idf.py flash

connect both micro-controller and computer to the same hotspot, in my case a self-hosted hotspot, then run the micro-ROS agent on the computer (10.42.0.1)

$ docker run -it --rm --net=host microros/micro-ros-agent:humble udp4 --port 8888 -v6

and finally monitor the ESP32-C3 with:

$ idf.py monitor
Expected behavior

The ESP-C3 should publish its messages to the micro-ROS agent on the int32_publisher topic and wait for messages on the int32_subscriber topic. I should be able to see both topics on the micro-ROS agent side.

Actual behavior

The ESP32-C3 runs into a stack dump and reboots (For a full output see subscriber_bug.txt):

I (1599) main_task: Returned from app_main()
Guru Meditation Error: Core  0 panic'ed (Illegal instruction). Exception was unhandled.

Stack dump detected
Core  0 register dump:
MEPC    : 0x42015a2e  RA      : 0x4201596c  SP      : 0x3fcad780  GP      : 0x3fc91400  
0x42015a2e: rmw_wait at ??:?

0x4201596c: rmw_wait at ??:?

TP      : 0x3fc901b8  T0      : 0x4005890e  T1      : 0x0000000c  T2      : 0x00068081  
S0/FP   : 0x3fc94350  S1      : 0x3fcadafc  A0      : 0x3fca9a58  A1      : 0x00001000  
A2      : 0x00001000  A3      : 0x00000001  A4      : 0xffffffff  A5      : 0x00000001  
A6      : 0x00000000  A7      : 0xf4240000  S2      : 0x3fcadaf0  S3      : 0x00000064  
S4      : 0x3fcadb08  S5      : 0x3fcadb14  S6      : 0x05f5e100  S7      : 0x00000000  
S8      : 0x00000000  S9      : 0x3fcad8c4  S10     : 0x3fcadaec  S11     : 0x00000000  
T3      : 0x00000975  T4      : 0x00000000  T5      : 0x4200a2c8  T6      : 0x4200a2d0  
0x4200a2c8: __default_deallocate at allocator.c:?

0x4200a2d0: __default_allocate at allocator.c:?

MSTATUS : 0x00001881  MTVEC   : 0x40380001  MCAUSE  : 0x00000002  MTVAL   : 0xd009f7d3  
0x40380001: _vector_table at ??:?

MHARTID : 0x00000000  

Backtrace:

0x42015a2e in rmw_wait ()
#0  0x42015a2e in rmw_wait ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
ELF file SHA256: dc5c59390d980376
Rebooting...
Additional information

I have tried the following already to no avail, the problem stays the very same:

  • Reflash the ESP32 several times
  • Try a different ESP32 I had lying around
  • Change hotspot
  • Switch to ROS 2 Iron instead of Humble
  • Remove the publisher, being left with an example with only a subscriber
  • Doubled the statically allocated memory to 32000 Bytes for the ROS task in $ idf.py menuconfig under micro-ROS example-app settings/Stack the micro-ROS app (Bytes)
  • Added the following options to colcon.meta and proceed with a clean build, cleaning the workspace first with $ idf.py clean-microros:

If I comment the line that adds the subscription to the executor, e.g. RCCHECK(rclc_executor_add_subscription(&executor, &subscriber, &recv_msg, &subscription_callback, ON_NEW_DATA)); the publisher runs just fine while clearly the subscriber will not work.

Any input is highly appreciated!

主要语言
C
星标
419
派生
124
PR 合并指标
30 天内没有已合并 PR

环境准备

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

micro-ROS/micro_ros_espidf_component 的其他 Issue

查看 micro-ROS/micro_ros_espidf_component 的全部 Issue

相似的 Issue

更多 C Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。