【花雕学编程】Arduino BLDC 之模糊逻辑避障控制机器人

【花雕学编程】Arduino BLDC 之模糊逻辑避障控制机器人

基于 Arduino 的无刷直流电机(BLDC)模糊逻辑避障控制机器人,是将智能控制理论与高效动力系统相结合的典范。它摒弃了传统避障算法中对精确数学模型的依赖,转而模拟人类的经验决策过程,使机器人在复杂、不确定的环境中表现出更强的适应性和鲁棒性。

1、主要特点
基于模糊逻辑的智能决策机制
模糊逻辑控制(FLC)的核心在于处理“不确定性”和“模糊性”,这使其在动态避障中具有天然优势。
突破二值逻辑: 传统控制基于“是/否”、“0/1”的二值逻辑,而模糊逻辑引入了“隶属度函数”,允许变量处于“部分真”的状态。例如,距离不再是具体的“30cm”,而是“较近”、“适中”或“较远”的模糊概念。这种描述方式更贴近人类处理环境信息的方式。
仿人经验控制: 系统通过预设的“If-Then”规则库(如“如果前方距离很近,且左侧距离较远,则向左急转”)来模拟驾驶员的决策过程。这种语言化的控制规则易于理解和调整,无需对机器人的运动学或动力学进行复杂的数学建模。
强大的环境适应性与鲁棒性
在实际运行中,传感器数据往往带有噪声,且环境是动态变化的。
抗干扰能力强: 模糊逻辑对传感器的微小噪声和测量误差不敏感。即使超声波传感器偶尔出现跳变,模糊控制器也能根据隶属度函数平滑地处理这些数据,避免机器人产生剧烈的抖动或误判。
参数自适应: 高级的模糊控制器可以设计为自适应系统,能够根据环境的复杂程度动态调整控制参数(如 PWM 占空比的调整幅度)。当环境简单时,机器人可以快速通过;当环境复杂(如障碍物密集)时,自动切换到谨慎慢速模式。
高动态响应的 BLDC 执行系统
模糊决策需要快速、精准的物理执行,BLDC 电机在此扮演着关键角色。
快速启停与差速转向: BLDC 电机具备高功率密度和快速的动态响应能力,能够迅速执行模糊控制器发出的加减速指令。配合差速驱动架构,机器人可以实现原地转向、急停和快速倒车等高难度避障动作。
高效稳定运行: 相较于有刷电机,BLDC 电机效率高、发热低、寿命长,能够保证机器人在长时间、频繁启停的避障任务中稳定运行,不易因过热而降额。

2、应用场景
该技术方案凭借其高鲁棒性和强适应性,主要应用于环境复杂、难以建模或对可靠性要求极高的场合:
非结构化环境勘探: 在地震废墟、洞穴、丛林等未知且地形复杂的环境中,机器人无法依赖预先构建的地图。模糊避障系统能使其自主应对各种突发的障碍物(如碎石、树木),进行探索和搜救任务。
农业自动化: 在农田中进行自动巡检或喷洒作业时,环境充满动态变化的障碍物(如农作物、沟渠、动物)。模糊逻辑能有效处理这些非刚性、非规则障碍物的识别与避让。
家庭服务机器人: 用于家庭清洁或陪伴的机器人,需要在杂乱的家具、电线和移动的宠物之间穿梭。模糊控制能确保其在这些动态、拥挤的环境中安全运行,避免碰撞。
工业 AGV 在人机协作区: 当自动导引车(AGV)需要在人员密集的车间或仓库中运行时,传统的路径规划可能失效。模糊避障系统能使其灵活地绕开随机走动的工人或临时堆放的货物。

