欢迎来到KX的个人主页

这里是我的个人页面,展示我的抽象作品,欢迎你的来访!

我的技能

🛠 工具

三维建模、锡焊、钳工,以及公网服务器部署、后端搭建。使用AI IDE开发前后端、嵌入式、游戏项目并落地。

💻 开发

熟练使用Godot引擎,制作联机fps游戏。用three.js+websocket制作网页端联机游戏。熟练使用Arduino IDE开发Arduino、esp32项目。

🏋️‍♂️ 健身

力量举大佬!

* 小道消息:以上内容都是吹的

Arduino项目

Arduino机械臂遥控车

Arduino机械臂遥控车

1. 系统综合演示

机械臂配置:

  • 自由度:4自由度机械臂(4-DOF)
  • 执行机构:4× SG90 舵机
  • 关节分布:底座旋转 + 大臂俯仰 + 小臂前后 + 机械爪开合

演示内容:

  • 底盘移动控制:通过手柄操作小车前进、后退、原地转向
  • 机械臂运动控制:手柄控制舵机,驱动底座旋转、臂部升降、前后移动
  • 末端执行器操作:手柄控制舵机驱动机械爪开合,完成物体抓取与释放动作
  • 协同操作演示:底盘移动与机械臂运动同步进行,展示完整的移动抓取工作流程

系统能力:

集成PS2无线遥控、PCA9685多路舵机控制、直流电机驱动功能模块,实现4自由度机械臂与移动平台的一体化操控。手柄按键映射清晰,操作直观便捷,可完成复杂的空间定位与物体抓取任务。

2. WiFi遥控移动系统

技术架构:

  • 主控平台:Arduino UNO R4 WiFi(内置ESP32-S3)
  • 通信协议:IEEE 802.11 b/g/n WiFi 4标准
  • 网络拓扑:AP(Access Point)模式,开发板作为独立热点

实现方案:

开发板通过ESP32-S3模组创建独立WiFi热点,内部集成轻量级Web服务器。在Flash存储中部署前端控制界面(HTML/CSS/JavaScript),用户终端连接该热点后,通过浏览器访问预设IP地址即可加载交互页面,实现无线遥控功能。

工作流程:

[用户终端] → WiFi连接 → [开发板热点] → HTTP请求 → [Web服务器]
                                                                                   ↓
[执行机构] ← 串口指令 ← [Arduino主控] ← 解析指令 ← [后端处理]

3. PS2手柄无线遥控系统

硬件方案:

  • 电机驱动:深圳易创空间科技有限公司 MotorDriveBoard 多功能电机驱动板
  • 通信协议:Sony PlayStation 2 2.4GHz 无线通信协议
  • 控制架构:手柄发射器 → 接收解码模块 → 驱动板 → 执行机构

实现方案:

MotorDriveBoard 驱动板集成了直流电机驱动、舵机控制及PS2无线接收解码。通过板载PS2接收模块解析手柄信号,直接输出PWM控制指令驱动电机与舵机,实现低延迟、高精度的无线遥控操作。

底层控制原理:

驱动板采用I²C通信协议控制PCA9685 16通道PWM输出芯片,实现IO口扩展。电机与舵机控制不占用Arduino主板数字IO口,仅通过I²C总线(SDA/SCL)发送指令即可控制16路PWM输出,大幅节省主控引脚资源,简化硬件连线。

系统架构:

系统架构图

4. 超声波距离保持系统

硬件配置:

  • 测距模块:HC-SR04 超声波测距传感器
  • 控制算法:增量式PID闭环控制
  • 目标距离:25cm(可配置阈值)

实现方案:

超声测距模块以固定频率发射40kHz超声波脉冲,通过测量回波时间计算与障碍物的实时距离。主控程序采用增量式PID算法对距离误差进行闭环调节,动态调整电机转速与方向,使小车始终维持在目标距离25cm处,实现稳定的跟随/避障功能。

控制流程:

距离保持控制流程图

Arduino自平衡小车

Arduino自平衡小车

1. 系统概述

基于倒立摆模型的自平衡移动平台,采用MPU6050姿态传感器实时检测俯仰角,通过PID闭环控制算法驱动电机抵消倾斜,实现动态平衡。集成PS2无线手柄实现人机交互,支持前进/后退及原地自转控制。

2. 硬件架构

  • PS2手柄:2.4GHz无线人机交互接口,输出摇杆模拟量
  • MPU6050:六轴姿态传感器(加速度计+陀螺仪)
  • 编码器电机:直流减速电机+光电编码器,闭环转速反馈
  • 电机驱动:H桥驱动,支持正反转及PWM调速

