dawa e1.0版本使用说明

本次发布所使用硬件开发板,镶嵌esp32s3N16R8, WROOM-1模组:

UART0/UART1端口接线方式:

对应的机械臂结构、各轴为0时的位置、世界坐标系、dh参数对应部件长度示意图如下:

dawa e1.0 是一个六轴机械臂控制核心系统,可以用来构建机械臂控制手柄,它通过串口UART0接收用户指令,运算后在UART1输出六轴角度(或者多组六轴角度构成的序列)。 系统指令的反馈信息,将通过明文字符串的形式,在UART0输出。

对于用户通过UART0向esp32发送的指令,可以分为两类:

一类是需要附带若干浮点数的指令,比如设置末端工具矩阵的指令,则可以用一个结构体来包含所有指令信息(以下叫做“结构体指令”);

另一种是简单指示指令,比如指示末端向前移动,则可以用单个字符来区分,为了便于校验等功能,把需要发送的单个字符放到一个特定的数据格式里面并让该字符出现两次比如 "dawa0%c0%c"的格式(以下叫做“字符串指令”)。

接口及部分参数描述

接口名称

用途/用法

速率

结构体 数据

收发字符串指令的方式

UART0

用户接口,使用开发板自带的标记为“com”的usb接口,参看上面接线图,该接口用来向esp32发送指令,并接收console信息。

115200

struct struct_uart0 {

char key;

float inner_data[14];

};//参看key值分配表2

//通过c语言memcpy()函数将要发送到esp32的结构体放入一个字符串中发出。

"dawa0%c0%c"

(例如要发送有效字符‘q’时,发送的字符串为"dawa0q0q")

有效字符分配参看key值分配表1

esp32通过该接口发送的字符串,可以明文读取,系console信息。

UART1

esp32与下位机接口,

使用

GPIO17(TX),

GPIO18(RX),

参看上面接线图

该接口使用同一个结构体来收发(每组)7个浮点数信息。

115200

struct struct_uart1 {

char key;

float inner_data[7];

}; //参看key值分配表3和表4

//通过c语言memcpy()函数将从esp32接收到的字符串存入结构体,然后可以读取结构体里面的数据,向esp32发送数据时也使用memcpy将结构体拷贝成字符串发送。,参看本表下面的代码示例。

发送结构体指令时使用的代码示例:

struct struct_uart0 dats0;

char data_send[64];

dats0.key='&'

dats0.inner_data[0]=2;

memcpy(data_send,&dats0,sizeof(dats0));

int p0=write(serial_port_0,data_send,sizeof(data_send));

发送字符串指令时使用的代码示例:

char datasend[11];

sprintf(datasend,"dawa0%c0%c",(char)key,(char)key);

write(serial_port_0,datasend,sizeof(datasend));

只需使用一个字符来区分指令的使用"dawa0%c0%c"发送的,有效字符分配如下:

key值分配表1 (系用户侧向esp32发送的数据)。

key字符

ASCII码

对应功能

备注

w

119

绕x轴正转(依据右手法则决定正反方向,下同)

实际发送字符串为“dawa0w0w”以下以此类推

s

115

绕x轴反转

a

97

绕y轴反转

d

100

绕y轴正转

z

122

绕z轴正转

x

120

绕z轴反转

u

117

沿y轴反方向移动

j

106

沿y轴正方向移动

h

104

沿x轴反方向移动

k

107

沿x轴正方向移动

n

110

沿z轴正方向移动

m

109

沿z轴反方向移动

p(小写)

112

选当前点存入规划路径所需序列selected_points里面

q

113

清空路径容器general_path,选好的点序列selected_points

R

82

纯折线路径,拐点不带圆弧

r

114

通过容器selected_points所存储的点来规划折线路径并运行(带有梯形加减速)

[

91

参数样条曲线路径

]

93

均匀插值参数样条曲线路径

{

123

首尾相接的均匀插值参数样条曲线路径

}

125

如果有规划路径存在,则向下位机发送主路径插值点序列对应的六轴角度序列。【注1

Y

89

如果有规划路径存在,则运行该路径。

.

46

去掉末端工具矩阵【注2

@

64

去掉路径休息点

b

98

回到各轴都是0的姿态。

^

94

路径暂停命令

