基于CRICKIT与蓝牙的双足机器人:从机械原理到手机遥控实践

news2026/5/17 4:49:34
1. 项目概述一个会“翻跟头”的蓝牙机器人如果你玩腻了循迹小车或者舵机云台想做一个动作更“魔性”、互动性更强的机器人那么这个基于CRICKIT和Feather M0 Bluefruit的双足机器人绝对能让你眼前一亮。它走起路来不是平稳前进而是像踩高跷一样左右摇摆、一蹦一跳动作滑稽得让人忍俊不禁我儿子管它叫“醉汉机器人”。更棒的是你可以完全通过手机蓝牙来遥控它让它前进、后退、原地转圈甚至预设一套自动舞蹈动作。这个项目的核心是用一种极其巧妙的机械结构——三角形连杆腿配合两个独立的TT减速电机模拟出一种独特的步态。整个机器人的“大脑”和“肌肉”分别由Adafruit的Feather M0 Bluefruit微控制器和CRICKIT扩展板担当。Feather负责蓝牙通信和逻辑控制CRICKIT则提供了稳定可靠的电机驱动能力。所有结构件都可以通过3D打印获得这意味着你不需要高超的木工或金属加工技能只要有一台3D打印机就能把一堆零件变成活蹦乱跳的机器人。我之所以花时间折腾这个项目是因为它完美地融合了机械设计、电子电路和嵌入式编程的乐趣。它不像一些套件那样“傻瓜式”组装你需要理解电机如何通过连杆带动腿部需要焊接线路需要编写和调试Arduino代码。但整个过程又不会过于艰深最终的成果——一个能用手机操控的、个性十足的小机器人——所带来的成就感是巨大的。无论你是想学习机器人入门还是寻找一个有趣的周末项目它都是一个绝佳的选择。2. 核心硬件选型与设计思路解析2.1 为什么是CRICKIT Feather M0 Bluefruit在开始动手之前搞清楚我们为什么选用这套硬件组合至关重要。市面上能驱动电机的开发板很多比如直接用Arduino Uno加L298N电机驱动模块成本可能更低。但CRICKITFeather的方案在快速原型开发上有着无可比拟的优势。首先集成度与可靠性。CRICKIT本质上是一个为微控制器设计的“外设集线器”。它通过I2C与主控板通信集成了4路舵机驱动、2路直流电机驱动可驱动4线步进电机、大功率NeoPixel驱动、电容触摸输入以及多个模拟/数字IO口。对于这个双足机器人项目我们最看重的是它那两路独立的直流电机驱动通道。每个通道都集成了H桥电路和必要的保护元件如反电动势续流二极管能提供高达1A的连续电流驱动我们选用的TT电机绰绰有余。这意味着你不需要自己搭建H桥电路避免了接线错误烧毁MOS管的风险电源和信号接口都做了防反接和滤波处理非常省心。其次软件生态与易用性。Adafruit为其硬件提供了极其完善的Arduino库支持。Adafruit_Crickit库和seesaw_motor库让控制电机变得像调用digitalWrite()一样简单。你不需要去研究PWM占空比与电机速度的关系库函数已经帮你封装好了throttle(speed)这样的方法速度范围从-1.0全速反转到1.0全速正转。这大大降低了编程门槛让你能专注于机器人的行为逻辑。再者Feather M0 Bluefruit的无线能力。Feather是一个引脚兼容的微控制器系列而M0 Bluefruit版本集成了Nordic nRF52832蓝牙低能耗BLE芯片。这颗芯片性能强大足以同时运行我们的控制程序和处理稳定的蓝牙连接。通过Adafruit Bluefruit LE Connect手机App我们可以轻松建立一个控制器界面用虚拟摇杆或按钮向机器人发送指令。这种“手机即遥控器”的方式比传统的红外遥控或2.4G射频方案更灵活交互界面也可以自定义体验更好。最后形态与供电。Feather板可以直接插在CRICKIT FeatherWing上形成一个紧凑的叠层结构非常适合嵌入到机器人身体内部。供电方面CRICKIT有一个宽电压5V-12V的直流电源输入口我们可以灵活选择电池方案。注意虽然原项目提到了使用3节AA电池盒的方案但我强烈建议你选择“锂聚合物电池LiPo升压转换器”的方案。原因很简单电机在启动和堵转时会产生很大的瞬时电流导致电池电压瞬间跌落。普通的碱性AA电池内阻较大电压跌落会更严重可能导致Feather板复位或CRICKIT工作不稳定。而LiPo电池内阻小放电能力强再经过一个优质的升压模块如Adafruit PowerBoost 1000C提供稳定的5V输出整个系统会稳定得多。虽然成本稍高但体验提升是质的飞跃。2.2 机械结构三角形连杆的魔力这个机器人行走的秘密全在于它的机械结构。它不是用舵机直接旋转腿部而是用一个简单的旋转运动通过连杆机构转化成了腿部复杂的复合运动。核心原理每个“腿”实际上是一个三角形框架。三角形的一个顶点连接在机器人的侧板上作为固定铰链另一个顶点连接着电机的输出轴作为驱动点第三个顶点则是与地面接触的“脚”。当电机旋转时驱动点会做圆周运动带动整个三角形框架运动。由于固定铰链的约束三角形的“脚”点就会划出一条奇特的曲线轨迹——既有前后的位移也有上下的起伏。双电机独立控制的意义原版的“Flippy Robot”只用一个电机驱动两侧的腿结构简单但只能直行。我们的版本使用两个电机左右腿完全独立。这带来了革命性的变化转向控制。通过让两个电机以不同速度、甚至相反方向旋转我们可以让机器人实现原地转弯、弧形前进等复杂动作。例如左腿前进、右腿后退机器人就会以中心为轴顺时针旋转。结构强度考量机器人运动时腿部尤其是电机安装点需要承受较大的扭力。因此3D打印的侧板Body设计有专门嵌套电机的凹槽。电机不是仅仅靠螺丝“挂”在板上而是整个壳体被凹槽包裹。这样扭力会通过大面积接触面传递到整个侧板结构上而不是仅仅由那几颗M3螺丝承受极大地提高了可靠性。这也是为什么在装配电机时我强调要“将电机卡入侧板凹槽”而螺丝只是起到紧固防脱的作用。2.3 物料清单与采购建议以下是完成本项目所需的所有核心与非核心部件。我会在原清单基础上补充一些容易遗漏但至关重要的东西。核心控制器与驱动Adafruit Feather M0 Bluefruit LE x1机器人的大脑和蓝牙通信模块。Adafruit CRICKIT for FeatherWing x1机器人的肌肉驱动中枢。TT减速电机金属齿轮减速比1:90x2提供动力的关节。务必选择金属齿轮版本塑料齿轮在堵转时极易扫齿。电源系统二选一推荐方案B方案A简易但不推荐3xAA电池盒带DC插头x1碱性AA电池x3。方案B稳定推荐3.7V锂聚合物电池容量建议2000mAh以上x1。Adafruit PowerBoost 1000C 充电升压模块 x1将电池的3.7V升压至稳定的5V输出并集成充电管理。Micro USB线 x1用于给升压模块/Feather板充电。结构件与紧固件3D打印零件一套包括侧板x2、腿部x2、电机臂x2、普通臂x4、关节帽x10、CRICKIT托盘x1、电池托盘x1。文件链接已在原始资料中提供。M3螺丝螺母套装M3x25mm 圆头螺丝 x4用于固定电机。M3 防松螺母 x4配合上述螺丝固定电机。M3 平垫圈 x4用于电机固定增加受力面积。M3x6mm 圆头螺丝 x8用于固定CRICKIT到其托盘。M3x20mm 圆头螺丝 x4用于将CRICKIT托盘和电池托盘固定到侧板上。M3x6mm 沉头螺丝 x10用于固定关节帽沉头设计使外观平整。M3黄铜热熔螺母可选x8如果你想获得最稳固的CRICKIT托盘安装可以使用热风枪或烙铁将其嵌入托盘螺丝孔实现金属螺纹连接比直接拧入塑料可靠得多。其他工具与耗材电烙铁、焊锡丝、助焊剂用于焊接电机导线。AWG22-24规格的硅胶导线红黑双色若干连接电机与CRICKIT。硅胶线柔软耐弯折更适合机器人内部布线。剥线钳、剪线钳、螺丝刀套装。3D打印机及PLA材料约150-200克如果你自己打印的话。小橡胶脚垫 x4贴在机器人“脚”部增加摩擦力并减震降噪。3. 结构件制作与机械组装实战3.1 3D打印的要点与技巧拿到STL文件后直接切片打印可能遇到问题。根据我的经验以下几点能帮你获得更高质量的零件打印方向与支撑所有零件都应平放在打印平台上以最大接触面积打印。这样可以获得最好的层间结合力尤其是承受力的部位。对于Body侧板和Tray托盘这类大平面零件务必确保第一层粘贴牢固防止翘边。这些零件几乎不需要支撑只有Joint_Cap关节帽的孔洞内部可能需要生成少量支撑方便拆除。层高与填充率为了平衡强度、打印速度和表面质量我建议使用0.2mm的层高。填充率按原项目建议设为**10%-15%**的网格填充如Gyroid即可。这个机器人不需要承受巨大冲击过高的填充率只会增加重量和耗材降低电机效能。外壳壁厚建议2-3层0.8mm-1.2mm这能保证足够强度。孔洞的适配性设计中的孔洞如电机轴孔、螺丝孔通常比标称尺寸略小约0.1-0.2mm这是为了预留3D打印的误差实现“紧配合”。如果电机轴插不进Motor_Arm电机臂不要用蛮力。你可以用对应尺寸的钻头如2mm轻轻手动扩孔或者用锉刀稍微修整。目标是让电机轴能紧密插入不会打滑但也不至于需要用锤子敲进去。没有3D打印机怎么办除了原文提到的在线打印服务你还可以在淘宝、京东等平台搜索“3D打印代工”将STL文件发给卖家选择PLA材料并告知上述打印参数。通常几天内就能收到零件。这是入门者体验3D打印项目最便捷的方式。3.2 电机安装与线路准备这是整个机械组装中最关键的一步电机安装的牢固度直接决定了机器人能否正常行走。焊接电机导线每个TT电机有两个电极。剪取两根约15厘米长的导线一红一黑剥头、上锡。同样给电机的金属引脚上锡。然后将导线焊接至引脚。这里有个重要技巧焊接后在焊点处套上一小段热缩管并用热风枪或打火机加热收缩。这不仅能绝缘防止后续短路更能加固焊点避免机器人运动时导线因反复弯折而从焊点处断裂。这是很多新手容易忽略的“长寿”秘诀。安装电机到侧板找到Body_1和Body_2两个侧板零件。将电机的输出轴朝向内侧把电机壳体嵌入侧板上的专用凹槽。你会听到“咔哒”一声电机应该被紧密地卡住。然后从侧板外侧将M3x25mm螺丝穿过电机安装孔和侧板上的对应孔洞。在内侧套上一个平垫圈再拧上M3防松螺母。实操心得拧紧螺母时使用一把扳手固定住螺母另一把螺丝刀拧紧螺丝。力度要适中感觉到明显阻力后再稍加一点力即可。切勿过度拧紧否则可能导致3D打印的侧板孔洞周围开裂或者挤压电机壳体导致其变形、转动不畅。我们的目标是“牢固”而非“锁死”。安装黄铜热熔螺母可选但推荐如果你准备了M3黄铜热熔螺母现在是用在Crickit_TrayCRICKIT托盘上的时候了。将螺母的带齿端对准托盘背面的螺丝孔用烙铁头加热螺母的顶部注意不要碰到塑料同时轻轻向下施加压力。当螺母平稳地嵌入塑料约一半深度时移开烙铁让其冷却固定。这样托盘上的螺丝孔就有了坚固的金属螺纹可以反复拆装而不滑丝。3.3 电子部分的集成与固定组装控制核心将Feather M0 Bluefruit插入CRICKIT FeatherWing的对应插座。注意对齐引脚确保所有引脚都准确插入没有弯曲。然后将这个叠层组合体用4颗M3x6mm螺丝固定到已经安装了热熔螺母的CRICKIT托盘上。连接电机将左右电机的红线、黑线分别连接到CRICKIT上的电机接口。标准接法是右侧电机接到Motor 1 (M1A, M1B)左侧电机接到Motor 2 (M2A, M2B)。红正黑负。暂时不用拧紧接线端子因为我们接下来要测试方向。初步通电与电机方向测试在编写完整代码前我们可以用一个简单的测试程序来验证电机接线是否正确。将CRICKIT通过USB线连接到电脑此时USB可为整个系统供电在Arduino IDE中上传以下测试代码#include Adafruit_Crickit.h #include seesaw_motor.h Adafruit_Crickit crickit; seesaw_Motor motorRight(crickit); seesaw_Motor motorLeft(crickit); void setup() { Serial.begin(115200); if (!crickit.begin()) { Serial.println(CRICKIT error!); while(1); } motorRight.attach(CRICKIT_MOTOR_A1, CRICKIT_MOTOR_A2); // M1 motorLeft.attach(CRICKIT_MOTOR_B1, CRICKIT_MOTOR_B2); // M2 Serial.println(Test begin!); } void loop() { // 右电机正转2秒 Serial.println(Right forward); motorRight.throttle(0.5); delay(2000); motorRight.throttle(0); delay(1000); // 左电机正转2秒 Serial.println(Left forward); motorLeft.throttle(0.5); delay(2000); motorLeft.throttle(0); delay(3000); // 暂停观察 }上传后打开串口监视器。观察电机转动方向。我们希望从机器人后方看即电池托盘那一侧为后方两个电机的输出轴都逆时针旋转时能带动机器人向前移动。如果某个电机转向反了只需将该电机的两根导线在接线端子上对调即可。确认方向正确后拧紧接线端子。安装电池系统如果你使用LiPoPowerBoost方案先将电池用橡皮筋或扎带固定在Battery_Tray电池托盘上。将PowerBoost模块用双面胶或螺丝固定在托盘下方。将电池的JST插头连接到PowerBoost的电池输入口再用一根带DC插头的导线从PowerBoost的5V输出连接到CRICKIT的电源输入口。最后将电池托盘用两颗M3x20mm螺丝安装到机器人侧板的后部。3.4 腿部与最终总装安装手臂与腿部将Motor_Arm电机臂用力按到电机输出轴上确保紧密无晃动。将Plain_Arm普通臂的短轴插入侧板上剩余的三个孔中它们应该能自由转动但无明显旷量。组装腿部关节取一个Leg腿部零件将其上的三个孔分别对准一侧的三个手臂一个电机臂两个普通臂的轴。轻轻摆动腿部使其套入。然后在每个轴端盖上Joint_Cap关节帽并用M3x6mm沉头螺丝从外侧拧紧。注意螺丝不要拧得太紧以关节帽不脱落、同时手臂又能灵活转动为宜。另一侧重复此操作。合体与最终检查此时机器人应该是一个完整的框架了。用手轻轻拨动腿部检查所有关节是否转动顺畅有无卡滞。检查所有电线是否留有足够余量避免运动时被拉扯。最后将充满电的电池接上打开PowerBoost的开关如果有。4. 软件配置与蓝牙遥控代码详解4.1 开发环境搭建与库安装在开始编写机器人主程序之前必须正确配置Arduino IDE环境。安装板支持包打开Arduino IDE进入“文件”-“首选项”在“附加开发板管理器网址”中添加https://adafruit.github.io/arduino-board-index/package_adafruit_index.json。然后进入“工具”-“开发板”-“开发板管理器”搜索“Adafruit SAMD”安装“Adafruit SAMD Boards”这包含了Feather M0系列。安装必要的库进入“工具”-“管理库”搜索并安装以下库Adafruit CRICKIT LibraryAdafruit seesaw Library(CRICKIT依赖此库)Adafruit BluefruitLE nRF51安装库时通常会将依赖库一并安装请留意提示。选择开发板与端口在“工具”菜单下选择“开发板”-“Adafruit Feather M0 Bluefruit LE”。将机器人通过USB线连接到电脑然后在“端口”中选择对应的串口在Windows设备管理器中通常显示为“Adafruit Feather M0”。4.2 核心代码逻辑逐行解析项目的核心代码FlippyBot.ino结构清晰。我们跳过蓝牙初始化的样板代码聚焦于运动控制部分。电机对象定义与初始化Adafruit_Crickit crickit; seesaw_Motor right_leg(crickit); seesaw_Motor left_leg(crickit); seesaw_Motor *legs[2] {right_leg, left_leg}; const int RIGHT 0; const int LEFT 1;这里创建了两个电机对象并放入数组方便管理。RIGHT和LEFT作为索引常量提高了代码可读性。核心控制函数set_legvoid set_leg(int leg, float velocity) { if (leg ! RIGHT leg ! LEFT) { error(F(Bad leg specifier)); } if (velocity -1.0 || velocity 1.0) { error(F(Velocity out of range)); } legs[leg]-throttle(velocity); }这是所有运动的基础。velocity参数范围是-1.0到1.0。正数代表电机正转我们定义为前进方向负数代表反转。throttle方法内部会处理PWM信号生成我们无需关心细节。高层运动函数基于set_leg我们封装了四个基本动作void forward(float speed) { // speed为正数 set_leg(RIGHT, speed); set_leg(LEFT, speed); } void reverse(float speed) { set_leg(RIGHT, -speed); // 注意这里取负 set_leg(LEFT, -speed); } void rotate_clockwise(float speed) { // 顺时针旋转 set_leg(RIGHT, -speed); // 右腿后退 set_leg(LEFT, speed); // 左腿前进 } void rotate_counterclockwise(float speed) { // 逆时针旋转 set_leg(RIGHT, speed); set_leg(LEFT, -speed); }这里有一个关键点forward和reverse函数接收的是speed速度大小正数而set_leg接收的是velocity带方向的速度。所以在reverse函数内部我们传入了-speed。这种设计让上层调用更直观。蓝牙命令解析与响应在loop()函数中程序不断检查是否有从手机App发来的蓝牙数据包。当检测到按钮Button事件时if (packetbuffer[1] B) { uint8_t buttnum packetbuffer[2] - 0; // 按钮编号 (1-8) boolean pressed packetbuffer[3] - 0; // 按下或释放 ... switch(buttnum) { case 5: // 假设App上“上”箭头按钮映射为5号键 if (pressed) { forward(1.0); } // 按下时全速前进 else { stop(); } // 释放时停止 break; // ... 其他按钮 case 6,7,8 对应 后退、左转、右转 } }这就是实现遥控的核心逻辑。Adafruit Bluefruit LE App的控制器模式会将方向键和按钮映射为特定的键值1-8发送过来。预设动作脚本demo1()到demo4()函数对应手机App上的1-4号按钮。你可以在这里编写自动序列。例如原代码的demo1让机器人前进5秒顺时针转2秒中速前进4秒再逆时针转3秒后停止。你可以发挥创意编写复杂的舞蹈动作。4.3 手机App连接与配置在手机应用商店搜索并安装Adafruit Bluefruit LE Connect。打开机器人电源。在App中扫描并连接名为“Adafruit Bluefruit LE”的设备。连接成功后进入Controller模式。选择Control Pad布局。你会看到一个带有方向键和1-4数字按钮的界面。现在按下方向键你的机器人就应该动起来了1-4按钮则会触发你代码中预设的demo函数。调试技巧在开发阶段建议打开代码开头的#define DEBUG 1注释。这样机器人的串口会输出详细的调试信息如接收到的蓝牙命令、电机速度设置等方便你排查问题。在最终部署时再将其注释掉以节省资源。5. 调试、优化与问题排查实录即使严格按照步骤第一个机器人也可能遇到些小麻烦。下面是我在多次组装和调试中积累的经验和常见问题解决方案。5.1 机械问题排查问题现象可能原因解决方案机器人行走无力电机发烫机械阻力过大。可能是关节安装过紧、3D打印件摩擦、或腿部与地面夹角不佳导致负载过重。1. 检查所有关节帽螺丝确保手臂能用手轻松拨动。2. 在关节轴和孔内涂抹少许润滑油如白色润滑脂。3. 调整腿部初始角度确保电机启动时不是处于最费力的位置。行走时向一边偏斜左右腿运动不同步。由于是开环控制无编码器两个电机的实际转速有微小差异且机械安装不可能完全对称。1. 这是正常现象。可以通过在代码中微调左右电机的速度比例来补偿。例如如果总是右偏可以尝试set_leg(LEFT, speed * 0.95)让左腿稍慢一点。2. 操作时先让机器人“原地踏步”几下使双腿相位同步再命令前进会走得更直。后退非常困难甚至不动这是本设计的一个物理特性。前进时腿部运动趋势是“蹬地”而后退时更像是“拖拽”且重心移动不利于后退动作。1. 尝试先给一个反向的快速脉冲如reverse(1.0)持续0.2秒让腿部摆过死点再以较低速度如0.6持续后退。2. 在reverse()函数中初始速度可以设高短暂延迟后降低为持续速度。关节处有“咔哒”异响或松动关节帽螺丝松动或电机臂与电机轴之间打滑。1. 紧固所有关节帽的沉头螺丝。2.关键步骤如果电机臂打滑务必将其拔出。在电机轴和臂的孔内涂抹少量厌氧螺丝胶如乐泰243再重新插入。等待其固化后将形成非常牢固的连接且不影响拆卸需加热。这是解决打滑问题最有效的方法。5.2 电气与软件问题排查问题现象可能原因解决方案上电后CRICKIT或Feather无反应供电问题。电池电量不足或PowerBoost模块未开启或接线错误。1. 检查电池电压确保LiPo电压高于3.7V。2. 检查PowerBoost模块的开关如有是否打开EN引脚是否接高电平。3. 用万用表测量CRICKIT电源输入口的电压应为稳定的5V左右。电机不转或只单边转电机接线错误、接触不良或代码中电机引脚定义错误。1. 使用前面的简易测试代码单独测试每个电机是否正常。2. 检查CRICKIT上的电机端子是否拧紧。3. 核对代码中right_leg.attach和left_leg.attach使用的引脚是否正确应为A1/A2和B1/B2。蓝牙连接不稳定或无法连接手机蓝牙干扰、代码初始化问题或Feather M0 Bluefruit的蓝牙天线附近有金属屏蔽。1. 重启手机蓝牙和机器人。2. 确保代码中蓝牙初始化部分ble.begin()成功没有进入错误循环。3. 避免将电池或大面积金属片紧贴Feather板的天线区域板载蛇形走线部分。运行一段时间后Feather复位电机堵转或启动时电流过大导致电源电压瞬间跌落引发微控制器欠压复位。1.这是使用AA电池方案的典型问题。强烈建议换用LiPoPowerBoost方案其输出更稳定。2. 在CRICKIT的电机电源输入端V和GND并联一个大容量低ESR的电解电容如1000uF/16V可以吸收电机产生的电流尖峰效果立竿见影。手机App按钮无反应App控制器模式配置错误或代码中按钮键值映射不匹配。1. 确保App连接后进入的是“Controller”模式下的“Control Pad”。2. 打开串口调试#define DEBUG 1查看当按下App按钮时串口是否打印出对应的按钮编号buttnum。根据输出调整代码switch语句中的case值。Adafruit App的默认方向键映射是5上、6下、7左、8右。5.3 性能优化与扩展思路增加速度控制当前代码使用固定速度1.0。你可以在App中启用“加速度计”或“摇杆”模式将手机倾斜角度或摇杆位置映射为速度值0.0-1.0实现无极调速控制会更细腻。添加声音与灯光CRICKIT有丰富的GPIO和PWM输出。你可以连接一个压电蜂鸣器播放简单的音调或者接上几个NeoPixel RGB LED让机器人在运动时闪烁不同的灯光更具观赏性。集成传感器在Feather M0的空闲IO口上可以添加超声波测距传感器HC-SR04或红外避障传感器。修改代码使其在自动模式下如demo函数中能够感知前方障碍并自动转向升级成一个小型自主避障机器人。改进机械结构如果你对3D建模感兴趣可以尝试修改腿部三角形的形状或比例这将会彻底改变机器人的步态和行走风格。也可以尝试使用更轻、更坚固的材料如碳纤维杆来制作手臂减轻重量以提升速度和续航。这个项目最吸引我的地方就在于它提供了一个极其扎实的起点。它不是一个黑箱玩具每一个部分——从螺丝的紧固到代码的逻辑——都清晰可见、可修改。当你看到这个由自己亲手组装、编程的小家伙以一种滑稽又独特的姿态在桌面上蹒跚前行并完全听从你手机指挥时那种跨越机械、电子、软件多个领域完成创造的满足感是无可替代的。希望这份详细的指南能帮你绕过我踩过的那些坑顺利享受到这份乐趣。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2616716.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…