<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[关于wsl用户在9.4.1（9.4.2）遇到的一些问题以及如何解决]]></title><description><![CDATA[<p dir="auto">遇到了ros2 run micro_ros_agent micro_ros_agent udp4 --port 8888后没有输出的问题。<br />
遇到了单片机串口监听会有如下类似输出：</p>
<pre><code>Guru Meditation Error: Core  1 panic'ed (IllegalInstruction). Exception was unhandled.
Memory dump at 0x400d2cb0: 6cab6520 04adf01d e5201110
Core  1 register dump:
PC      : 0x400d2cb4  PS      : 0x00060730  A0      : 0x00000000  A1      : 0x3ffb4a70  
A2      : 0x3ffc3d40  A3      : 0x3ffc3cb8  A4      : 0x3ffc3d74  A5      : 0x00000000  
A6      : 0x00000000  A7      : 0x00000000  A8      : 0x800d2cb4  A9      : 0x3ffb4a50  
A10     : 0x00000001  A11     : 0xfffffffd  A12     : 0x00000000  A13     : 0x00000000  
A14     : 0x00000001  A15     : 0x3ffc3cb8  SAR     : 0x00000020  EXCCAUSE: 0x00000000  
EXCVADDR: 0x00000000  LBEG    : 0x40084681  LEND    : 0x40084689  LCOUNT  : 0x00000027  

Backtrace: 0x400d2cb1:0x3ffb4a70

ELF file SHA256: 49c2f071dd978ec8

Rebooting...
ets Jul 29 2019 12:21:46

rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0030,len:1184
load:0x40078000,len:13232
load:0x40080400,len:3028
entry 0x400805e4
</code></pre>
<p dir="auto">解决办法检查ip是否正确（wsl2可以开镜像模式，不会的问问ai）。检查WiFi是否连上，wsl用户确保防火墙给过（我就是wifi连上但是防火墙问题，也可以问问ai），wifi质量。<br />
调试的时候在代码里多加一点打印函数以确保知道哪一步出问题了。</p>
<pre><code>void microros_task(void *args)
{
    // 1.设置传输协议并延迟一段时间等待设置的完成。
    IPAddress agent_ip; // 用来存储 IP 地址。
    agent_ip.fromString("xxx"); // 电脑/手机当前的IP地址。
    set_microros_wifi_transports("xxx", "xxx", agent_ip, 8888); // 设置传输协议。告诉机器人连名称为“xxx”的WiFi，密码为“xxx”。之后去往代理服务器的IP地址为xxx，端口号为8888的地方发消息。
    Serial.print("WiFi status: ");
    Serial.println(WiFi.status() == WL_CONNECTED ? "Connected" : "Failed"); // 判断wifi是否连接上，ture则"Connected"，false则"Failed"。
    if (WiFi.status() == WL_CONNECTED) {
        Serial.print("IP: ");
        Serial.println(WiFi.localIP());
    }
    delay(2000); // 等待2秒，等待wifi连接。
    
    // 2.初始化内存分配器。
    allocator = rcl_get_default_allocator(); // 获取默认的内存分配器。
    
    // 3.初始化支持，并检查错误。
    if (rclc_support_init(&amp;support, 0, NULL, &amp;allocator) != RCL_RET_OK) { Serial.println("support init failed"); }
    // 初始化支持。使用这个默认的内存分配器 allocator（它使用标准的 malloc 和 free），在没有任何命令行参数的情况下，帮我初始化好 ROS 2 客户端库的底层环境，并把所有初始化好的状态信息都保存在 support 这个结构体里，供我后续创建节点使用。
    
    // 4.初始化节点，并检查错误。
    if (rclc_node_init_default(&amp;node, "fishbot_motion_control", "", &amp;support) != RCL_RET_OK) { Serial.println("node init failed"); }
    // 初始化节点。在由 support 提供的运行环境中，创建一个名为 fishbot_motion_control 的节点，它位于全局命名空间（""），并把这个节点的所有状态信息保存在 node 这个结构体里。
    
    // 5.初始化执行器，并检查错误。
    unsigned int num_handles = 1; // 订阅和计时器的数量，注意这是一个要改的参数（句柄的数量）。大概，比如我设置5，它就有了5个槽位，编号0-4。现在比如0-3我填满了（有东西要执行），他就会去依次询问0-3有没有执行（有没有消息），没执行要去执行他们对应的功能（有消息回调）。句柄 = 唯一识别号。
    if (rclc_executor_init(&amp;executor, &amp;support.context, 1, &amp;allocator) != RCL_RET_OK) { Serial.println("executor init failed"); }
    // 初始化执行器。使用 allocator 这个内存分配器，在 support.context 提供的 ROS 通信上下文里，初始化一个执行器 executor，让它能够管理 num_handles 个句柄（比如x个订阅者或定时器）。
    
    // 6.初始化订阅者，并将其添加到执行器中。
    rclc_subscription_init_best_effort(&amp;sub_cmd_vel, &amp;node, ROSIDL_GET_MSG_TYPE_SUPPORT(geometry_msgs, msg, Twist), "/cmd_vel"); // 订阅者句柄地址，节点句柄地址，消息类型支持（什么类型的消息）（地址），话题名称（订阅哪个话题）。ROSIDL_GET_MSG_TYPE_SUPPORT 是 ROS 2 C语言客户端库（rclc）中一个非常重要的预处理宏，它就像是订阅者与特定消息类型之间的"桥梁"或"身份证"。
    rclc_executor_add_subscription(&amp;executor, &amp;sub_cmd_vel, &amp;msg_cmd_vel, twist_callback, ON_NEW_DATA); // 执行器句柄地址，订阅者句柄地址，存放接收到的消息的内存空间的地址（消息缓冲区），回调函数，触发条件：有新数据时触发，一收到消息就执行回调。
    // 7.循环执行器。
    rclc_executor_spin(&amp;executor); // 循环执行器。它会持续地、反复地检查所有已添加到执行器的句柄（如订阅者、定时器），并处理它们对应的回调函数。只要 ROS 2 的上下文（context）保持有效，这个循环就不会停止.

    // // spin 返回说明上下文已失效;不要跑完任务,直接挂起:
    // while (1) { vTaskDelay(pdMS_TO_TICKS(1000)); } // 或 vTaskDelete(NULL);
}
</code></pre>
<p dir="auto">此外，调试的时候在setup里的打印串口不一定来得及显示，故setup（）中别忘了延迟。</p>
<pre><code>void setup()
{
    // 初始化串口。
    Serial.begin(115200); // 初始化串口通信，波特率为115200
    // delay(5000); // 测试使用，确保串口能监视。
</code></pre>
<p dir="auto">测试时，ros2 run micro_ros_agent micro_ros_agent udp4 --port 8888一直开着，小车复位就行。</p>
<p dir="auto">我之前串口显示：</p>
<pre><code>WiFi status: Connected
IP: xxx
support init failed
node init failed
</code></pre>
<p dir="auto">windows下打开powershell（管理员）</p>
<pre><code> New-NetFirewallRule -DisplayName "Micro-ROS Agent" -Direction Inbound -Action Allow -Protocol UDP -LocalPort 8888
</code></pre>
<p dir="auto">后来就没有问题了。</p>
<pre><code>~/chapt9/fishbot_ws$ ros2 run micro_ros_agent micro_ros_agent udp4 --port 8888
[1788770845.577995] info     | UDPv4AgentLinux.cpp | init                     | running...             | port: 8888
[1788770845.578219] info     | Root.cpp           | set_verbose_level        | logger setup           | verbose_level: 4
[1788770856.901357] info     | Root.cpp           | create_client            | create                 | client_key: 0x2DA90876, session_id: 0x81
[1788770856.901571] info     | SessionManager.hpp | establish_session        | session established    | client_key: 0x2DA90876, address: xxx
[1788770857.263512] info     | ProxyClient.cpp    | create_participant       | participant created    | client_key: 0x2DA90876, participant_id: 0x000(1)
[1788770857.460412] info     | ProxyClient.cpp    | create_topic             | topic created          | client_key: 0x2DA90876, topic_id: 0x000(2), participant_id: 0x000(1)
[1788770857.714279] info     | ProxyClient.cpp    | create_subscriber        | subscriber created     | client_key: 0x2DA90876, subscriber_id: 0x000(4), participant_id: 0x000(1)
[1788770857.743909] info     | ProxyClient.cpp    | create_datareader        | datareader created     | client_key: 0x2DA90876, datareader_id: 0x000(6), subscriber_id: 0x000(4)
[1788771241.953583] info     | Root.cpp           | delete_client            | delete                 | client_key: 0x2DA90876
[1788771241.953708] info     | SessionManager.hpp | destroy_session          | session closed         | client_key: 0x2DA90876, address: xxx
[1788771241.953756] info     | Root.cpp           | create_client            | create                 | client_key: 0x332EE297, session_id: 0x81
[1788771241.953773] info     | SessionManager.hpp | establish_session        | session established    | client_key: 0x332EE297, address: xxx
[1788771242.306195] info     | ProxyClient.cpp    | create_participant       | participant created    | client_key: 0x332EE297, participant_id: 0x000(1)
[1788771242.369915] info     | ProxyClient.cpp    | create_topic             | topic created          | client_key: 0x332EE297, topic_id: 0x000(2), participant_id: 0x000(1)
[1788771242.511903] info     | ProxyClient.cpp    | create_subscriber        | subscriber created     | client_key: 0x332EE297, subscriber_id: 0x000(4), participant_id: 0x000(1)
[1788771242.601624] info     | ProxyClient.cpp    | create_datareader        | datareader created     | client_key: 0x332EE297, datareader_id: 0x000(6), subscriber_id: 0x000(4)
</code></pre>
<p dir="auto">以及</p>
<pre><code>~/chapt9/fishbot_ws$ ros2 node list
/fishbot_motion_control
</code></pre>
]]></description><link>https://fishros.org.cn/forum/topic/4820/关于wsl用户在9-4-1-9-4-2-遇到的一些问题以及如何解决</link><generator>RSS for Node</generator><lastBuildDate>Mon, 07 Sep 2026 10:42:08 GMT</lastBuildDate><atom:link href="https://fishros.org.cn/forum/topic/4820.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 07 Sep 2026 09:15:41 GMT</pubDate><ttl>60</ttl></channel></rss>