3. 核心算法

3.1 姿态解算(互补滤波)

pitch = 0.98 × pitch_gyro + 0.02 × pitch_acc
  • 陀螺仪:动态响应快,积分得角度(存在漂移)
  • 加速度计:静态精度高,易受振动干扰
  • 融合策略:高频信任陀螺仪,低频用加速度计修正漂移

3.2 PID平衡控制

  • P(比例):根据倾角误差输出电机力矩,核心平衡力
  • I(积分):消除静态偏差,补偿系统重心偏移
  • D(微分):抑制振荡,提高系统稳定性

控制逻辑:前倾→电机前转→产生回复力矩→回归平衡位置

3.3 手柄控制映射

  • 左摇杆Y轴:调整目标俯仰角(±3.5°),间接控制前进/后退
  • 右摇杆X轴:叠加左右轮差速,实现原地自转

4. 控制流程

读取手柄 → 计算目标姿态 → 传感器数据采集 → 互补滤波解算 → PID运算 → 叠加转向指令 → 电机输出 → 循环执行(100Hz)

5. 工程优化

  • 死区处理:|output|<10 时电机刹车,消除静态抖动
  • 输出限幅:电机转速限制 ±255,防止驱动过载
  • 方向对称:左右电机反向安装,软件统一方向定义

我的力量水平(83kg级)

卧推 130kg
深蹲 195kg
硬拉 205kg (视频是200,因为205没录)

我的训练计划

懒得填了,后面再说。

kx页游

🐍 KX贪吃蛇

点击下方按钮,在新标签页打开游戏:(点击状态可刷新)

开始游戏 检测中...

🛡️ KX坦克大战(支持8人联机)

电脑:WASD移动 空格射击 | 手机:虚拟按键操作(点击状态可刷新)

进入游戏 检测中...

🎮 FPS多人联机DEMO

