安卓手机控制机械爪:软硬件融合开发实践与避坑指南

news2026/5/7 2:22:03
1. 项目概述当“机械爪”遇见安卓最近在折腾一个挺有意思的项目叫Openclaw-on-Android。简单来说这是一个将开源机械爪OpenClaw的控制系统移植并运行在安卓手机或平板上的工程。你可能在视频网站上见过那些用树莓派或Arduino控制的机械臂抓取小物件、玩魔方甚至写字画画。这个项目的核心思路就是把控制“大脑”从那些开发板换成我们口袋里几乎人手一台的安卓设备。为什么这么做意义其实挺大的。首先安卓设备的普及率和性能价格比是任何一款开发板都难以比拟的。一部几百块的二手安卓手机其计算能力多核CPU、GPU、传感器摄像头、陀螺仪、加速度计、交互界面触摸屏和网络连接Wi-Fi、蓝牙的集成度远超同价位的单片机方案。其次它极大地降低了机器人爱好者的入门门槛和开发复杂度。你不用再为嵌入式开发环境、交叉编译、外设驱动这些事头疼直接用熟悉的Java/Kotlin在Android Studio里就能完成大部分逻辑开发图形界面更是信手拈来。Vamsiindugu/Openclaw-on-Android这个仓库就是提供了一个桥梁和一套示例。它并非从零开始造一个机械爪而是基于已有的开源机械爪硬件通常是3D打印结构件搭配几个舵机为其编写一个安卓端的控制应用。这个应用需要实现几个核心功能通过USB OTG或蓝牙与舵机控制板如Arduino通信发送角度指令利用手机摄像头实现简单的视觉反馈比如颜色识别、目标定位提供一个直观的UI让用户可以通过滑块、按钮甚至手势来控制机械爪的开合、旋转。我最初看到这个项目时立刻想到的应用场景就不少。比如它可以作为一个非常棒的教学工具让学生们在移动应用开发、基础自动化和计算机视觉的交叉领域进行实践。也可以作为一些轻型自动化场景的快速原型例如桌面级的物品分拣、简单的互动展示装置。对于开发者而言它打开了一扇窗让我们能以更软件化的思维去玩硬件把复杂的运动规划、视觉算法在手机端跑起来再通过简单的串口指令驱动实体世界。2. 核心架构与通信链路拆解要让安卓手机指挥机械爪动起来整个系统的架构设计是关键。这不像开发一个纯软件App它涉及软硬件协同通信的稳定性和实时性是首要考虑的。典型的Openclaw-on-Android系统架构可以分为三层安卓应用层、通信协议层、硬件执行层。2.1 硬件执行层舵机与控制板硬件层是机械爪的物理本体。核心是几个舵机Servo Motor负责提供动力。一个简单的三自由度机械爪可能包含一个底座旋转舵机、一个夹爪开合舵机。这些舵机通常由一块微控制器板驱动比如最经典的 Arduino Uno 或 Nano。Arduino 板的作用是接收来自安卓设备的高级指令如“夹爪打开到50度”并将其转化为具体的 PWM脉宽调制信号精确控制每个舵机转到指定角度。注意舵机的选择直接影响性能。标准舵机扭矩较小适合抓取很轻的物体如乒乓球、积木。如果希望抓取更重的物品需要考虑金属齿舵机甚至直流电机加编码器的方案但这也会增加驱动电路的复杂性。2.2 通信协议层USB OTG 与蓝牙的抉择这是连接安卓世界和硬件世界的大桥。主要有两种方式USB OTG 和蓝牙。USB OTG (On-The-Go)这是最稳定、延迟最低的方案。你需要一根 USB OTG 转接线将手机的 USB-C 或 Micro-USB 口连接到 Arduino 的 USB 口。在安卓端系统会将 Arduino 识别为一个串口设备如/dev/ttyACM0或/dev/ttyUSB0。通过 Android 的 USB Host API应用可以打开这个串口直接读写数据。通信协议通常是简单的自定义文本协议例如发送字符串“S1,90\n”表示让1号舵机转到90度。优点是速度快、连接稳定、无需配对、供电相对充足手机可以为 Arduino 供电。缺点是需要有线连接限制了设备的移动性。蓝牙 (Bluetooth)为了实现无线控制蓝牙是更优雅的方案。你需要一个蓝牙串口模块如 HC-05、HC-06将其连接到 Arduino 的串口引脚RX/TX。安卓手机通过标准蓝牙 API 与模块配对连接之后的数据传输就模拟成了一个无线串口。这种方式解放了线缆体验更灵活。但缺点也很明显连接稳定性容易受环境干扰配对过程需要用户手动操作通信延迟比有线高并且蓝牙模块和舵机会共同消耗 Arduino 的电源对电池续航要求更高。在项目实践中我强烈建议初期开发使用 USB OTG。它能排除无线连接的不确定性让你专注于核心控制逻辑和通信协议的调试。等基本功能稳定后再增加蓝牙支持作为可选功能。2.3 安卓应用层控制、视觉与UI这是项目的软件核心运行在安卓设备上。其内部可以再细分为几个模块通信管理模块负责枚举和连接 USB 或蓝牙设备。对于 USB需要处理设备插拔的监听、权限请求UsbManager、以及串口数据的读写通常使用UsbSerial这样的开源库如felHR85/UsbSerial。对于蓝牙需要处理设备搜索、配对、Socket连接和数据流操作。协议编解码模块将高层的控制命令如目标角度、速度编码成硬件层能理解的字符串或字节流协议同时解析从硬件层返回的状态数据如当前角度、温度报警等如果硬件支持反馈。运动控制模块这是逻辑的核心。它可能包含简单的顺序动作录制和回放也可能实现初步的运动规划例如让夹爪平滑地从A点移动到B点而不是瞬间跳变这需要插值算法。视觉处理模块可选但强大利用手机摄像头通过 Android CameraX 或 Camera2 API 获取预览帧。可以集成轻量级的视觉库如 OpenCV for Android实现颜色识别、形状检测或二维码识别。例如识别一个红色方块后自动计算出其在图像中的位置并转换为机械爪底座需要旋转的角度指令。用户界面 (UI)提供直观的控制面板。包括舵机角度滑块、预设动作按钮、手动/自动模式切换、摄像头预览画面、以及视觉识别结果的覆盖层。UI设计应简洁明了重点信息突出。3. 安卓端核心实现详解理解了架构我们深入到安卓应用的代码层面看看几个关键模块如何具体实现。这里我会以使用 USB OTG 通信、控制两个舵机一个旋转底座S1一个夹爪S2的简单场景为例。3.1 建立USB通信链路首先在AndroidManifest.xml中声明必要的权限和特性并设置一个 Intent Filter 来监听USB设备接入uses-feature android:nameandroid.hardware.usb.host / uses-permission android:nameandroid.permission.USB_PERMISSION / ... activity android:name.MainActivity intent-filter action android:nameandroid.hardware.usb.action.USB_DEVICE_ATTACHED / /intent-filter meta-data android:nameandroid.hardware.usb.action.USB_DEVICE_ATTACHED android:resourcexml/device_filter / /activity在res/xml/device_filter.xml中你可以指定你的 Arduino 设备的厂商IDVID和产品IDPID这样只有特定设备插入时才会触发你的应用。对于常见的 Arduino Uno其 VID通常是0x2341或0x2A03。在 MainActivity 中核心的通信初始化流程如下// 使用 felHR85/UsbSerial 库 class MainActivity : AppCompatActivity() { private var usbSerialPort: UsbSerialPort? null private lateinit var usbManager: UsbManager override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) usbManager getSystemService(Context.USB_SERVICE) as UsbManager // 检查并请求USB权限 val deviceList usbManager.deviceList val arduinoDevice deviceList.values.find { it.vendorId 0x2341 } // 示例VID arduinoDevice?.let { device - val permissionIntent PendingIntent.getBroadcast(this, 0, Intent(ACTION_USB_PERMISSION), PendingIntent.FLAG_IMMUTABLE) usbManager.requestPermission(device, permissionIntent) } } // 在广播接收器中处理权限授予结果 private fun onUsbPermissionGranted(device: UsbDevice) { val driver CdciSerialDriver(device) // 根据你的Arduino芯片选择驱动如CDCI、CH34x等 val port driver.ports.first() usbSerialPort port usbManager.openDevice(device)?.let { connection - port.open(connection) port.setParameters(9600, 8, UsbSerialPort.STOPBITS_1, UsbSerialPort.PARITY_NONE) // 与Arduino串口配置匹配 // 启动一个线程持续读取串口数据如果需要 thread { val buffer ByteArray(1024) while (true) { val numBytesRead port.read(buffer, 1000) // 超时1秒 if (numBytesRead 0) { val data String(buffer, 0, numBytesRead) runOnUiThread { handleSerialData(data) } } } } } } }这段代码的关键在于选择合适的串口驱动并确保波特率等参数与 Arduino 端程序严格匹配。常见的 Arduino 默认波特率是 9600。3.2 设计控制协议与数据发送协议设计追求简单可靠。我们可以定义一条指令如“ServoID,Angle;”。例如控制1号舵机到90度就发送字符串“1,90;”。Arduino 端会持续解析串口数据遇到分号就认为一条指令结束然后解析舵机ID和角度值并执行。在安卓端发送指令的函数可以这样写fun sendServoCommand(servoId: Int, angle: Int) { val command $servoId,$angle; usbSerialPort?.write(command.toByteArray(), 1000) // 超时1秒 }在 UI 中可以为每个舵机绑定一个 SeekBar滑块。当滑块滑动时调用sendServoCommand。但这里有一个重要的优化点不要每次onProgressChanged都发送。因为滑块的滑动事件非常密集如果实时发送会导致串口数据拥塞舵机动作可能卡顿。正确的做法是使用防抖Debounce或节流Throttle例如只在用户手指离开滑块时发送最终值或者在滑动过程中每100毫秒最多发送一次。3.3 集成视觉识别功能这是让项目从“遥控玩具”升级为“智能装置”的一步。我们以识别特定颜色块并让底座舵机跟踪为例。首先在build.gradle中添加 OpenCV for Android 的依赖。然后使用 CameraX 获取摄像头预览流并将其转换为 OpenCV 的Mat对象进行处理。核心的颜色识别流程在子线程中执行颜色空间转换将每一帧从默认的 BGR 格式转换到 HSV 格式。HSV色相、饱和度、明度空间更适合做颜色分割。阈值分割使用Core.inRange()函数根据目标颜色的 HSV 范围例如红色的低阈值[0, 100, 100]和高阈值[10, 255, 255]以及红色的另一部分[160, 100, 100]到[180, 255, 255]创建一个二值化掩膜mask。白色区域就是目标颜色区域。形态学操作对掩膜进行腐蚀和膨胀消除小的噪声点连接相邻区域。轮廓查找使用Imgproc.findContours()找到掩膜中所有的轮廓。筛选与定位计算每个轮廓的面积和外接矩形。过滤掉面积太小的轮廓可能是噪声选取面积最大的轮廓作为目标。计算该轮廓的最小外接矩形或中心点。坐标转换将图像中目标中心的X坐标例如图像宽度为640像素中心X320映射到底座舵机的角度范围例如0-180度。一个简单的线性映射公式是servoAngle (targetCenterX / imageWidth) * 180。计算出目标角度后调用sendServoCommand(1, servoAngle)即可让底座旋转使目标始终处于画面中央实现简单的视觉跟踪。实操心得手机摄像头的图像处理是计算密集型任务务必在后台线程进行避免阻塞UI。OpenCV 的运算可以尝试使用其自带的UMat使用GPU加速来提高性能。另外环境光线对颜色识别影响巨大最好在受控光照下进行或者考虑更稳定的识别方式如 Aruco 码。4. Arduino端固件开发要点安卓端发号施令Arduino端负责忠实执行。这里的代码虽然相对简单但稳定性至关重要。一个典型的 Arduino 固件Sketch包含以下部分#include Servo.h // 定义舵机对象和引脚 Servo servoBase; // 底座舵机 Servo servoClaw; // 夹爪舵机 int servoBasePin 9; int servoClawPin 10; // 串口通信相关变量 String inputString ; // 存储接收到的字符串 boolean stringComplete false; // 标志是否收到完整指令 void setup() { // 初始化串口波特率必须与安卓端一致 Serial.begin(9600); // 预留足够内存给字符串 inputString.reserve(20); // 关联舵机对象到引脚 servoBase.attach(servoBasePin); servoClaw.attach(servoClawPin); // 初始化到安全位置 servoBase.write(90); servoClaw.write(30); // 假设30度是张开状态 delay(500); } void loop() { // 1. 解析串口指令 if (stringComplete) { // 指令格式: servoId,angle; int commaIndex inputString.indexOf(,); int semicolonIndex inputString.indexOf(;); if (commaIndex 0 semicolonIndex commaIndex) { int servoId inputString.substring(0, commaIndex).toInt(); int angle inputString.substring(commaIndex 1, semicolonIndex).toInt(); // 角度安全限幅防止舵机过度旋转损坏 angle constrain(angle, 0, 180); // 根据ID控制对应舵机 switch (servoId) { case 1: servoBase.write(angle); break; case 2: servoClaw.write(angle); break; default: // 可以返回错误信息给安卓端 Serial.println(Error: Invalid Servo ID); } } // 清空字符串准备接收下一条指令 inputString ; stringComplete false; } } // 串口事件函数在串口有数据到达时自动调用 void serialEvent() { while (Serial.available()) { char inChar (char)Serial.read(); // 如果收到换行符或分号则认为一条指令结束 if (inChar ;) { stringComplete true; } else { // 否则将字符添加到字符串中 inputString inChar; } } }这段代码有几个关键点指令解析使用serialEvent()函数和状态标志stringComplete来异步、非阻塞地接收和解析指令避免在loop()中使用delay()导致控制卡顿。安全限幅constrain(angle, 0, 180)确保发送给舵机的角度值在有效范围内防止因通信错误导致舵机尝试转到不可能的角度如-10或190度从而保护舵机齿轮。初始位置在setup()中让舵机转到已知的安全位置如夹爪张开防止上电时机械爪处于不可预测的状态。5. 系统集成调试与避坑指南当安卓端和 Arduino 端代码都准备好后真正的挑战——系统集成调试就开始了。这个过程会遇到各种各样的问题下面是我总结的一些常见坑点和解决思路。5.1 通信失败与乱码问题问题现象安卓App显示已连接但发送指令后机械爪毫无反应或者 Arduino 串口监视器看到的是乱码。排查步骤检查物理连接USB OTG线是否可靠尝试换一根线。Arduino 的 USB 口是否松动确认驱动与权限在安卓的“开发者选项”中查看“默认USB配置”是否设为了“文件传输”或“充电”这可能会影响 USB Host 功能。尝试设为“不进行数据传输”或直接关闭开发者选项中的USB调试再试。确保App弹窗请求USB权限时你点击了“允许”。核对波特率这是最常见的问题。务必确保安卓端setParameters中的波特率与 Arduino 代码Serial.begin()中的波特率完全一致。常见的匹配值是 9600。如果怀疑波特率不对可以先用电脑的串口工具如 Arduino IDE 自带的串口监视器测试 Arduino确保它能正确接收指令。检查协议格式在安卓端发送指令后用Log.d()打印出即将发送的字符串确认格式完全正确如“1,90;”没有多余的空格或换行符。同时在 Arduino 端可以在serialEvent()中把接收到的每个字符打印回串口监视器看看是否一致。供电问题如果通过USB OTG连接手机可能无法为带多个舵机的 Arduino 提供足够电流导致舵机动作时系统复位。尝试为 Arduino 单独供电如使用9V电池或电源适配器同时USB线只负责数据传输。5.2 舵机动作不流畅或抖动问题现象机械爪动作生硬、一跳一跳的或者伴随明显抖动和噪音。原因与解决指令发送过快如前所述滑块滑动事件触发太频繁。必须加入防抖或节流逻辑。电源功率不足舵机特别是金属齿轮舵机在启动和堵转时电流很大可达1A以上。USB口或普通的5V/1A手机充电器无法满足。必须使用独立的外接电源为舵机供电同时确保 Arduino 板、舵机、电源三者的“地”GND连接在一起。机械结构卡顿3D打印的零件可能存在摩擦过大、装配过紧的问题。手动转动一下关节检查是否顺畅。适当打磨轴孔或添加润滑脂。软件平滑处理在安卓端或 Arduino 端加入运动平滑算法。不要直接从当前角度跳到目标角度而是在两者之间插入若干中间角度并加入微小延时。例如在 Arduino 的loop中实现一个简单的缓动函数void smoothMove(Servo servo, int targetAngle, int stepDelay) { int currentAngle servo.read(); while (abs(currentAngle - targetAngle) 1) { if (currentAngle targetAngle) currentAngle; else currentAngle--; servo.write(currentAngle); delay(stepDelay); // 例如 delay(20)每步20毫秒 } }然后在收到指令后调用smoothMove(servoBase, angle, 15)。5.3 视觉识别不稳定问题现象颜色识别时好时坏目标框乱跳或者根本无法识别。优化策略精细化HSV阈值不要在代码里写死阈值。最好在安卓App里做两个SeekBar分别调整 HSV 的下限和上限实时观察二值化掩膜的效果直到目标物体被清晰完整地标白背景全黑。记录下此时的阈值范围。预处理图像在转换到 HSV 前可以对图像进行高斯模糊 (GaussianBlur)这能有效减少图像噪声和光照不均的影响。使用更鲁棒的特征颜色对光线太敏感。可以考虑使用形状特征如检测圆形、矩形或者直接使用预训练的轻量级机器学习模型如 TensorFlow Lite来识别特定的物体比如一个红色的可乐罐。虽然复杂度增加但稳定性会大幅提升。限制处理区域如果目标只出现在画面特定区域比如下半部分可以只对那一部分 ROIRegion of Interest进行处理减少计算量提高速度。5.4 应用稳定性与用户体验问题现象App用着用着就卡死、闪退或者切换界面后控制失灵。开发建议生命周期管理USB连接和摄像头资源必须在 Activity 的onPause()或onDestroy()中正确释放。否则当用户切到后台或旋转屏幕时会导致资源泄露和崩溃。后台线程管理串口读写和图像处理都必须放在后台线程。使用Kotlin的协程或RxJava可以更好地管理这些异步任务避免内存泄漏。异常处理对所有可能出错的操作进行try-catch特别是串口的open、read、write操作并给用户友好的错误提示如“无法连接设备请检查USB线”。状态反馈在UI上明确显示当前连接状态“已连接USB设备”、“蓝牙已配对”、舵机当前角度等。如果 Arduino 端支持回传传感器数据如通过电流检测判断夹爪是否抓取到物体将其显示出来会极大提升交互感。这个项目从技术上看是移动开发、嵌入式系统和计算机视觉的一次有趣融合。它没有用到特别高深的理论但非常考验工程实现和调试能力。当你第一次用自己的手机通过自己写的App控制一个真实的机械爪抓起一块积木时那种软硬件结合带来的成就感是纯软件项目无法比拟的。它也是一个绝佳的起点你可以在此基础上增加更多传感器如超声波测距、压力传感器、更复杂的运动算法如逆运动学、甚至接入云端实现远程控制探索的空间非常广阔。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2590084.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;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…