【XR806开发板试用】基于XR806实现智能小车

一、实验功能:

1、 基于XR806实现WIFI连接路由器
2、 XR806设备创建TCP socket服务器,局域网内通过PC端TCP客服端连接XR806 TCP服务器进行指令控制小车运行(指令A:前进、B:后退、C:左转、D:右转、I:停止)。
3、 小车行进由GPIO控制电机转动,行进速度通过XR806硬件定时器实现GPIO的PWM脉宽调制来控制小车行进速度。
4、 创建双线程实现智能小车,一个线程负责小车运行,一个线程主要用于TCP socket服务器完成与TCP客服端的指令收发。
实物图:
在这里插入图片描述

二、开发环境安装配置

开发环境安装配置参考https://aijishu.com/a/1060000000291606博文,实现基于优麒麟ubuntukylin-20.04,使用的OpenHarmony代码版本是1.0.1_release。

鸿蒙系统固件烧录参考了下面这个贴子:
https://aijishu.com/a/1060000000287250 全志 XR806 OpenHarmony 鸿蒙系统固件烧录。
tcp socket通信参考帖子:
https://aijishu.com/a/1060000000286948 【XR806开发板试用】xr806使用tcp socket与手机通信

三、硬件连接电路

小车驱动板电路图
电源电路:输入7.2V-12V电源,通过LM2596S稳压IC输出5V电源
在这里插入图片描述

车轮驱动电路,采用L293芯片驱动电机。EN使能默认悬空为高电平,只需控制电机的GPIO口输出高低电平即可实现车轮的转动,如车轮电机T1,控制GPIO口为PD
在这里插入图片描述
XR806开发板接口图如下:
在这里插入图片描述

电机控制信号与XR806开发板IO口定义:
在这里插入图片描述

四、项目实现
参考了官方的点灯教程
创建工程
在device/xradio/xr806/ohosdemo中新建一个文件夹,并命令为smart_car。
在文件夹中新建文件
~/share/XR806/openharmony/device/xradio/xr806/ohosdemo/smart_car$ tree -L 2 . ├── BUILD.gn └── smart_car ├── BUILD.gn └── main.c ├── motor.h └── motor.c ├── tcp_net_socket.h └── tcp_net_socket.c
修改device/xradio/xr806/ohosdemo/smart_car/BUILD.gn
`import(“//device/xradio/xr806/liteos_m/config.gni”)

static_library(“app_smart_car”) {
configs = []

sources = [
“src/main.c”,
“src/tcp_net_socket.c”,
“src/motor.c”,
]

cflags = board_cflags

include_dirs = board_include_dirs
include_dirs += [
“//kernel/liteos_m/kernel/arch/include”,
“//base/iot_hardware/peripheral/interfaces/kits”,
“//utils/native/lite/include”,
“//foundation/communication/wifi_lite/interfaces/wifiservice”,
“//third_party/lwip/src/include”,
“//third_party/cJSON”,
]
}`
电机控制信号与XR806开发板IO口定义:

#define GPIO_ID_PA11 11
#define GPIO_ID_PA12 12
#define GPIO_ID_PA13 13
#define GPIO_ID_PA19 19
#define GPIO_ID_PA20 20
#define GPIO_ID_PA21 21
#define GPIO_ID_PA22 22
#define GPIO_ID_PA23 23

#define GPIO_ID_PB3 27
#define GPIO_ID_PB4 28
#define GPIO_ID_PB5 29
#define GPIO_ID_PB6 30
#define GPIO_ID_PB7 31
#define GPIO_ID_PB14 38
#define GPIO_ID_PB15 39

#define FRONT_LEFT_F_PIN        GPIO_ID_PA12 
#define FRONT_LEFT_F_SET        IoTGpioSetOutputVal(FRONT_LEFT_F_PIN,1);
#define FRONT_LEFT_F_RESET      IoTGpioSetOutputVal(FRONT_LEFT_F_PIN,0);
								
#define FRONT_LEFT_B_PIN        GPIO_ID_PA13 
#define FRONT_LEFT_B_SET        IoTGpioSetOutputVal(FRONT_LEFT_B_PIN,1);
#define FRONT_LEFT_B_RESET      IoTGpioSetOutputVal(FRONT_LEFT_B_PIN,0);
								
