【聆思CSK6 视觉AI开发套件试用】头肩、手势识别体验与PWM舵机控制

news2025/3/3 4:31:39

本篇文章来自极术社区与聆思科技组织的CSK6 视觉AI开发套件活动,更多开发板试用活动请关注极术社区网站。作者:酷电玩家

环境搭建

官方文档详细环境搭建教程:环境搭建

1、下载Git进行安装。

2、安装lisa zep工具,并初始化 CSK6 SDK 所需的开发环境。

3、检查开发环境

lisa info zep

开发环境的安装情况,如图:

获取源码

1、执行以下命令后,将拉取 Sample 项目 和SDK到本地并自动完成初始化:

lisa zep create --from-git https://cloud.listenai.com/zephyr/applications/app_algo_hsd_sample_for_csk6.git

AI案例体验

1、使用VSCODE打开,项目结构如下图左侧:

其中, prj.conf 文件为工程配置文件

2、打开PC端图像预览功能
打开 prj.conf 文件,将 CONFIG_WEBUSB=n 改为CONFIG_WEBUSB=y ,如下图:

3、编译固件

lisa zep build -b csk6011a_nano

4、烧录应用程序

lisa zep flash

5、使用串口烧录算法运行所需的资源
使用 USB 线接上 DAPLink USB 口进行烧录,依次执行以下命令,完成资源的烧录。

lisa zep exec cskburn -s \\.\COMx -C 6 0x400000 .\resource\cp.bin -b 748800
lisa zep exec cskburn -s \\.\COMx -C 6 0x500000 .\resource\res.bin -b 748800

6、PC 工具获取
拉取 PC 工具项目到本地:

git clone https://cloud.listenai.com/zephyr/applications/csk_view_finder_spd.git

7、打开工具
使用 Edge 浏览器打开项目 csk_view_finder_spd/src 目录下的 index.html 文件:

8、安装驱动
Windows 系统点击网页上的【 Windows 系统,使用必读】按钮,按照步骤安装驱动,在安装驱动的过程,需保持 CSK6 USB 接口与电脑的连接。

9、使用工具查看
使用TypeC数据线连接 CSK6 USB 接口至电脑,若在PC端可看到如下图提示,说明设备已被识别成功:

10、点击“选择设备”按钮,选择“CSK View Finder”选项,点击“连接”,即可看到预览图和识别结果:

PWM舵机控制

1、查看引脚定义以及修改设备树

①在.sdk\zephyr\dts\arm\csk\csk6.dtsi设备树文件中有如下定义:

可以看出 PWM 是由 通用定时器gpt0 产生的,共有 0~7 八路 PWM 通道

②打开 引脚功能定义 表格,每个引脚的 Function11 为 PWM 复用功能:

③在boards\csk6011a_nano.overlay设备树文件中的**csk6011ananopinctrl节点**里定义了一些引脚的复用功能,如摄像头引脚等:

在选择 PWM 输出引脚时需特别注意,不要与这里所使用到的引脚相同,否则可能会导致摄像头等无法正常工作

.sdk\zephyr\boards\arm\csk6011a_nano\csk6011a_nano_pinctrl.dtsi设备树文件开头定义了一个宏,如下图:

即**csk6011ananopinctrl节点就是pinctrl节点**,在 csk6011a_nano_pinctrl 里定义的是摄像头的引脚,不要随意改动,在 pinctrl 里追加了串口、SPI、IIC、PWM的一些引脚复用,如下图:
在这里插入图片描述

.sdk\zephyr\boards\arm\csk6011a_nano\csk6011a_nano_pinctrl.dtsi设备树文件中默认定义了四个PWM,其使用的引脚如下:

使用到了GPIOB 02、GPIOB 06、GPIOA 04、GPIOA 05四个引脚,上面定义的 PWM 默认处于关闭状态,开启 PWM 方法后面再说,先回到boards\csk6011a_nano.overlay设备树文件中,其中定义的是摄像头所使用的的引脚,有如图所示引脚定义:

其中也使用到了GPIOA 04、GPIOA 05 ,所以要使用摄像头功能,就不能开启 PWM4 和 PWM5 ,除非修改 PWM4 和 PWM5 的复用引脚

⑤因此我们可以选择 GPIOB 06(PWM2) 和 GPIOB 02(PWM6),当然也可以使用 PWM0 PWM1 PWM3 和 PWM7,不过需要在设备树文件里添加对应的 设备节点。

2、PWM使用

在开发板原理图中可以看到,GPIOB 06上接的是 LED 灯,可以验证呼吸灯,下面以 GPIOB 02(PWM6) 为例来控制舵机:

.sdk\zephyr\boards\arm\csk6011a_nano\csk6011a_nano.dts设备树文件中开启相应的 PWM,如下图:

其中status = "okay";即表示开启

.sdk\zephyr\boards\arm\csk6011a_nano\csk6011a_nano.dts设备树文件中添加舵机节点,如下图:

其中pwm-servo1即为该节点的别名,可以在程序中通过该别名获取该节点的信息

在prj.conf文件中添加 PWM 组件配置:

#打开pwm配置
CONFIG_PWM=y

在 main.c 中添加如下代码:

/* PWM */
//uint32_t period = PWM_SEC(50U);  //50Hz-即20ms
/* 获取设备树配置 */
static const struct pwm_dt_spec pwm_servo1 = PWM_DT_SPEC_GET(DT_ALIAS(pwm_servo1));
//static const struct pwm_dt_spec pwm_servo2 = PWM_DT_SPEC_GET(DT_ALIAS(pwm_servo1));

void ServoControl()
{
  int ret;

  printk("PWM-based Servo\n");

  if (!device_is_ready(pwm_servo1.dev)) {
    printk("Error: PWM device %s is not ready\n",
            pwm_servo1.dev->name);
    return;
  }

  /* 设置pwm参数,通道、频率(max_period=125000HZ)、脉宽(50%)、标志(PWM_POLARITY_NORMAL) */
  ret = pwm_set_dt(&pwm_servo1, 20000000, 2000000);
  if (ret) {
    printk("Error %d: failed to set pulse width\n", ret);
    return;
  }
}

其中pwm_servo1 = PWM_DT_SPEC_GET(DT_ALIAS(pwm_servo1));就是通过节点别名获取节点信息,函数ServoControl()即舵机控制函数,其中调用了pwm_set_dt(&pwm_servo1, 20000000, 2000000);来设置 PWM 的周期和占空比,第一个参数就是从设备树中获取的节点信息结构体,第二个参数就是周期(单位ns,也就是20000000ns = 20ms),第三个参数就是占空比(单位ns,即2ms),对于舵机而言,周期为20ms,占空比为2ms的脉冲信号就是使舵机转到最大角度。

3、总结:以上只说明了舵机控制的基本方法,基于上述方法,结合头肩识别获取到的坐标信息,就可以实现一个简单的头肩跟踪舵机云台了,篇幅有限就不再细说了,关于头肩坐标相关内容看官方文档有说明:接口说明

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

洛谷千题详解 | P1026 [NOIP2001 提高组] 统计单词个数【C++、Java语言】

博主主页:Yu仙笙 专栏地址:洛谷千题详解 目录 题目描述 输入格式 输出格式 输入输出样例 解析: C源码: Java源码: C源码2: ----------------------------------------------------------------------------…

vector模板的简易实现

这篇文章,我们模拟一下STL里面的vector的实现。但是会简化一些内容,让大家能够更好的理解。模拟实现的目的不是为了更好的造轮子,而是为了更好的理解这些容器。 文章目录1. 成员变量2. push_back函数3. reserve函数4. pop_back函数和下标运算…

QT 多线程中使用QCanBusDevice进行PCAN通讯时,无法正常发出数据

QT 多线程中使用QCanBusDevice进行PCAN通讯时,无法正常发出数据 前言 我一开始的代码逻辑是,PCAN开启、关闭、发送、接收这些功能整合在一个工具类中,这个工具类的对象是在主线程创建的,然后我有一个要循环定时发送的功能是独立…

与企企通强强联手!哈尔斯二期数字化采购项目正式启动

近日,浙江哈尔斯真空器皿股份有限公司(以下简称“哈尔斯”)联合企企通举办二期数字化采购项目启动会,旨在助力哈尔斯实现采购数字化全面升级,提升自主品牌竞争力。会上,双方就该项目的建设方案、项目资源、…

铝合金表面处理废水除铝工艺

铝型材表面处理用水量大,产生废水多,废水中有害物质持续排放。如不加以处理必将污染环境。同时伴随着我国对排污量的征税,也会增加企业的成本和负担。因此,从企业的社会责任和效益两方面考虑,进行废水处理是必须和必要…

解决VsCode启动Vue项目报错:‘vue-cli-service‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。

问题描述 最近居家办公,网速不太稳定,开会的时候网络也是断断续续的,今天需要拉下前端项目运行起来 在我执行npm i下载包的时候,我看到网络超时的错误警告就感觉不太秒。知道大概率要启动失败了 果不其然执行npm run serve的时…

窃取信息的新恶意软件通过假冒的破解网站感染使用者

©网络研究院 一种名为“RisePro”的新型信息窃取恶意软件正在通过由 PrivateLoader 按安装付费 (PPI) 恶意软件分发服务运营的虚假破解站点进行分发。 RisePro 旨在帮助攻击者从受感染的设备中窃取受害者的信用卡、密码和加密钱包。 本周Flashpoint 和 Sekoia的分析师发…