3、注意的事项
设计一个高性能的模糊避障系统是一项挑战,需重点关注规则库设计、传感器融合及系统稳定性:
规则库的设计与优化
规则完备性: 模糊规则库必须覆盖所有可能的环境状态组合(如“前方近、左侧远、右侧近”等)。规则缺失会导致在某些特定场景下无输出,机器人失控。
规则冲突与调整: 初始规则通常基于经验试凑,可能不够优化。需要通过大量的实地测试,观察机器人的避障轨迹,并反复调整隶属度函数的形状和规则库的内容,以消除震荡或死锁现象。
多传感器融合与数据预处理
传感器选型与布局: 单一传感器(如仅用超声波)存在盲区和精度限制。建议融合超声波(测距远)、红外/ToF(精度高、响应快)甚至激光雷达(构建局部地图)的数据。传感器的物理布局(前、左前、右前)应能构建完整的前方环境轮廓。
数据滤波: 尽管模糊逻辑对噪声有容忍度,但剧烈的跳变仍会影响控制质量。在输入模糊控制器前,应对传感器数据进行滑动平均或中值滤波处理。
系统实时性与硬件资源
计算延迟: 模糊推理(特别是复杂的规则库和重心法去模糊化)需要一定的计算时间。在 Arduino 上实现时,需优化代码效率,确保控制周期(Loop Time)足够短(如 < 50ms),以保证避障的实时性。
硬件选型: 对于复杂的多传感器融合和高级模糊算法,8 位的 Arduino Uno 可能算力不足。建议选用 32 位的 Arduino Due、Teensy 或 ESP32 等高性能开发板。
安全与故障冗余
硬限位保护: 模糊逻辑是软件层面的控制,一旦软件跑飞或传感器完全失效,机器人可能“撞墙”。必须设计硬件层面的急停按钮或碰撞开关,作为最后一道安全防线。
失效保护机制: 在程序中应植入看门狗(Watchdog)和传感器自检功能。一旦检测到关键传感器(如前方主测距传感器)失效,应立即进入安全模式(如减速停止)。

在这里插入图片描述


1、基础三传感器模糊避障(左、中、右)
场景:使用三个超声波传感器(左、前、右),根据距离模糊判断,控制机器人转向。

// 电机引脚constint pwmLeft =9, pwmRight =10;// 超声波引脚constint trigL =2, echoL =3;// 左constint trigF =4, echoF =5;// 前constint trigR =6, echoR =7;// 右// 模糊集定义// 输入:距离 (cm) 分为三个模糊集: 近(NEAR), 中(MID), 远(FAR)// 输出:转向力度 (-255 到 255): 左大转, 左小转, 直行, 右小转, 右大转// 读取距离函数intgetDistance(int trig,int echo){digitalWrite(trig, LOW);delayMicroseconds(2);digitalWrite(trig, HIGH);delayMicroseconds(10);digitalWrite(trig, LOW);long duration =pulseIn(echo, HIGH);return duration *0.034/2;}voidsetup(){pinMode(pwmLeft, OUTPUT);pinMode(pwmRight, OUTPUT);pinMode(trigL, OUTPUT);pinMode(echoL, INPUT);pinMode(trigF, OUTPUT);pinMode(echoF, INPUT);pinMode(trigR, OUTPUT);pinMode(echoR, INPUT); Serial.begin(9600);}voidloop(){int distL =getDistance(trigL, echoL);int distF =getDistance(trigF, echoF);int distR =getDistance(trigR, echoR);// 模糊化输入// 这里简化处理:直接根据距离范围计算隶属度// 定义: 近(0-20), 中(20-50), 远(50+)// 计算左右轮速度偏差 (模糊输出)int bias =0;// 正值表示右转,负值表示左转// --- 模糊规则库 ---// 规则1: 如果前方近,且左右差不多,则随机大转if(distF <20&&abs(distL - distR)<10){ bias =(random(2)==0)?-200:200;// 随机左或右大转}// 规则2: 如果前方近,且左边比右边远,则左转elseif(distF <20&& distL > distR){ bias =-150;// 左转}// 规则3: 如果前方近,且右边比左边远,则右转elseif(distF <20&& distR > distL){ bias =150;// 右转}// 规则4: 如果前方中,且左边很近,则右小转elseif(distF >=20&& distF <50&& distL <15){ bias =80;}// 规则5: 如果前方中,且右边很近,则左小转elseif(distF >=20&& distF <50&& distR <15){ bias =-80;}// 规则6: 其他情况直行else{ bias =0;}// 应用输出到电机int baseSpeed =180;int leftSpeed = baseSpeed + bias;int rightSpeed = baseSpeed - bias;// 限制范围 leftSpeed =constrain(leftSpeed,0,255); rightSpeed =constrain(rightSpeed,0,255);analogWrite(pwmLeft, leftSpeed);analogWrite(pwmRight, rightSpeed);delay(100);}

2、五传感器模糊巡墙(沿墙行走)
场景:使用五个红外测距传感器(模拟值),实现更精准的沿墙模糊控制。