#define FRONT_RIGHT_F_PIN       GPIO_ID_PB7
#define FRONT_RIGHT_F_SET       IoTGpioSetOutputVal(FRONT_RIGHT_F_PIN,1);
#define FRONT_RIGHT_F_RESET     IoTGpioSetOutputVal(FRONT_RIGHT_F_PIN,0);
								
#define FRONT_RIGHT_B_PIN       GPIO_ID_PB5
#define FRONT_RIGHT_B_SET       IoTGpioSetOutputVal(FRONT_RIGHT_B_PIN,1);
#define FRONT_RIGHT_B_RESET     IoTGpioSetOutputVal(FRONT_RIGHT_B_PIN,0);
								
#define BEHIND_LEFT_F_PIN       GPIO_ID_PA19
#define BEHIND_LEFT_F_SET       IoTGpioSetOutputVal(BEHIND_LEFT_F_PIN,1);
#define BEHIND_LEFT_F_RESET     IoTGpioSetOutputVal(BEHIND_LEFT_F_PIN,0);
								
#define BEHIND_LEFT_B_PIN       GPIO_ID_PA20
#define BEHIND_LEFT_B_SET       IoTGpioSetOutputVal(BEHIND_LEFT_B_PIN,1);
#define BEHIND_LEFT_B_RESET     IoTGpioSetOutputVal(BEHIND_LEFT_B_PIN,0);
								
#define BEHIND_RIGHT_F_PIN      GPIO_ID_PB6
#define BEHIND_RIGHT_F_SET      IoTGpioSetOutputVal(BEHIND_RIGHT_F_PIN,1);
#define BEHIND_RIGHT_F_RESET    IoTGpioSetOutputVal(BEHIND_RIGHT_F_PIN,0);
								
#define BEHIND_RIGHT_B_PIN      GPIO_ID_PB4
#define BEHIND_RIGHT_B_SET      IoTGpioSetOutputVal(BEHIND_RIGHT_B_PIN,1);
#define BEHIND_RIGHT_B_RESET    IoTGpioSetOutputVal(BEHIND_RIGHT_B_PIN,0);

小车电机驱动配置


//左前
#define FRONT_LEFT_GO    FRONT_LEFT_F_SET; FRONT_LEFT_B_RESET//前进
#define FRONT_LEFT_BACK  FRONT_LEFT_F_RESET; FRONT_LEFT_B_SET//后退
#define FRONT_LEFT_STOP  FRONT_LEFT_F_RESET; FRONT_LEFT_B_RESET//停止

//右前
#define FRONT_RIGHT_GO     FRONT_RIGHT_F_SET;  FRONT_RIGHT_B_RESET
#define FRONT_RIGHT_BACK   FRONT_RIGHT_F_RESET;FRONT_RIGHT_B_SET
#define FRONT_RIGHT_STOP   FRONT_RIGHT_F_RESET;FRONT_RIGHT_B_RESET

//左后
#define BEHIND_LEFT_GO     BEHIND_LEFT_F_SET;BEHIND_LEFT_B_RESET
#define BEHIND_LEFT_BACK   BEHIND_LEFT_F_RESET;BEHIND_LEFT_B_SET
#define BEHIND_LEFT_STOP   BEHIND_LEFT_F_RESET;BEHIND_LEFT_B_RESET

//右后
#define BEHIND_RIGHT_GO    BEHIND_RIGHT_F_SET;BEHIND_RIGHT_B_RESET
#define BEHIND_RIGHT_BACK  BEHIND_RIGHT_F_RESET;BEHIND_RIGHT_B_SET
#define BEHIND_RIGHT_STOP  BEHIND_RIGHT_F_RESET;BEHIND_RIGHT_B_RESET


//全局变量定义
#define SPEED_DUTY 40//默认占空比 按1ms最小分辨率 周期50ms计算
unsigned int speed_count=0;//占空比计数器 50次一周期
char front_left_speed_duty=SPEED_DUTY;
char front_right_speed_duty=SPEED_DUTY;
char behind_left_speed_duty=SPEED_DUTY;
char behind_right_speed_duty=SPEED_DUTY;

