【训练营】4G 遥控机器狗 - 嘉立创EDA开源硬件平台

编辑器版本 ×
标准版 Standard

1、简单易用,可快速上手

2、流畅支持300个器件或1000个焊盘以下的设计规模

3、支持简单的电路仿真

4、面向学生、老师、创客

专业版 professional

1、全新的交互和界面

2、流畅支持超过3w器件或10w焊盘的设计规模,支持面板和外壳设计

3、更严谨的设计约束,更规范的流程

4、面向企业、更专业的用户

标准版 【训练营】4G 遥控机器狗

  • 1.3k
  • 1
  • 4

简介:基于HI3861制作的机器狗

开源协议: GPL 3.0

(未经作者授权,禁止转载)

创建时间: 2022-07-10 23:53:10
更新时间: 2022-11-26 17:02:34
描述

项目简介

  • 基于HI3861制作的具有4G 远程控制的机器狗

基本功能

  • 机器狗可以进行前进 后退 左转 右转行走,同时可以根据每条腿的舵机旋转角度做出各种动作
  • 使用手机APP远程控制和实时音视频通话
  • 使用手表APP手势控制机器狗的行走

硬件部分

电路板

  • 主控使用鸿蒙 HI3861搭配 PCA9685 进行多路舵机控制
  • 电路按照训练营课程绘制,为了方便控制电池电量,加了一个船型开关焊盘

外壳

  • 外壳参考训练营课程内容使用 SW 设计
  • 为了方便放手机把前后左右挡板顶部加高了一部分
  • 为了安装船型开关底部开了一个长方形槽,但是没考虑到厚度问题,船型开关安装的不是特别牢固.

其他

  • 机器狗背部放置旧手机,提供音视频通话和网络热点
  • 为了平放手机时能拍到前方画面,在手机摄像头位置加了一个三棱镜改变光的角度
  • 狗脚加了创可贴防滑

软件部分

固件

  • 在训练营提供的固件基础上修改主程序,改为 TCP 客户端接收指令,参考如下
       //创建socket
        if ((sock_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
        {
            perror("create socket failed!\r\n");
            exit(1);
        }

        //初始化预连接的服务端地址
        send_addr.sin_family = AF_INET;
        send_addr.sin_port = htons(TCP_PORT);
        // send_addr.sin_addr.s_addr = inet_addr(TCP_SERVER_ADRESS);
        addr_length = sizeof(send_addr);

        connect(sock_fd, (struct sockaddr *)&send_addr, addr_length);

        while (1)
        {
            bzero(recv_buf, sizeof(recv_buf));
            int recv_len;
            recv_len = recv(sock_fd, recv_buf, sizeof(recv_buf), 0);
            if(recv_len == -1)
            {
                //TODO::处理掉线
                break;
            }
            // printf("len: %d data: %s\r\n", recv_len, recv_buf);
            dog_execJson(recv_buf,recv_len);
        }
        //关闭这个 socket
        closesocket(sock_fd);

  • 在解析 json 位置加了校验防止接收到非 json 字符串时重启
 typejson = cJSON_GetObjectItem(recv_json, "type");
    if (typejson) {
        ....
    }

控制端

手机APP

  • APP使用Swift开发,其中上半部分为视频显示,同时支持语音对讲,也就是音视频通话,由于没人一起测试所以音频通话部分视频里没有展示.
  • 使用虚拟摇杆控制机器狗四个方向行走
  • 同时提供了四个按钮进行控制机器狗的四个预设姿势.
  • WechatIMG3863.png

手表 APP

  • 使用手表的陀螺仪数据判断手势,上抬前进,下摆后退,手腕左右转控制机器狗左右转向
  • 界面只简单显示了一下识别结果就不截图了,使用效果参看视频

后台服务

音视频通话(WebRTC)

  • 信令服务由 swift 编写,主要作用提供一个 websocket 服务对设备进行配对
  • TURN 使用coturn

远程控制

  • 控制服务为 golang 编写,简单搭建一个 tcp 服务,用于把收到的指令消息转发给机器狗,代码参考如下
	for {
		reader := bufio.NewReader(conn)
		message, err := reader.ReadString('\n')

		if err != nil {
			break
		}

		for item := range openConnections {
			if item != conn {
				item.Write([]byte(message))
			}
		}
	}

  • 为了解决手表不能使用 tcp 直接通信的问题,在里面加了一个 http 服务转发.

端口转发

  • 由于没有服务器,所以以上服务全是在本地运行,通过路由器端口映射出去(需要有公网 IP)供机器狗和手机远程访问

总结

  • 由于时间原因(懒)软件部分很多都是为了优先实现功能编写,还有很多不足需要完善
  • 电路设计上本来想加个充电电路因为水平限制没加上
  • 本次训练营提供的资料,尤其是固件和运动学逆解工具都比较完善,出于时间原因(懒)只是简单做了修改使用,没有深入学习

成品展示图&附件视频

机器狗整体

设计图
原理图
1 /
PCB
1 /
未生成预览图,请在编辑器重新保存一次
工程视频/附件
工程成员
侵权投诉
相关工程
换一批
加载中...
认证图标

Eilgnaw

鸿蒙物联网实战训练营优秀学员

添加到专辑 ×

加载中...

温馨提示 ×

是否需要添加此工程到专辑?

温馨提示
动态内容涉嫌违规
内容:
  • 153 6159 2675

服务时间

周一至周五 9:00~18:00
  • 技术支持

support
  • 开源平台公众号

MP