// 传感器引脚 (模拟输入)constint irLeftFar = A0;// 左远constint irLeftNear = A1;// 左近constint irFront = A2;// 前constint irRightNear = A3;// 右近constint irRightFar = A4;// 右远// 电机引脚constint pwmLeft =9, pwmRight =10;// 模糊变量int error =0;// 位置误差: 负值偏左,正值偏右voidsetup(){pinMode(pwmLeft, OUTPUT);pinMode(pwmRight, OUTPUT); Serial.begin(9600);}voidloop(){int valLF =analogRead(irLeftFar);int valLN =analogRead(irLeftNear);int valF =analogRead(irFront);int valRN =analogRead(irRightNear);int valRF =analogRead(irRightFar);// 模糊化处理:计算误差// 规则: 如果左近传感器读数大(靠近墙),误差为负if(valLN >600){ error =-2;// 偏左严重}elseif(valLN >400){ error =-1;// 偏左一点}// 如果右近传感器读数大elseif(valRN >600){ error =2;// 偏右严重}elseif(valRN >400){ error =1;// 偏右一点}// 如果前方有障碍elseif(valF >500){ error =10;// 特殊值,触发转向}else{ error =0;// 居中}// 模糊输出:计算转向修正量int correction =0;switch(error){case-2: correction =-120;break;// 急右转case-1: correction =-60;break;// 缓右转case0: correction =0;break;// 直行case1: correction =60;break;// 缓左转case2: correction =120;break;// 急左转case10: correction =180;break;// 遇到前方障碍,左大转}// 应用电机控制int baseSpeed =150;int leftSpeed = baseSpeed + correction;int rightSpeed = baseSpeed - correction; leftSpeed =constrain(leftSpeed,0,255); rightSpeed =constrain(rightSpeed,0,255);analogWrite(pwmLeft, leftSpeed);analogWrite(pwmRight, rightSpeed);// 调试输出 Serial.print("Error: "); Serial.print(error); Serial.print(" | L: "); Serial.print(leftSpeed); Serial.print(" | R: "); Serial.println(rightSpeed);delay(50);}

3、带输出平滑滤波的模糊控制
场景:在模糊逻辑输出后加入低通滤波(Low Pass Filter),消除传感器噪声导致的电机高频抖动。

// 传感器和电机引脚定义同案例一// 滤波参数float alpha =0.3;// 滤波系数 (0-1), 越大越平滑,但响应越慢int filteredBias =0;// 滤波后的偏差值int lastBias =0;voidsetup(){// 初始化...}voidloop(){int distL =getDistance(trigL, echoL);int distF =getDistance(trigF, echoF);int distR =getDistance(trigR, echoR);// 模糊逻辑计算 rawBias (同案例一)int rawBias =0;if(distF <20){if(distL > distR) rawBias =-150;else rawBias =150;}elseif(distL <15){ rawBias =80;}elseif(distR <15){ rawBias =-80;}// --- 关键:输出平滑滤波 ---// 一阶低通滤波: filtered = alpha * new + (1-alpha) * old filteredBias = alpha * rawBias +(1- alpha)* lastBias; lastBias = filteredBias;// 只有当偏差变化足够大时才更新电机,减少微小抖动if(abs(filteredBias - lastBias)>5){int baseSpeed =180;int leftSpeed = baseSpeed + filteredBias;int rightSpeed = baseSpeed - filteredBias; leftSpeed =constrain(leftSpeed,0,255); rightSpeed =constrain(rightSpeed,0,255);analogWrite(pwmLeft, leftSpeed);analogWrite(pwmRight, rightSpeed);}delay(50);}