定时器实现小车PWM控制
`void timer_callback(void *arg)
{
/sec_count++;
printf(" timer irq: %d\n\r", sec_count);
IoTGpioSetOutputVal(11, sec_count%2);
/

tick_1ms++;
if(tick_1ms >= 10)
{
	tick_1ms = 0;
	speed_count++;
	tick_5ms++;
	if(speed_count >= 50)
	{
		speed_count = 0;
	}
	CarMove();
}	

}
int timer_init(void)
{
HAL_Status status = HAL_ERROR;
TIMER_InitParam param;

param.arg = NULL;
param.callback = timer_callback;
param.cfg = HAL_TIMER_MakeInitCfg(TIMER_MODE_REPEAT,      /*timer mode*/
                                  TIMER_CLK_SRC_HFCLK,      /*HFCLOCK*/
                                  TIMER_CLK_PRESCALER_4); /*CLK_PRESCALER*/
param.isEnableIRQ = 1;
param.period = COUNT_TIME * (HFCLOCK / CLK_PRESCALER);

status = HAL_TIMER_Init(TIMERID, &param);
if (status != HAL_OK)
    printf("timer int error %d\n", status);

return status;

}小车前进函数,根据占空比驱动电机转动void CarMove(void)
{
//左前轮
if(front_left_speed_duty > 0)//向前
{
if(speed_count < front_left_speed_duty)
{
FRONT_LEFT_GO;
}else
{
FRONT_LEFT_STOP;
}
}
else if(front_left_speed_duty < 0)//向后
{
if(speed_count < (-1)*front_left_speed_duty)
{
FRONT_LEFT_BACK;
}else
{
FRONT_LEFT_STOP;
}
}
else //停止
{
FRONT_LEFT_STOP;
}

	//右前轮
if(front_right_speed_duty > 0)//向前
{
	if(speed_count < front_right_speed_duty)
	{
		FRONT_RIGHT_GO;
	}else                //停止
	{
		FRONT_RIGHT_STOP;
	}
}
else if(front_right_speed_duty < 0)//向后
{
	if(speed_count < (-1)*front_right_speed_duty)
	{
		FRONT_RIGHT_BACK;
	}else                //停止
	{
		FRONT_RIGHT_STOP;
	}
}
else                //停止
{
	FRONT_RIGHT_STOP;
}

//左后轮
if(behind_left_speed_duty > 0)//向前
{
	if(speed_count < behind_left_speed_duty)
	{
		BEHIND_LEFT_GO;
	}	else                //停止
	{
		BEHIND_LEFT_STOP;
	}
}
else if(behind_left_speed_duty < 0)//向后
{
	if(speed_count < (-1)*behind_left_speed_duty)
	{
		BEHIND_LEFT_BACK;
	}	else                //停止
	{
		BEHIND_LEFT_STOP;
	}
}
else                //停止
{
	BEHIND_LEFT_STOP;
}

	//右后轮
if(behind_right_speed_duty > 0)//向前
{
	if(speed_count < behind_right_speed_duty)
	{
		BEHIND_RIGHT_GO;
	}	else                //停止
	{
		BEHIND_RIGHT_STOP;
	}
}
else if(behind_right_speed_duty < 0)//向后
{
	if(speed_count < (-1)*behind_right_speed_duty)
	{
		BEHIND_RIGHT_BACK;
	}	else                //停止
	{
		BEHIND_RIGHT_STOP;
	}
}
else                //停止
{
	BEHIND_RIGHT_STOP;
}

}

//向前
void CarGo(void)
{
front_left_speed_duty=25;//SPEED_DUTY 50
front_right_speed_duty=25;
behind_left_speed_duty=25;
behind_right_speed_duty=25;
}

//后退
void CarBack(void)
{
front_left_speed_duty=-50;//SPEED_DUTY
front_right_speed_duty=-50;
behind_left_speed_duty=-50;
behind_right_speed_duty=-50;
}

//向左
void CarLeft(void)
{
front_left_speed_duty=-20;
front_right_speed_duty=SPEED_DUTY;
behind_left_speed_duty=-20;
behind_right_speed_duty=SPEED_DUTY+10;//增加后轮驱动力
}

//向右
void CarRight(void)
{
front_left_speed_duty=SPEED_DUTY;
front_right_speed_duty=-20;
behind_left_speed_duty=SPEED_DUTY+10;//增加后轮驱动力
behind_right_speed_duty=-20;
}

//停止
void CarStop(void)
{
front_left_speed_duty=0;
front_right_speed_duty=0;
behind_left_speed_duty=0;
behind_right_speed_duty=0;
}`