PC端wasd移动,空格跳跃,鼠标瞄准左键射击,`/~键打开控制台。手机端触控操作。(强烈建议使用chrome浏览器或其他同内核浏览器)(点击状态可刷新)

进入游戏 检测中...
技术路径 展开 折叠

一、整体底层架构

C/S 架构(客户端/服务端)

- 客户端:浏览器 + Three.js(3D渲染)+原生JS(逻辑/输入)

- 服务端:Node.js + WebSocket(长连接通信)

- 通信方式:WebSocket 全双工长连接,JSON 报文同步所有数据

二、前端 3D 渲染底层(Three.js 核心)

这是游戏画面能显示出来的最底层基础

1. 三大核心对象初始化

- THREE.Scene :场景容器,装所有物体

- THREE.PerspectiveCamera :透视相机(人眼视角)

- THREE.WebGLRenderer :WebGL 渲染器,把场景画到屏幕

2. 世界物体底层实现

- 地形/墙体: BoxGeometry 、 PlaneGeometry 基础几何体

- 玩家:1×1×1立方体网格( Mesh )

- 子弹:小立方体,动态创建/销毁

- 天空盒:自定义 Shader 材质渐变天空

3. 光照底层

- DirectionalLight 平行光(主光源)

- AmbientLight 环境光(全局照亮)

4. 文字标签底层

- 用户名/无敌标签: CanvasTexture 画布生成文字 → 贴到 Sprite (2D广告牌)

- 始终面向相机,保证文字不旋转

5. 渲染循环

- requestAnimationFrame 驱动

- 每帧执行:更新玩家 → 发送位置 → 渲染画面

三、客户端输入操控底层

1. PC 端输入底层

- 键盘: keydown/keyup 监听 WASD 、空格、 ~

- 鼠标:

- requestPointerLock 鼠标锁定

- mousemove 获取偏移量 → 计算 yaw(偏航)/pitch(俯仰) 视角

2. 移动端输入底层

- 左侧摇杆: touchstart/touchmove/touchend 计算偏移向量

- 右侧屏幕滑动:控制视角旋转

- 跳跃/射击按钮:触摸事件触发动作

3. 移动向量底层计算

- 相机前向向量: Vector3(0,0,-1).applyQuaternion(camera.quaternion)

- 相机右向向量: Vector3(1,0,0).applyQuaternion(camera.quaternion)

- 只取水平分量,保证只在地面移动

四、物理系统底层(纯 JS 轻量物理)

游戏没有用物理引擎,全部手搓底层物理

1. 重力系统

- 维护垂直速度 velocityY

- 每帧: velocityY -= 重力 → y += velocityY

- 落地检测: y <= groundY 时重置速度

2. 碰撞检测底层

- 用 THREE.Box3 生成轴对齐包围盒

- 玩家移动前先预判位置

- box.intersectsBox(...) 判断是否穿墙/穿方块

3. 碰撞响应

- X 轴碰撞 → 禁止 X 移动

- Z 轴碰撞 → 禁止 Z 移动

- 保证角色不穿墙、不掉地、不穿障碍物

4. 子弹物理

- 子弹 = 位置 + 方向 + 速度

- 每帧: 位置 += 方向×速度

- 生命周期:超时/命中后销毁

五、网络通信底层(WebSocket)

这是联机能玩的核心底层

1. 连接建立

- 客户端 new WebSocket(ws://ip:port)

- 服务端 ws 库创建 WebSocket.Server

2. 通信协议(JSON 报文)

用 type 区分指令:

- init :分配玩家ID

- move :上传位置/视角/用户名

- shoot :上传射击参数

- update :服务端全量广播世界状态

- kill :击杀提示广播

3. 同步频率

- 客户端:每 50ms 上传一次位置

- 服务端:每 50ms 广播一次全服数据

4. 可靠性

- WebSocket 长连接,低延迟

- 报文极小,只传坐标/状态,不卡

六、服务端底层(Node.js 游戏逻辑核心)

服务端是权威端,所有判定都在服务端

1. 全局数据存储

- players = {} :存所有玩家状态

- bullets = {} :存所有子弹

2. 玩家状态字段(底层核心)

- 坐标、视角、用户名、血量

- isDead :是否死亡

- respawnTime :复活时间

- invincible :是否无敌

- invincibleEndTime :无敌结束时间

- score :击杀分数

3. 核心判定底层

- 伤害判定:子弹与玩家距离 < 阈值 → 扣血

- 无敌判定: invincible=true 时不受伤害

- 死亡判定: hp <= 0 → 标记死亡

- 复活判定:时间到 → 重置位置/血量/无敌

- 计分判定:成功击杀 → 击杀者 score +=1

4. 广播机制

- 遍历所有连接客户端

- 统一发送 update 报文

- 所有客户端看到完全一致的世界

七、数据同步底层(联机的关键)

1. 本地移动预测

- 客户端先自己算移动,立刻响应

- 再把位置发给服务端校准

2. 其他玩家渲染

- 服务端发来位置 → 直接设置玩家模型坐标

- 无复杂插值,保证轻量化、不卡顿

3. 状态同步

- 血量同步 → 更新血条 + 触发受击闪红

- 死亡同步 → 隐藏模型

- 无敌同步 → 显示头顶标签

- 分数同步 → 刷新计分板排名

八、游戏状态机底层(逻辑流转)

玩家底层只有 3 种状态,严格切换:

1. 存活 → 可移动/射击/受击

2. 死亡 → 模型隐藏、无法操作、等待复活

3. 无敌 → 复活后 3 秒,不受伤害、头顶显示标签

所有状态由服务端时间戳控制,客户端只负责显示。

九、UI 与视觉反馈底层

全部基于 CSS 绝对定位 + JS 控制

1. 准星:CSS 画十字, z-index 最高

2. 受击闪红:CSS 动画 @keyframes 透明度渐变

3. 血条:CSS 宽度过渡动画

4. 计分板:动态拼接 HTML,按分数排序

5. 击杀提示:动态创建 DOM,3 秒后自动删除

总结

浏览器用 Three.js 渲染 3D 画面 → JS 监听输入算出移动 → WebSocket 把数据发给 Node.js 服务端 → 服务端做物理/伤害/死亡/复活/计分判定 → 再把全服状态广播给所有客户端 → 客户端渲染同步,完成联机 FPS。

🃏 KX干瞪眼

点击下方按钮,在新标签页打开游戏:(点击状态可刷新)

进入游戏 检测中...

🎴 KX吹牛皮

支持最多8人联机。异地联机时强烈建议进入ts频道(点击状态可刷新)

进入游戏 检测中...

🎮 孔巨cs

注意:暂不提供web端,请联系孔巨人获取windows、Mac、安卓版安装包

🔧 服务器后台管理

请输入管理密码以访问后台页面:

联系我

如果你对我的内容感兴趣,或者有技术交流、项目合作的想法,欢迎随时联系我!

邮箱:2041960863@qq.com

微信:13629978810(请备注:技术交流)

GitHub:暂无

Gitee:https://gitee.com/kxaltraman