要点解读
模糊逻辑 vs. 传统阈值控制
传统控制:使用硬阈值(如 if (dist < 20) turn();),动作生硬,容易在临界点振荡。
模糊控制:使用隶属度函数(Membership Function)。例如,距离 18cm 既属于“近”也属于“中”,系统会综合计算,输出平滑的转向指令,动作更自然、仿生。
模糊规则库的设计原则
规则数量:规则不是越多越好。通常3-5个输入变量,每个变量3个模糊集,规则数在 10-20 条左右即可覆盖大多数场景。
规则互斥:确保规则之间没有严重冲突。例如,不能同时存在“左边近则左转”和“左边近则右转”的规则(除非有其他条件约束)。
去模糊化(Defuzzification)方法
重心法(Centroid):最常用,计算加权平均,输出最平滑。
最大值平均法:计算简单,但输出可能跳变。
简化处理:在 Arduino 等资源有限的平台,常使用查表法或简化规则直接输出数值(如案例中的 switch-case),以节省计算时间。
传感器噪声与滤波
必然性:超声波和红外传感器都有噪声。模糊逻辑本身对噪声有一定容忍度,但高频噪声仍会导致电机高频抖动。
解决方案:如案例三所示,在模糊输出后加入软件低通滤波。或者,在模糊化输入前,对原始传感器数据进行移动平均滤波。
调试与可视化
串口绘图器:Arduino IDE 自带的“串口绘图器(Serial Plotter)”是调试模糊系统的神器。
调试技巧:将输入变量(距离)、模糊输出(偏差)通过 Serial.print()输出,在绘图器上观察曲线是否平滑,规则触发是否合理。

在这里插入图片描述


4、超声波模糊避障小车(基于SimpleFOC)
功能
小车通过超声波传感器检测障碍物距离,模糊逻辑控制BLDC电机速度和转向,实现避障。

#include<SimpleFOC.h>#include<NewPing.h>// 超声波传感器配置#defineTRIGGER_PIN12#defineECHO_PIN11#defineMAX_DISTANCE200 NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);// BLDC电机配置 BLDCMotor motor =BLDCMotor(7);// 7极对数 BLDCDriver3PWM driver =BLDCDriver3PWM(5,6,7);// PWM引脚// 模糊逻辑输入/输出变量float distance, leftSpeed, rightSpeed;// 模糊规则表(简化版)voidfuzzyControl(){if(distance <10){// 极近 leftSpeed =-0.5; rightSpeed =-0.5;// 后退}elseif(distance <30){// 近 leftSpeed =0.3; rightSpeed =-0.3;// 右转}elseif(distance <50){// 中等 leftSpeed =0.5; rightSpeed =0.5;// 前进}else{// 远 leftSpeed =0.8; rightSpeed =0.8;// 快速前进}}voidsetup(){ Serial.begin(115200);// BLDC初始化 driver.init(); motor.linkDriver(&driver); motor.controller = MotionControlType::velocity; motor.init(); motor.initFOC();}voidloop(){// 读取超声波距离(模糊输入) distance = sonar.ping_cm();if(distance ==0) distance = MAX_DISTANCE;// 过滤无效值// 模糊逻辑决策fuzzyControl();// 执行电机控制(左右轮差速) motor.move(leftSpeed);// 左轮速度(需扩展为双轮差速控制)// 注:实际需两个BLDC电机分别控制左右轮,此处简化delay(100);}

5、红外+超声波多传感器融合避障(带方向权重)
功能
机器人结合红外(侧向避障)和超声波(前方避障)数据,模糊逻辑优化路径选择。

#include<NewPing.h>// 传感器配置#defineFRONT_TRIG12#defineFRONT_ECHO11#defineLEFT_IRA0#defineRIGHT_IRA1 NewPing frontSonar(FRONT_TRIG, FRONT_ECHO,200);// BLDC电机配置(双轮差速)#include<Servo.h> Servo leftMotor, rightMotor;// 模糊逻辑变量float frontDist, leftObstacle, rightObstacle;float turnWeight =0;// -1(左转)到 1(右转)voidfuzzyFusion(){// 前方距离模糊化float frontWeight =0;if(frontDist <15) frontWeight =1.0;// 必须转向elseif(frontDist <40) frontWeight =0.5;// 需调整方向else frontWeight =0;// 直行// 侧向红外模糊化(值越小障碍越近)float leftWeight =constrain(map(analogRead(LEFT_IR),300,1023,0,1),0,1);float rightWeight =constrain(map(analogRead(RIGHT_IR),300,1023,0,1),0,1);// 综合决策(简化规则) turnWeight = frontWeight *0.6+(leftWeight - rightWeight)*0.4;}voidsetup(){ Serial.begin(9600); leftMotor.attach(5); rightMotor.attach(6);}voidloop(){// 读取传感器 frontDist = frontSonar.ping_cm();if(frontDist ==0) frontDist =200;// 模糊决策fuzzyFusion();// 电机控制(差速转向)int baseSpeed =1500;// 中立脉宽(1000-2000μs)int turnOffset = turnWeight *300;// 转向偏移量 leftMotor.writeMicroseconds(baseSpeed - turnOffset); rightMotor.writeMicroseconds(baseSpeed + turnOffset);delay(50);}