前端框架 Nuxt3 集成 Pinia

目录 一、Nuxt3集成Pinia 二、Pinia的使用 state的使用 1、基本使用及动态渲染 2、state的重置 3、批量更改state数据 getters的使用 1、getters的基本使用 2、getters传参 actions的使用 1、actions的基本使用 一、Nuxt3集成Pinia 参考官方文档:简介 |…

【JavaSE】常用类(447~515)

String 447.常用类-每天一考 1.画图说明线程的生命周期,以及各状态切换使用到的方法等 状态,方法 2.同步代码块中涉及到同步监视器和共享数据,谈谈你对同步监视器和共享数据的理解,以及注意点。 synchronized(同步监视器){//操…

消息队列RabbitMQ学习笔记(五)高级特性

1. 发布确认高级 在生产环境中由于一些不明原因,导致 RabbitMQ 重启,在 RabbitMQ 重启期间生产者消息投递失败, 导致消息丢失,需要手动处理和恢复。于是,我们开始思考,如何才能进行 RabbitMQ 的消息可靠投…

ccc-sklearn-11-线性回归(1)

1.线性回归概述 回归需求在现实中非常多,自然也有了各种回归算法。最著名的就是线性回归和逻辑回归,衍生出了岭回归、Lasso、弹性网,以及分类算法改进后的回归,如回归树、随机森林回归、支持向量回归等,一切基于特征预…

自定义卷积实现卷积的重参数【手撕代码】

在我的上篇文章中主要对RepVGG进行了解析【RepVGG网络中重参化网络结构解读】,里面详细的对论文中的代码进行了解析,展示了RepVGG在重参数时是如何将训练分支进行合并的,总的一句话就是在推理阶段,会将1x1以及identity分支以paddi…

vivo 游戏中心低代码平台的提效秘诀

作者:vivo 互联网服务器团队- Chen Wenyang 本文根据陈文洋老师在“2022 vivo开发者大会"现场演讲内容整理而成。公众号回复【2022 VDC】获取互联网技术分会场议题相关资料。 在互联网流量见顶和用户需求分层的背景下,如何快速迭代产品功能&#xf…

函数模板-C11/17/14

函数模板 文章目录函数模板定义函数模板使用函数模板样例两阶段翻译 Two-Phase Translation模板的编译和链接问题多模板参数引入额外模板参数作为返回值类型让编译器自己找出返回值类型将返回值声明为两个模板参数的公共类型样例默认模板参数样例重载函数模板模板函数特化非类型…

cocoapods的使用

swift开发之cocoapods的使用 之前介绍了cocoapods的使用,我们可以知道通过pod search XXX(三方依赖库名称)可以就搜索到想要的第三方是否存在。 这次主要简单介绍cocoapods如何引入第三方库的,以BluetoothKit为例。 首先,我们终端中通过cd命令定位到要…

二十二、shiro安全框架基础

一、简介 1. shiro简介 Apache Shiro 是 Java 的一个安全(权限)框架。Shiro 可以非常容易的开发出足够好的应用,其不仅可以用在JavaSE 环境,也可以用在 JavaEE 环境。Shiro 可以完成:认证、授权、加密、会话管理、与…

“智慧”控漏 削减产销差-城镇供水管网分区计量管理系统

平升电子城镇供水管网分区计量管理系统根据国际国内分区计量的要求和标准研发,专门针对水司漏损控制和产销差管理而设计。系统涵盖分区管理、管网流量和压力监控、水量统计分析、产销差分析、漏损评估、夜间最小流量分析、用水异常报警等功能。核心目标是找到整个管…

ReactJS入门

目录 一:前端开发的演变 二:ReactJS简介 三:搭建环境 四:React快速入门 一:前端开发的演变 到目前为止,前端的开发经历了四个阶段,目前处于第四个阶段。这四个阶段分别是: 阶段一…

equals()与hashcode()之间的关系

1、equals简介 被用来检测两个对象是否相等,即两个对象的内容是否相等; equals 方法(是String类从它的超类Object中继承的)用于比较引用和比较基本数据类型时具有不同的功能: 比较基本数据类型,如果两个值…

马哥SRE第11周课程作业

ansible role zabbix相关话题1. ansible 常用指令总结,并附有相关示例。1.1 Ansible相关工具1.1.1 ansible-doc1.1.2 ansible 命令用法1.1.3 ansible-console1.1.4 ansible-playbook1.1.5 ansible-vault1.1.5 ansible-galaxy2. 总结ansible playbook目录结构及文件用…