项目编译
在这里插入图片描述

下载固件
device\xradio\xr806\xr_skylark\out\xr_system.img
在这里插入图片描述

PC端TCP客服端边连接小车下发指令。
在这里插入图片描述

小车指令接收串口打印
在这里插入图片描述

五、碰到问题
编译报数据溢出错误:

[OHOS ERROR] chmod 777 ../../../../../tools/mkimage && ../../../../../tools/mkimage  -c .image.cfg -o xr_system.img
[OHOS ERROR] err: bin 1 and bin 2 were overlaped!
[OHOS ERROR] Overlapped size: 1024 Byte(1kB)
[OHOS ERROR] bin 1 name:app.bin    begin: 0x00008000    end: 0x00018000
[OHOS ERROR] bin 2 name:app_xip.bin    begin: 0x00017C00
[OHOS ERROR] 
[OHOS ERROR] We've rearranged bin files and generated new cfg file 'image_auto_cal.cfg', the new one is recommended.
[OHOS ERROR] Generate image file failed
[OHOS ERROR] cfg string:
[OHOS ERROR] /*
[OHOS ERROR]  *
[OHOS ERROR]  * Automatically generated file; DO NOT EDIT.
[OHOS ERROR]  * XR806 SDK Configuration
[OHOS ERROR]  *
[OHOS ERROR]  */
[OHOS ERROR] {
[OHOS ERROR]     "magic" : "AWIH",
[OHOS ERROR]     "version" : "0.5",
[OHOS ERROR]     "image" : {"max_size": "1532K"},
[OHOS ERROR]     "section" :[
[OHOS ERROR]   {"id": "0xa5ff5a00", "bin" :"boot_40M.bin", "cert": "null", "flash_offs": "0K", "sram_offs": "0x00230000", "ep": "0x00230101", "attr":"0x1"},
[OHOS ERROR]   {"id": "0xa5fe5a01", "bin" :"app.bin", "cert": "null", "flash_offs": "32K", "sram_offs": "0x00201000", "ep": "0x00201101", "attr":"0x1"},
[OHOS ERROR]   {"id": "0xa5fd5a02", "bin" :"app_xip.bin", "cert": "null", "flash_offs": "95K", "sram_offs": "0xffffffff", "ep": "0xffffffff", "attr":"0x2"},
[OHOS ERROR]   {"id": "0xa5fa5a05", "bin" :"wlan_bl.bin", "cert": "null", "flash_offs": "1166K", "sram_offs": "0xffffffff", "ep": "0xffffffff", "attr":"0x1"},
[OHOS ERROR]   {"id": "0xa5f95a06", "bin" :"wlan_fw.bin", "cert": "null", "flash_offs": "1169K", "sram_offs": "0xffffffff", "ep": "0xffffffff", "attr":"0x1"},
[OHOS ERROR]   {"id": "0xa5f85a07", "bin" :"sys_sdd_40M.bin", "cert": "null", "flash_offs": "1194K", "sram_offs": "0xffffffff", "ep": "0xffffffff", "attr":"0x1"},
[OHOS ERROR]   {}
[OHOS ERROR]  ]
[OHOS ERROR] }

查找出错点:
openharmony$ grep “1532K” device/xradio/xr806/xr_skylark/project -rn

device/xradio/xr806/xr_skylark/project/example/audio_play/image/xr806/image.cfg:6:    "image"   : {"max_size": "1532K", "xz_max_size": "1200K"},
device/xradio/xr806/xr_skylark/project/example/audio_play/image/xr806/image.cfg:8:    "image"   : {"max_size": "1532K"},
device/xradio/xr806/xr_skylark/project/demo/audio_demo/image/xr806/image.cfg:4:    "image" : {"max_size": "1532K"},
device/xradio/xr806/xr_skylark/project/demo/audio_demo/image/xr806/image_auto_cal.cfg:10:    "image" : {"max_size": "1532K"},
device/xradio/xr806/xr_skylark/project/demo/audio_demo/image/xr806/.image.cfg:10:    "image" : {"max_size": "1532K"},