6、动态障碍物追踪与避障(结合PID+模糊逻辑)
功能
机器人追踪移动目标(如颜色标记),同时通过模糊逻辑动态避障。

#include<NewPing.h>#include<SimpleFOC.h>// 传感器配置#defineFRONT_TRIG12#defineFRONT_ECHO11#defineCAMERA_PINA0 // 模拟摄像头输入(简化) NewPing sonar(FRONT_TRIG, FRONT_ECHO,200);// BLDC电机配置(全向轮驱动) BLDCMotor motor1 =BLDCMotor(7); BLDCMotor motor2 =BLDCMotor(7); BLDCDriver3PWM driver1 =BLDCDriver3PWM(5,6,7); BLDCDriver3PWM driver2 =BLDCDriver3PWM(8,9,10);// 模糊逻辑变量float targetAngle, obstacleDist;float moveX, moveY, rotate;voidfuzzyTracking(){// 目标方向模糊化(摄像头输入)int camValue =analogRead(CAMERA_PIN); targetAngle =map(camValue,0,1023,-90,90);// 假设摄像头输出角度// 障碍物距离模糊化float distWeight =0;if(obstacleDist <20) distWeight =1.0;// 紧急避障elseif(obstacleDist <50) distWeight =0.5;// 避障优先else distWeight =0;// 追踪优先// 输出决策(简化规则) moveX =0.8*(1- distWeight);// 前进权重 moveY =0;// 假设全向轮可侧移 rotate = targetAngle *0.01- distWeight *0.5;// 目标追踪+避障转向}voidsetup(){ Serial.begin(115200); driver1.init(); driver2.init(); motor1.linkDriver(&driver1); motor2.linkDriver(&driver2); motor1.init(); motor2.init();}voidloop(){// 读取传感器 obstacleDist = sonar.ping_cm();if(obstacleDist ==0) obstacleDist =200;// 模糊决策fuzzyTracking();// 执行全向轮控制(需转换为三相BLDC的PWM)// 此处简化:实际需将moveX/moveY/rotate转换为各电机速度 Serial.print("Move: "); Serial.print(moveX); Serial.print(", Rotate: "); Serial.println(rotate);delay(100);}

要点解读
模糊逻辑的输入模糊化
传感器数据处理:将原始距离(如超声波的cm值)转换为模糊集合(如“近”“远”)。
多传感器融合:案例5结合红外和超声波权重,避免单一传感器局限性。
模糊规则设计
经验规则:基于人类避障逻辑(如“前方近障碍→转向”)。
规则冲突解决:案例6通过加权(distWeight)平衡追踪与避障优先级。
BLDC电机控制适配
差速转向:案例4和5通过左右轮速度差实现转向(需双BLDC电机)。
全向运动:案例6需更复杂的运动学解算(如麦克纳姆轮)。
实时性与去抖动
传感器滤波:对超声波/红外数据取滑动平均(案例中未体现,但建议添加)。
控制频率:模糊逻辑计算周期应与电机控制周期匹配(如100Hz)。
硬件优化建议
低延迟驱动:BLDC需高性能驱动器(如SimpleFOC支持的正弦波驱动)。
紧急停止:添加“急停”规则(如超声波距离<5cm时全制动)。
调试接口:通过串口输出模糊变量(如案例6的Serial.print)辅助调参。

注意,以上案例只是为了拓展思路,仅供参考。它们可能有错误、不适用或者无法编译。您的硬件平台、使用场景和Arduino版本可能影响使用方法的选择。实际编程时,您要根据自己的硬件配置、使用场景和具体需求进行调整,并多次实际测试。您还要正确连接硬件,了解所用传感器和设备的规范和特性。涉及硬件操作的代码,您要在使用前确认引脚和电平等参数的正确性和安全性。

在这里插入图片描述

Read more

【JavaSE-网络部分04】网络原理-传输层:UDP + TCP 可靠性三大核心机制(确认应答 / 超时重传 / 连接管理)

