鸿蒙物联网小车

举报
yd_241646257 发表于 2025/06/04 19:48:38 2025/06/04
【摘要】 鸿蒙物联网小车在当前智能硬件快速发展的背景下,我完成了一个结合Python后端与ArkTS前端的小型项目——四轴麦克纳姆轮(麦轮)小车的实时运动控制系统。该项目不仅实现了对小车的精准控制,还具备良好的用户交互体验,具备一定的实际应用价值。 核心技术栈为Python和ArkTS。Python主要用于后端逻辑处理及与嵌入式设备之间的通信管理,负责接收来自前端的控制指令,并通过串口或无线模块将指令...

鸿蒙物联网小车

在当前智能硬件快速发展的背景下,我完成了一个结合Python后端与ArkTS前端的小型项目——四轴麦克纳姆轮(麦轮)小车的实时运动控制系统。该项目不仅实现了对小车的精准控制,还具备良好的用户交互体验,具备一定的实际应用价值。

 

核心技术栈为PythonArkTSPython主要用于后端逻辑处理及与嵌入式设备之间的通信管理,负责接收来自前端的控制指令,并通过串口或无线模块将指令下发至小车主控芯片;同时接收来自传感器的数据反馈,如速度、方向、陀螺仪信息等,实现闭环控制。ArkTS则用于构建前端控制界面,利用其高效的渲染能力和响应式编程特性,实现了用户操作界面的流畅性与实时性。

 

在功能实现方面,第一大亮点是四轴麦轮小车的实时运动控制。通过Python编写的控制算法,能够根据用户的输入指令(前进、后退、左移、右移、旋转等)计算出四个电机的输出功率,并发送给嵌入式系统,从而实现全方位移动。此外,系统还能实时接收嵌入式端上传的传感器数据,动态调整小车状态,确保运行平稳、响应迅速。

 

页面布局代码实现:

TypeScript
import { Move, aroundMoves, otherMoves } from '../service/MoveService'
import { UDPClient } from '../service/UDPClient';
import { buffer } from '@kit.ArkTS';

@Entry
@Component
struct Index {
  client: UDPClient | undefined = undefined;

  @State targetIp: string = "192.168.248.137"
  @State targetPort: number = 8989
  @State localPort: number = 8989

  aboutToAppear(): void {
    this.client = new UDPClient();
    this.client?.bind(this.localPort)
  }

  async moveCar(action: number) {
    this.client?.send( buffer.from([action]).buffer, this.targetIp, this.targetPort)
  }

  build() {
    Column() {
      Column() {
        Image($rawfile('mecanum_car.png')).height(200).offset({ y: 120 })
        ForEach(aroundMoves, (item: Move) => {
          Button() {
            Row({ space: 5 }) {
              Image(item.icon).height(20).width(20).margin({ left: 10 })
              Text(`${item.desc}`).fontSize(18).fontColor(0xffffff)
            }.alignItems(VerticalAlign.Center).width(90).height(40)
          }
          .type(ButtonType.Normal)
          .backgroundColor('#6495ED')
          .borderRadius(20)
          .offset({ x: item.offsetX, y: item.offsetY })
          .gesture(
            LongPressGesture({ repeat: true, duration: 100 })
              .onAction(async () => await this.moveCar(item.index))
          )
        })
      }

      Row() {
        Flex({ wrap: FlexWrap.Wrap, justifyContent: FlexAlign.Center }) {
          ForEach(otherMoves, (item: Move, index: number) => {
            Button() {
              Row() {
                Image(item.icon).height(32).width(32)
                Text(`${item.desc}`).fontSize(16).fontColor(0xffffff)
              }.height(40)
            }
            .type(ButtonType.Normal)
            .width('45%')
            .backgroundColor('#6495ED')
            .borderRadius(20)
            .margin({ top: 30, right: index % 2 == 0 ? 10 : 0, left: index % 2 != 0 ? 10 : 0 })
            .gesture(
              LongPressGesture({ repeat: true, duration: 100 })
                .onAction(async () => await this.moveCar(item.index))
            )
          })
        }
      }.offset({ y: -80 })
    }
    .width('100%')
    .height('100%')
  }
}

第二大核心功能是前后端的双向通信机制。借助 UDP 协议,ArkTS前端与Python后端建立稳定连接,不仅能够发送控制命令,还能实时获取小车的状态信息,如电池电量、速度、姿态角等,并在界面上动态展示。这种数据同步机制有效提升了系统的透明度与用户的操作体验。

 

UDP 客户端实现

TypeScript
import socket from '@ohos.net.socket';
import wifiManager from '@ohos.wifiManager';

let ipNum = wifiManager.getIpInfo().ipAddress

export class UDPClient {
  udpSocket: socket.UDPSocket | undefined = undefined;

  constructor() {
    this.udpSocket = socket.constructUDPSocketInstance();
  }

  async bind(localPort: number = 4001) {
    await this.udpSocket?.bind({
      address: (ipNum >>> 24) + '.' + (ipNum >> 16 & 0xFF) + '.' + (ipNum >> 8 & 0xFF) + '.' + (ipNum & 0xFF),
      port: localPort,
      family: 1
    })
  }

  async send(data: string | ArrayBuffer, targetIp: string, targetPort: number) {
    await this.udpSocket?.send({ data, address: { address: targetIp, port: targetPort, family: 1 } })
  }

  async getState() {
    return this.udpSocket?.getState()
  }

  async setExtraOptions(options: socket.UDPExtraOptions) {
    await this.udpSocket?.setExtraOptions(options)
  }
}

 

总的来说,该项目是一个融合了嵌入式控制、前后端通信以及用户交互设计的完整系统,具有较高的学习与拓展价值。未来可进一步加入图像识别、路径规划等功能,向更高阶的智能机器人平台迈进。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。