欢迎来到KX的个人主页
这里是我的个人页面,展示我的抽象作品,欢迎你的来访!
我的技能
🛠 工具
三维建模、锡焊、钳工,以及公网服务器部署、后端搭建。使用AI IDE开发前后端、嵌入式、游戏项目并落地。
💻 开发
熟练使用Godot引擎,制作联机fps游戏。用three.js+websocket制作网页端联机游戏。熟练使用Arduino IDE开发Arduino、esp32项目。
🏋️♂️ 健身
力量举大佬!
* 小道消息:以上内容都是吹的
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地址即可加载交互页面,实现无线遥控功能。
工作流程:
↓
[执行机构] ← 串口指令 ← [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自平衡小车
1. 系统概述
基于倒立摆模型的自平衡移动平台,采用MPU6050姿态传感器实时检测俯仰角,通过PID闭环控制算法驱动电机抵消倾斜,实现动态平衡。集成PS2无线手柄实现人机交互,支持前进/后退及原地自转控制。
2. 硬件架构
- PS2手柄:2.4GHz无线人机交互接口,输出摇杆模拟量
- MPU6050:六轴姿态传感器(加速度计+陀螺仪)
- 编码器电机:直流减速电机+光电编码器,闭环转速反馈
- 电机驱动:H桥驱动,支持正反转及PWM调速
3. 核心算法
3.1 姿态解算(互补滤波)
- 陀螺仪:动态响应快,积分得角度(存在漂移)
- 加速度计:静态精度高,易受振动干扰
- 融合策略:高频信任陀螺仪,低频用加速度计修正漂移
3.2 PID平衡控制
- P(比例):根据倾角误差输出电机力矩,核心平衡力
- I(积分):消除静态偏差,补偿系统重心偏移
- D(微分):抑制振荡,提高系统稳定性
控制逻辑:前倾→电机前转→产生回复力矩→回归平衡位置
3.3 手柄控制映射
- 左摇杆Y轴:调整目标俯仰角(±3.5°),间接控制前进/后退
- 右摇杆X轴:叠加左右轮差速,实现原地自转
4. 控制流程
5. 工程优化
- 死区处理:|output|<10 时电机刹车,消除静态抖动
- 输出限幅:电机转速限制 ±255,防止驱动过载
- 方向对称:左右电机反向安装,软件统一方向定义
我的力量水平(83kg级)
我的训练计划
懒得填了,后面再说。
kx页游
🎮 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。
🔧 服务器后台管理
请输入管理密码以访问后台页面:
联系我
如果你对我的内容感兴趣,或者有技术交流、项目合作的想法,欢迎随时联系我!
邮箱:2041960863@qq.com
微信:13629978810(请备注:技术交流)
GitHub:暂无
Gitee:https://gitee.com/kxaltraman