【JavaSE-网络部分04】网络原理-传输层:UDP + TCP 可靠性三大核心机制(确认应答 / 超时重传 / 连接管理)

传输层的学习 传输层我们说过最核心的协议是TCP和UDP。 那么在这里面我们再谈一下端口号。 再谈端口号 我们说端口号是用整数表示,用来区分同一台主机上不同的应用程序。 我们前面在网络编程冲每个程序中的socket创建的时候都需要关联端口号,那么对于服务器来说,端口号是程序员的手动指定的;而对于我们的客户端来说,端口号是系统自动分配的。 端口号是由两个字节表示的无符号整数 * 范围:0~65535。 虽然它的范围呢比较多,但是呢并不是所有的数都能是可以使用的。 * 0~1023 这样的范围通常我们是不使用的,他们叫做知名端口号,是给一些知名的服务器预留的。 虽然现在我们知名的服务器没有太多,已经寥寥无几了,但是呢有两个知名的端口,一定要重点认识。 * 80 ==> 这个是给HTTP服务器留的端口号。 * 443 ==》 这个是给HTTPS服务器留的端口。 问题1:一个进程是否可以绑定多个端口号? 答:这个是完全可以的,但是注意其实不是进程绑定端口号,而是我们的socket绑定端口,我们一个进程中完全可以创建多个socket,所以呢可以同时关联到多个端口号

By Ne0inhk
从 Spring Boot 3+Java 21 到 Spring Boot 4+Java 25:迁移全指南

从 Spring Boot 3+Java 21 到 Spring Boot 4+Java 25:迁移全指南

随着 Spring Boot 4 正式发布(基于 Spring Framework 6.2)和 Java 25 LTS 的落地,不少团队开始规划升级路线。从 Spring Boot 3+Java 21 迁移到新组合,既要适配框架的新特性,也要利用 Java 25 的性能红利,同时避开兼容性陷阱。本文整理了核心注意要点,帮你平稳过渡~ 一、📋迁移前必做:环境与依赖自查 1. 基础环境适配 * Java 版本门槛:Spring Boot 4 要求最低 Java 25(不再支持 Java 21 及以下),需先升级 JDK

By Ne0inhk

java: 警告: 源发行版 17 需要目标发行版 17

错误 java: 警告: 源发行版 17 需要目标发行版 17 要解决“java: 无效的目标发行版: 17”错误,需从JDK版本、构建工具配置、环境变量、IDE设置、依赖兼容性五个维度系统性排查。以下是具体步骤和解决方案: 一、验证JDK版本与一致性 1. 安装JDK 17: * 官方下载:Oracle JDK 17 * 开源替代:Adoptium Temurin JDK 17 验证构建工具使用的JDK: mvn -v# Maven使用的JDK版本 gradle -v# Gradle使用的JDK版本 确保与项目配置的JDK 17一致。 检查已安装的JDK版本: java-version javac -version 确保输出显示JDK 17(如17.0.11)

By Ne0inhk
飞算JavaAI全流程实操指南:从需求到部署的智能开发体验

飞算JavaAI全流程实操指南:从需求到部署的智能开发体验

引言 作为Java开发者,你是否也曾陷入这样的循环:需求文档翻来覆去读半天,接口设计改了又改,代码敲到手指发麻,调试时还得对着SQL报错抓头发?传统开发中80%的时间都耗在重复编码、逻辑校验、文档撰写上,真正留给业务创新的精力少得可怜。而今天,飞算JavaAI的出现正在重构这一切——从自然语言需求到可部署工程,全流程智能化让开发效率实现质的飞跃。接下来,我们就通过实战案例带你体验这场开发革命。 文章目录 * 引言 * 一、智能引导设计实战:3步完成需求到代码的转化 * 二、代码生成与调优:从基础框架到企业级实践 * 三、工程构建与文档生成:一键完成项目交付 * 四、同类产品对比:飞算JavaAI的核心优势 * 结语: 一、智能引导设计实战:3步完成需求到代码的转化 当产品经理甩来一句“做个员工绩效查询功能”时,你不用再纠结“接口参数怎么定”“分页逻辑放哪层”。飞算JavaAI的智能引导设计,让需求到代码的转化像聊天一样简单。 1.1 自然语言描述和需求理解:怎么说,AI就怎么懂 不用写规范的PRD,

By Ne0inhk