`

96

结束暂停,继续运行原先的路径。

key值分配表2

对应结构体struct_uart0,系用户侧向esp32发送的数据。应该注意的是,对于和esp32互发数据而言,inner_data[]数组里的数据若表示旋转角度,那它是弧度制的角度。请注意做好角度/弧度的转换。

key字符

ASCII码

对应功能

struct_uart0中inner_data

数组的数据排列方式: 【注3

+

43

选择参考点,与‘p’键功能类似,但‘+’会同时使用结构体struct_uart0里面的浮点数数组上报一组指定角度信息。这组角度信息会使esp32s3硬件内的当前角度切换为该组信息对应的角度值。

{nx,ox,ax,px,ny,oy,ay,py,nz,oz,az,pz}

?

63

返回当前设置信息。

备用。

,

44

实时控制的插值距离rt_inter_dis,

有效设置范围是0.1~15(毫米)

实时控制插值间隔时间rt_inter_time,

有效设置范围是0~18000,缺省值是5000 (微秒)

路径的插值距离troj_inter_dis,

有效设置范围是0.1~15(毫米)

和路径插值间隔时间troj_inter_time

有效设置范围是0~1000000,缺省值是15000(微秒),

快速向下位机发送主路径插值点对应的六个一组角度序列的发送间隔时间quick_dl_time,

有效设置范围是0~18000,缺省值是100(微秒)

【注4】【注2】【注5

{

rt_inter_dis,

rt_inter_time,

troj_inter_dis,

troj_inter_time,

quick_dl_time

}

#

35

设置末端工具长度(tool_length)

{tool_length}

【注6

&

38

设置路径循环次数(loop_times)

【注7】【注2

{loop_times}

%

37

moveTo命令,末端运行到指定的位姿点。【注8

{nx,ox,ax,px,ny,oy,ay,py,nz,oz,az,pz}

(

40

设置末端工具矩阵【注2

{nx,ox,ax,px,ny,oy,ay,py,nz,oz,az,pz}

)

41

使用欧拉角设置末端工具矩阵 【注2

{oula_x,oula_y,oula_z,px,py,pz}

:

58

设置ABB型机械臂DH参数【注2

{d1,a1,a2,a3,d4,d6}

【注9

;

59

设置各轴角度运行范围。

【注2

{

axis0_bottom,axis0_top,

axis1_bottom,axis1_top,axis2_bottom,axis2_top,axis3_bottom,axis3_top,axis4_bottom,axis4_top,axis5_bottom,axis5_top,}

key值分配表3

对应结构体struct_uart1,系esp32向下位机发送的同步数据。各轴数据是弧度制。

key字符

ASCII码

对应功能

struct_uart1inner_data

数组的数据排列方式:

|

124

esp32位机向下位机发送的各轴弧度值。

{axis0,axis1,axis2,axis3,

axis4,axis5,0,0 }

!

33

esp32位机向下位机索取当前下位机各轴弧度值,附带发送上位机当前的各轴弧度值【注10

{axis0,axis1,axis2,axis3,

axis4,axis5,0,0 }

key值分配表4

对应结构体struct_uart1,系下位机向esp32发送的同步数据。各轴数据是弧度制。

key字符

ASCII码

对应功能

struct_uart1inner_data

数组的数据排列方式:

!

33

当下位机收到esp32发来的索取各轴信息的数据包(参看key值分配表3中的‘!’行)以后,发送的各轴弧度值给上位机。

【注11

{axis0,axis1,axis2,axis3,

axis4,axis5,0,0 }

注释表:

【注1

供下位机使用者自行决定如何使用已经规划好的路径,比如自行决定插值间隔时间,在循环路径中使用何种方式返回路径起点等。

【注2

dh、末端工具矩阵、末端矩阵是否启用、普通路径循环次数、实时控制插值距离、路径插值距离和各轴角度范围一旦设置,会被存储在flash当中,都在下次esp32开机时沿用继续使用上次关机时的设置。

【注3

inner_data[0]开始,数据数量不足14时后面的内容可以填写0

inner_data[0]~inner_data[14].

【注4

五项设置中,如果不想改动某个/某些设置项,只要把对应的数据项填写为负数即可。只有所填写的数据在其规定的范围内,设置才会有效。

【注5

当执行一条路径时,用户可以通过调节插值间隔时间,让下位机获得两种插值序列处理方式:一种方式是使用表1中的’}’键对应的命令,下位机密集接收插值序列并缓存,同时根据下位机自己的时间步骤逐步执行插值点序列;

第二种方式是使用表1中的 :‘r’,’]’,’[’,’]’ ,’{’ 等键对应的命令,让路径插值间隔时间保持在一个较大的值(比如默认的15ms左右,下位机不进行插值时间的调整,接收一个点,就执行一个点。

【注6

在末端工具矩阵关闭时才有意义。也就是设置末端工具矩阵后(末端矩阵启用),末端工具长度设置自动失效。

【注7

均匀插值路径不受此设置影响。

【注8

该命令沿用路径规划插值距离和插值时间,而非实时控制的插值距离和插值时间。

【注9

各项dh数值都填写正数。

【注10

下位机收到该命令以后,应该比对自己当前各轴角度信息与上位机角度信息的差值,如果差值较大,应该向上位机发送下位机当前角度信息,使esp32的角度信息与下位机保持一致。当系统无输入命令和无任务状态持续1秒以上时,esp32 会向下位机发送一次该数据包。

【注11

也可以在没有收到esp32的索取数据包时自行发送,但如果此时esp32如果处于运行路径等非空闲状态,发送的数据会被esp32丢弃。

例程的使用:

运行例程的pc,通过两个usb接口与esp32 相连接,其中UART0可以直接用一根typeC-USB数据线与电脑usb接口连接,UART1则需要通过一个USB-串口ttl转接模块与电脑连接。它的角色是模拟下位机和模拟用户指令输入。

例程基于UBUNTU系统,使用c语言编写 ,它开启两个 子线程 dxh_0 和dxh_1. 分别用来收发来自esp32 UART接口的数据,

dxh_0 ------ UART0

dxh_1 ------ UART1

需要例程的小伙伴可以在评论区留电子信箱。

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

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

相关文章

【观察】甲骨文:用“SQL”实现AI的“融会贯通”,打通应用落地的“最后一公里”...

从2022年的ChatGPT,到2024年的Sora,生成式AI和大模型技术正以不可思议的发展速度颠覆着我们的认知。刚刚过去的一年,国内的“百模大战”更让大模型站上了市场“风口”,通过更为泛化的能力,赋予了千行万业数智化无限的想…

从零开始实现大语言模型(三):Token Embedding与位置编码

1. 前言 Embedding是深度学习领域一种常用的类别特征数值化方法。在自然语言处理领域,Embedding用于将对自然语言文本做tokenization后得到的tokens映射成实数域上的向量。 本文介绍Embedding的基本原理,将训练大语言模型文本数据对应的tokens转换成Em…

imx6ull/linux应用编程学习(17)利用mqtt上传开发板数据,和控制开发板led(基于正点)

1.关于如何创建自己的服务器,可看上篇文章 imx6ull/linux应用编程学习(16)emqx ,mqtt创建连接mqtt.fx-CSDN博客 2.实现任务:(正点原子教程源码改) (1)用户可通过手机或电脑远程控制开发板上的…

java入门-告别C进入java世界

目标 java体系 java开发环境 helloworld java语法 java体系 java开发环境 安装JDK JDK: Java Developement Kit 配置jdk 为什么需要配置 操作系统找不到此程序 操作系统PATH PATH C:\Users\49354>echo %PATH% C:\Program Files (x86)\VMware\VMware Works…

Python8:线程和进程

1.并发和并行 并发:在逻辑上具备同时处理多个任务的能力(其实每时刻只有一个任务) 并行:物理上在同一时刻执行多个并发任务 2.线程与进程 一个进程管多个线程,一个进程至少有一个线程 python多线程是假的&#xf…

基于Booth乘法和Wallace树的乘法器优化思想

基于Booth乘法和Wallace树的快速乘法器 为了理解Booth乘法和Wallace数如何让乘法器变得更快: 先考虑不优化的8位乘法器实现,即8个16位数字累积共进行7次加法运算,可以认为一次16位加法用到16个全加器,则共需要112个全加器件&…

计算机毕业设计Python深度学习游戏推荐系统 Django PySpark游戏可视化 游戏数据分析 游戏爬虫 Scrapy 机器学习 人工智能 大数据毕设

本论文的主要研究内容如下: 了解基于Spark的TapTap游戏数据分析系统的基本架构,掌握系统的开发方法,包括系统开发基本流程、开发环境的搭建、测试与运行等。 主要功能如下: (1)用户管理模块&#xff1a…

【Spring Boot 教程:从入门到精通】掌握 Spring Boot 开发技巧与窍门(一)-java语法(1)

一些Java基本语法的基本介绍,语法更新结束会紧跟项目实战,后续会持续在该专栏进行更新!!! 目录 前言 一、基本概念 1.JDK、JRE、JVM的关系: 2.JDK版本选择 3.Java代码的编译运行流程 4.JSE、JEE、J…

Java学习Day3

数组 4.1 什么是数组&#xff1f; 容器 可以存多个同种类型的数据 4.2 Java中如何表示数组 定义数组 数据类型[] 数组名;实例化数组 public class Main {public static void main(String[] args) {int[] arryList new int[7];for (int i 0 ;i<7;i){arryList[i] i*2;Sy…

python-26-零基础自学python-如何创建文件、读取数据、处理多个文件及程序异常处理等

学习内容&#xff1a;《python编程&#xff1a;从入门到实践》第二版第10章 知识点&#xff1a; 程序异常如何处理&#xff1f;try-except-else 多个文件处理 创建文件&#xff1a;在文件中储存数据 练习内容&#xff1a; 练习10-8&#xff1a;猫和狗 创建文件cats.txt和…

Flink ui 本地flink ui 报错 {“errors“:[“Not found: /“]}

在学习flink 的过程中&#xff0c;伊始的flink 版本是1.17.2 报题目的错误 &#xff0c;百思不得其解&#xff0c;尝试更替了1.19.1 然后就成功了 &#xff0c;期间未做任何的修改 。 ui 默认地址 &#xff1a; http://localhost:8081 pom 文件 如下 <?xml version&qu…

人工智能算法工程师(中级)课程4-sklearn机器学习之回归问题与代码详解

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能算法工程师(中级)课程4-sklearn机器学习之回归问题与代码详解。回归分析是统计学和机器学习中的一种重要方法&#xff0c;用于研究因变量和自变量之间的关系。在机器学习中&#xff0c;回归算法被广泛应用于…

“论基于构件的软件开发方法及其应用”精选范文,软考高级论文,系统架构设计师论文

论文真题 基于构作的软件开发 (Component-Based Software Development&#xff0c;CBSD) 是一种基于分布对象技术、强调通过可复用构件设计与构造软件系统的软件复用途径。基于构件的软件系统中的构件可以是COTS &#xff08;Commercial-Off-the-Shelf&#xff09;构件&#x…

学生选课管理系统(Java+MySQL)

技术栈 Java: 用于实现系统的核心业务逻辑。MySQL: 作为关系型数据库&#xff0c;用于存储系统中的数据。JDBC: 用于Java程序与MySQL数据库之间的连接和交互。Swing GUI: 用于创建图形用户界面&#xff0c;提升用户体验。 系统功能 我们的学生选课管理系统主要针对学生和管理…

AI降痕工具:助力学术论文降AI率的智能选择

不知道大家有没有发现&#xff0c;随着人工智能技术的快速发展&#xff0c;AI工具正逐渐渗透到我们日常生活的各个方面&#xff0c;极大地提高了我们的工作和学习效率。 随着AI论文的出现&#xff0c;论文去AI痕迹成为了确保原创性的关键。接下来我将为大家介绍一款AI降痕神器…

LinK3D: Linear Keypoints Representation for 3D LiDAR Point Cloud【翻译与解读】

LinK3D: Linear Keypoints Representation for 3D LiDAR Point Cloud 摘要 特征提取和匹配是许多机器人视觉任务的基本组成部分&#xff0c;如 2D 或 3D 目标检测、识别和配准。2D 特征提取和匹配已取得巨大成功。然而&#xff0c;在 3D 领域&#xff0c;当前方法由于描述性差…

国内的几款强大的智能—AI语言模型

AI 绘图 链接&#xff1a;点我进入 1、国内百度研发的&#xff0c;文心一言&#xff1a; https://yiyan.baidu.com/welcome 大家如果像我的界面一样有【开始体验】就是可以使用的&#xff0c;否则就是说明在等待中&#xff01; 优点&#xff1a;会画画&#xff0c;暂无次数限…

【线性表,线性表中的顺序表和链表】

目录 1、线性表的定义和基本操作1.1、线性表的定义1.2、线性表的基本操作 2、顺序表和链表的比较2.1、顺序表2.1.1、顺序表的定义和特点2.1.2、顺序表的实现&#xff08;1&#xff09;顺序表的静态分配&#xff1a;&#xff08;2&#xff09;顺序表的动态分配 2.1.3、顺序表的基…

韦尔股份:深蹲起跳?

利润大增7倍&#xff0c;是反转信号还是回光返照&#xff1f; 今天我们聊聊光学半导体龙头——韦尔股份。 上周末&#xff0c;韦尔股份发布半年业绩预告&#xff0c;预计上半年净利润13至14亿&#xff0c;同比增幅高达 754%至 819%。 然而&#xff0c;回首 2023 年它的净利仅 …

如何将HEVC格式的视频转换为无损、未压缩的MP4格式视频?

在和大家分享视频格式转换之前&#xff0c;先跟大家分享一下HEVC格式的视频到底是什么文件&#xff1f;压缩原理是什么&#xff1f;了解了它的本质之后&#xff0c;我们就可以知道如何保证视频高清无损了。 如何将HEVC格式的视频转换为无损、未压缩的MP4格式视频&#xff1f; …