XR806/openharmony/device/xradio/xr806/xr_skylark/project/demo/audio_demo/image/xr806$ ls -l

总用量 2404
-rwxrwxr-x 1 boarmy boarmy   64456 1月  17 20:01 app.bin
-rwxrwxr-x 1 boarmy boarmy 1095680 1月  17 20:01 app_xip.bin
-rwxrwxr-x 1 boarmy boarmy   25024 1月  17 20:01 boot_40M.bin
-rw-rw-r-- 1 boarmy boarmy    1067 1月  17 20:01 image_auto_cal.cfg
-rwxrwxr-x 1 boarmy boarmy     982 1月   9 12:51 image.cfg
-rwxrwxr-x 1 boarmy boarmy     792 1月  17 20:01 sys_sdd_40M.bin
-rwxrwxr-x 1 boarmy boarmy    2320 1月  17 20:01 wlan_bl.bin
-rwxrwxr-x 1 boarmy boarmy   25492 1月  17 20:01 wlan_fw.bin
-rw-rw-r-- 1 boarmy boarmy 1223512 1月  17 19:51 xr_system.img

可找到image.cf

{
    "magic" : "AWIH",
    "version" : "0.5",
    "image" : {"max_size": "1532K"},
    "section" :[
		{"id": "0xa5ff5a00", "bin" :"boot_40M.bin",	"cert": "null",	"flash_offs": "0K",	"sram_offs": "0x00230000", "ep": "0x00230101", "attr":"0x1"},
		{"id": "0xa5fe5a01", "bin" :"app.bin",	"cert": "null",	"flash_offs": "32K",	"sram_offs": "0x00201000", "ep": "0x00201101", "attr":"0x1"},
		{"id": "0xa5fd5a02", "bin" :"app_xip.bin",	"cert": "null",	"flash_offs": "95K",	"sram_offs": "0xffffffff", "ep": "0xffffffff", "attr":"0x2"},
		{"id": "0xa5fa5a05", "bin" :"wlan_bl.bin",	"cert": "null",	"flash_offs": "1166K",	"sram_offs": "0xffffffff", "ep": "0xffffffff", "attr":"0x1"},
		{"id": "0xa5f95a06", "bin" :"wlan_fw.bin",	"cert": "null",	"flash_offs": "1169K",	"sram_offs": "0xffffffff", "ep": "0xffffffff", "attr":"0x1"},
		{"id": "0xa5f85a07", "bin" :"sys_sdd_40M.bin",	"cert": "null",	"flash_offs": "1194K",	"sram_offs": "0xffffffff", "ep": "0xffffffff", "attr":"0x1"},
		{}
	]
}

将image.cfg修改为:

{
    "magic" : "AWIH",
    "version" : "0.5",
    "image" : {"max_size": "1532K"},
    "section" :[
		{"id": "0xa5ff5a00", "bin" :"boot_40M.bin",	"cert": "null",	"flash_offs": "0K",	"sram_offs": "0x00230000", "ep": "0x00230101", "attr":"0x1"},
		{"id": "0xa5fe5a01", "bin" :"app.bin",	"cert": "null",	"flash_offs": "32K",	"sram_offs": "0x00201000", "ep": "0x00201101", "attr":"0x1"},
		{"id": "0xa5fd5a02", "bin" :"app_xip.bin",	"cert": "null",	"flash_offs": "",	"sram_offs": "0xffffffff", "ep": "0xffffffff", "attr":"0x2"},
		{"id": "0xa5fa5a05", "bin" :"wlan_bl.bin",	"cert": "null",	"flash_offs": "",	"sram_offs": "0xffffffff", "ep": "0xffffffff", "attr":"0x1"},
		{"id": "0xa5f95a06", "bin" :"wlan_fw.bin",	"cert": "null",	"flash_offs": "",	"sram_offs": "0xffffffff", "ep": "0xffffffff", "attr":"0x1"},
		{"id": "0xa5f85a07", "bin" :"sys_sdd_40M.bin",	"cert": "null",	"flash_offs": "",	"sram_offs": "0xffffffff", "ep": "0xffffffff", "attr":"0x1"},
		{}
	]
}

flash_offs - 该段bin文件存放在 FLASH 中的位置偏移,若不填写,则软件自动放在上一个文件结束的位置,以1024 byte对齐。问题解决。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/583497.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

等保测评有那些流程?为什么要做等保

根据《网络安全法》规定&#xff0c;网络运营者应当按照国家的网络安全技术标准和要求&#xff0c;采取技术措施保障网络安全&#xff0c;避免网络安全事件的发生。而等保测评是国家对企事业单位进行信息系统安全等级评定的一项重要制度&#xff0c;通过等级测评&#xff0c;可…

五一出去玩,随身WiFi纽曼和格行,哪个更值得选择?2024随身WiFi大流量全国通用,2024随身WiFi推荐第一名

临近五一&#xff0c;有太多的朋友需要出去游玩&#xff0c;但是会面临网络差&#xff0c;流量不够用等问题&#xff0c;从而选择随身WiFi。那么有非常多的朋友就纠结了&#xff0c;作为老牌企业的格行和纽曼到底选择哪个呢&#xff1f;下面我们将会从网速、续航、售后、客户评…

鸿蒙OpenHarmony【标准系统 烧录】(基于RK3568开发板)

烧录 烧录是指将编译后的程序文件下载到芯片开发板上的动作&#xff0c;为后续的程序调试提供基础。DevEco Device Tool提供一键烧录功能&#xff0c;操作简单&#xff0c;能快捷、高效的完成程序烧录&#xff0c;提升烧录的效率。 RK3568的镜像烧录通过Windows环境进行烧录&…

齐鲁制药集团李伯涛:40年不忘初心,助推企业高质量发展

一个成功的企业&#xff0c;离不开一个思想超前的优秀引领者&#xff0c;齐鲁制药亦是如此。在过去几十年的发展中&#xff0c;在董事长李伯涛的带领下&#xff0c;齐鲁制药研发出一系列领先的药品&#xff0c;不断占据国内、国际医药市场&#xff0c;逐渐成长为具有国际影响力…

Qt QLineEdit详解

1.简介 QLineEdit是一个单行文本编辑器。 行编辑允许用户使用一组有用的编辑功能输入和编辑单行纯文本&#xff0c;包括撤消和重做、剪切和粘贴以及拖放。 通过更改行编辑的echoMode&#xff0c;它也可以用作“只写”字段&#xff0c;用于密码等输入。 文本的长度可以限制为ma…

Web 服务器解析漏洞 原理以及修复方法

漏洞名称 &#xff1a;Web服务器解析漏洞 漏洞描述&#xff1a; 服务器相关中间件存在一些解析漏洞&#xff0c;攻击者可通过上传一定格式的文件&#xff0c;被服务器的中间件进行了解析&#xff0c;这样就对系统造成一定危害。常见的服务器解析漏洞涉及的中间件有IIS&#x…

详解CCF-CSP 202312-3 树上搜索

详解CCF-CSP 202312-3 树上搜索 原题连接 202312-3 树上搜索 代码及详细注释 //一个树形结构的处理程序&#xff0c;主要用于处理一些权重相关的查询 #include <iostream> #include <vector> #include <set>//定义全局变量 //好处&#xff1a; //&#…

《DiffusionNER: Boundary Diffusion for Named Entity Recognition》

Submitted 22 May, 2023; originally announced May 2023. Comments: Accepted to ACL 2023, submission version https://github.com/tricktreat/DiffusionNER 在这里插入图片描述 问题&#xff1a; 命名实体识别任务中存在的噪声跨度&#xff08;边界不清晰&#xff09…

MS17-010---利用“永恒之蓝”漏洞攻击 win7主机

免责声明:本文仅做技术交流与学习.... 目录 一.前置知识 1.何为永恒之蓝&#xff1f; 2.什么是SMB协议&#xff1f; 3.SMB工作原理是什么&#xff1f; 二、实验环境 三、实验步骤 nmap扫描 msf一把梭哈 shell执行命令 远程连接 一&#xff0e; 二&#xff0e; 一.前…

数字化转型新篇章:企业通往智能化的新范式

早在十多年前&#xff0c;一些具有前瞻视野的企业以实现“数字化”为目标启动转型实践。但时至今日&#xff0c;可以说尚无几家企业能够在真正意义上实现“数字化”。 在实现“数字化”的征途上&#xff0c;人们发现&#xff0c;努力愈进&#xff0c;仿佛终点愈远。究其原因&a…

大象机器人开源协作机械臂myCobot 630 全面升级!

1. 开篇概述 在快速发展的机器人技术领域中&#xff0c;Elephant Robotics的myCobot 600已经证明了其在教育、科研和轻工业领域的显著适用性。作为一款具备六自由度的机械臂&#xff0c;myCobot 600以其600mm的工作半径和2kg的末端负载能力&#xff0c;满足了多样化的操作需求。…

VUE的生命周期图和各函数

函数 beforeCreate(){ }, created(){ }, beforeMount(){ }, mounted(){ }, beforeUpdate(){ }, updated(){ }, beforeDestroy(){ }, destroyed(){ } 创建时生命周期图 运行时生命周期图

Java---数据类型与变量

1.字面常量 字面常量就是我们经常所说的常量&#xff0c;常量即在程序运行期间&#xff0c;固定不变的量。且常量是无法改变的&#xff0c;如果我们的代码有改变常量的操作&#xff0c;程序就会报错。 1.1字面常量的分类 字符串常量&#xff0c;整型常量&#xff0c;浮点数常…

XMind轮播图banner测试点

banner测试点 显示1到5张banner图片 [1,5] 6 1 一张不轮播 5 3 0可选 自动轮播,3秒切换一张 鼠标悬停,不轮播 实心为当前图 点击可以跳转 点击左,切换一张图片 点击右, 切换一张图片…

使用MATLAB/Simulink的PID控制系统设计和自动调整

书籍&#xff1a;Pid Control System Design and Automatic Tuning Using Matlab/Simulink 作者&#xff1a;Liuping Wang 出版&#xff1a;Wiley-IEEE Press 书籍下载-《使用MATLAB/Simulink的PID控制系统设计和自动调整》本书涵盖了具有操作约束的PID控制系统的设计、实施…

Android使用ProtoBuf 适配 gradle7.5 gradle8.0

ProtoBuf 适配 Gradle7.5 gradle-wrapper.properties 配置 distributionUrlhttps\://services.gradle.org/distributions/gradle-7.5-bin.zipProject&#xff1a;build.gradle: plugins {id com.android.application version 7.4.2 apply falseid com.android.library versio…

模拟 枚举 贪心(C++ 题目 代码 注解)

目录 题目一&#xff1a; 题目描述 输入描述: 输出描述: 输入 输出 说明 代码&#xff1a; 题目二&#xff1a; 题目描述 输入描述: 输出描述: 输入 输出 代码&#xff1a; 题目三&#xff1a; 题目描述 输入描述: 输出描述: 输入 输出 输入 输出 输入…

C语言函数指针的使用、函数指针数组及使用、指向函数指针数组的指针,指针进阶版的冒泡排序等介绍

文章目录 前言一、函数指针的使用1. 加减乘除计算器普通实现2. 加减乘除计算机函数指针实现 二、函数指针数组1. 函数指针数组的书写2. 两个有趣的代码3. 函数指针数组的使用 三、指向函数指针数组的指针四、指针进阶_冒泡排序1.整型冒泡排序2. C语言qsort函数3. 仿写C语言qsor…

笔试刷题-Day11

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 一、游游的水果大礼包 题目链接&#xff1a;https://ac.nowcoder.com/acm/problem/255193 类型&#xff1a;求一个表达式的最值&#xff08;并不是贪心,因为该题条件太少&…

PC 自动化测试入门 - pywinauto 上篇:初识

文章目录 前言PC 自动化测试 是什么&#xff1f;常用 PC 自动化测试工具pywinauto 是什么&#xff1f;Windows上支持的可访问性技术列表 操作记事本自动写入问题app Application(backend"uia").start("notepad.exe") 无法正常启动组件选择器和 print_cont…
最新文章