写在前面 上一篇简要的介绍了CAN的基本知识,小米电机的通信协议,以及小米微电机驱动库的结构,本章将结合具体代码分析HAL库CAN通信流程。为什么使用F105呢?因为f105属于互联型,拥有两个CAN,分别是主CAN1和从CAN2,在使用can2时必须要开启can1的时钟,若can1和can2同时使用时,先初始化can1驱动,再初始化can2。做机器人电机比较多,双CAN板更合适一些。 前置任
之前有段时间因为机器狗项目的缘故,一直在使用小米微电机,但是苦于没有一个详尽的奶妈级教程,在控制电机的学习中踩了不少的坑。今天咱们就从头至尾一步一步的实现使用按键控制小米微电机。本文将会分析小米电机驱动库,并简要介绍相关的CAN通信知识。阅读本文之前建议先看一遍小米电机说明书,直接百度就有。 一、前置知识 小米微电机是一款伺服电机,那什么是伺服电机呢?伺服电机的最大特征要素是伺服机构。伺服机构
食用指南:本文主要内容为梳理CAN初始化函数主要运行逻辑及重点功能实现代码的详尽解析。函数源码在文末,建议在阅读源码之后观看。CAN相关寄存器图: 主要逻辑分析: 下面分点梳理函数的主要逻辑(注意逻辑序号,后文依次为点进行分析): 首先,函数会检查传入的参数hcan是否为NULL,如果是NULL,则返回错误代码HAL_ERROR。 接下来,函数会使用assert_param宏对传入的hc
观前提醒:本章以基于f105的点灯项目为例,时钟树配置如下图。分析了void SystemClock_Config(void)以及HAL_RCC_ClockConfig()。仅配置PC0为推挽输出需要注意的是105与103系列的时钟树有些差异。105系列时钟树103系列时钟树 void SystemClock_Config(void) 先赏析一下源码,SystemClock_Config函数是由C
观前提示:函数完整代码在文末,本文梳理了函数HAL_RCC_OscConfig()的主要逻辑和实现方法f105时钟树详解图 HAL_RCC_OscConfig() 函数介绍: 此函数是一个用于初始化RCC(Reset and Clock Control)振荡器(Oscillators,函数名中Osc为此单词缩写)的函数。它接受一个指向RCC_OscInitTypeDef结构体的指针,结构体的各成员
观前提醒:本文详尽分析了HAL库中GPIO配置的相关函数,包括MX_GPIO_Init()、HAL_GPIO_WritePin()、HAL_GPIO_Init()。文末附f1系列GPIO口相关寄存器说明 MX_GPIO_Init() 先看源码: void MX_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct = {0}; /* GP
观前提醒:本文简要回顾了EXTI及NVIC相关知识点,分析了stm32f1系列单片机外部中断回调机制 开始之前,先温习一下有关EXTI和NVIC的知识点 外部中断/事件控制器(EXTI) 对于互联型产品(105、107系列),外部中断/事件控制器由20个产生事件/中断请求的边沿检测器组成,对于其它型号,则有19个能产生事件/中断请求的边沿检测器。每个输入线可以独立地配置输入类型(脉冲或挂起)和对
观前提醒:本文以外部中断点灯为例,分析了HAL库中中断服务相关函数的使用及相互关联、底层原理 一、实例实现 实例简介:主函数控制LED2进行闪烁,中断控制LED0开关我们先使用CubeMX创建项目文件:1、在System Core中配置外部时钟,这里视板子的不同而改变,我这里只有外部高速晶振,所以开启外部高速晶振。2、配置时钟树,如图:3、配置GPIO,原理图如下:我们配置PC2为上升沿检测中断模
一、什么是多重离散动作空间? 多重离散动作空间是指一个环境中具有多个离散动作空间的情况。在传统的强化学习中,通常假设环境的动作空间是离散的,即代理可以选择的动作是有限且离散的。然而,在某些情况下,一个环境可能具有多个离散动作空间,每个动作空间对应于不同的维度。 举个例子,假设你有一个机器人控制问题,机器人可以在三个维度上采取动作:X轴方向、Y轴方向和Z轴方向。每个维度上的动作空间都是离散的,例如在
一、BOOT是什么? 大多数初学者第一次接触BOOT总是对这个词感到不解,从哪冒出一个奇奇怪怪的东西还要接跳线帽,为什么要配置它才能进行串口程序的下载?为什么不正确配置会导致单片机无法正常启动……boot,及物动词,指“通过使操作系统加载到内存中启动计算机”,源自 bootstrap(动词),该动词源自 bootstrap(名词),意为“加载计算机操作系统的固定指令序列”(1953年)。那boot
一、什么是下载电路 单片机的下载电路是指用于将编写好的程序(固件)下载到单片机(微控制器)内部存储器的硬件电路。这个过程通常也被称为编程或烧录。下载电路包括与单片机的调试接口,以及相应的电路设计,确保数据可以稳定、可靠地传输到单片机的闪存或其他类型的存储器中。 二、单片机的“调试接口” 主流的调试接口主要有两种:JTAG(Joint Test Action Group) 和 SWD (Serial
一、什么是时钟信号 时钟信号(Clock Signal)是时序逻辑的基础,用于决定逻辑单元中的状态何时更新,是有固定周期并与运行无关的信号量。时钟信号有固定的时钟频率,时钟频率是时钟周期的倒数。它有只有两个电平,一是低电平,另一个是高电平。高电平可以根据电路的要求而不同,例如 TTL 标准的高电平是 5V。最常见的时钟信号的占空比为 50%,也就是说,高电平和低电平的持续时间是一样的。 STM3
一、复位 (1)什么是单片机的复位 STM32单片机的复位(Reset)是指将微控制器重置到其初始启动状态的过程。复位行为会导致所有运行中的程序终止,并将微控制器的寄存器和功能恢复到初始值。复位过程为程序提供了一个已知的起始状态,从而可以安全地开始或重新开始执行代码。STM32F10xxx支持三种复位形式,分别为系统复位、上电复位和备份区域复位。系统复位:当发生以下任一事件时,产生一个系统复位:(
本系列教程,将会从最基础的理论及实践开始,详尽的介绍和分析如何构建STM32F103C8T6最小系统。行文上会将最小系统分为若干模块依次介绍,将详细的分析电路拓扑结构和电路中每一个元器件在电路中的作用及其选型原因。确保读者大大们尿不湿级的享受。学嵌入式,我们一般从单片机学起。学单片机,不能只学软件,硬件知识也要跟上。软硬件相结合的设计,才是真正优秀的设计。 一、什么是最小系统? 最小系统的目的在于
一、数据处理 用于训练 RNN 的 mini-batch 数据不同于通常的数据。 这些数据通常应按时间序列排列。 对于 DI-engine, 这个处理是在 collector 阶段完成的。 用户需要在配置文件中指定 learn_unroll_len 以确保序列数据的长度与算法匹配。 对于大多数情况, learn_unroll_len 应该等于 RNN 的历史长度(a.k.a 时间序列长度),但在某
一、RNN简介 循环神经网络(Recurrent Neural Network, RNN)是一类用于处理序列数据的神经网络。与传统的前馈神经网络不同,RNN引入了“内部状态”(或称为“隐藏状态”),使得网络能够存储过去的信息,并利用这些信息影响后续的输出。这个内部状态的更新过程使得RNN能够处理不同长度的输入序列,比如文字或语音数据。 RNN的特点是在不同时间步的单元之间存在连接,形成一个沿时间维
在强化学习中,环境(Environment)是智能体(Agent)进行学习和互动的场所,它定义了状态空间、动作空间以及奖励机制。Env Wrapper(环境包装器)提供了一种方便的机制来增强或修改原始环境的功能,而不需要改变环境本身的代码。 Env Wrapper主要有以下的几个特性 预处理和归一化: 为了提高学习效率和稳定性,很多时候需要对环境的状态进行预处理,例如归一化处理,使得所有的输
本文章将介绍 DI-engine 中用于高效构建和标准化不同类型决策环境的系列工具,从而方便我们将各式各样的原始决策问题转化为适合使用强化学习方法解决的形式。 前言 对于“决策环境复杂性”的问题,这里描述的是在强化学习(RL)领域中,如何处理和简化复杂决策环境的挑战。决策环境可以非常广泛,包括虚拟世界的视频游戏、现实世界的棋类游戏、自动驾驶等场景。所有这些环境都有一个共同点:需要智能体(agent
在强化学习中,需要根据决策问题和策略选择合适的神经网络。DI-engine中,神经网络模型可以通过两种方式指定: 使用配置文件中的cfg.policy.model自动生成默认模型。这种方式下,可以在配置文件中指定神经网络的类型(MLP、CNN等)以及超参数(隐层大小、激活函数等),DI-engine会根据这些配置自动构建神经网络模型。这种方式简单易用,适用于常见的标准网络结构。 自定义模型
观前提醒:本博客介绍如何使用Python订阅ROS话题,并将接收到的消息保存到SQL数据库中,包括MySQL和SQL Server两种情况。 使用Python订阅ROS话题并将消息保存至MySQL数据库 下面我们将详细介绍如何使用Python订阅ROS话题,并将接收的数据保存到MySQL数据库中。这种技术可以用于机器人数据的记录、分析和回放。 第一步:安装Python依赖库 我们将使用rospy
当涉及到在机器人操作系统(ROS)环境中的通信时,标准做法通常是在同一个ROS网络内通过话题和服务进行。但在某些特定情况下,比如当你有两个分布在不同网络中的ROS系统时,标准的通信方法可能不太适用。此时,一个可行的解决方案是建立一个直连的TCP通信,允许跨ROS系统的节点之间直接传输消息。本文将实现一个进行TCP通信节点示例程序 场景概述 想象一下,有两台计算机A和B,每台上都运行着一个独立的RO
观前提醒:本文详细介绍了Python环境的结构,介绍了python虚拟环境基础用法,以及python中的环境&依赖管理 0.什么是Python环境 Python环境是指一个特定的设置,其中包含了运行Python代码所需的一系列软件工具和包。这个环境可以包括Python解释器、一组安装的包、模块以及相关的配置设置。Python环境可以帮助你管理依赖关系,确保不同项目之间的依赖隔离,避免版本冲
引言 在微控制器编程中,PWM(脉冲宽度调制)是一种重要的技术,它可以用于模拟模拟信号,控制LED亮度,驱动电机,以及生成音频信号等。ESP32是内置了一个高级LEDC(LED PWM Controller)硬件,用于产生高精度的PWM信号。本文将详细介绍ESP32的LEDC功能,包括其工作原理,编程方法,以及应用实例。 LEDC基础 LEDC是ESP32特有的一个硬件PWM控制模块。与传统的PW
一、概念介绍 1.1什么是单片机的启动流程 单片机的启动流程指的是单片机从上电或复位后到开始执行用户代码的一系列初始化步骤。不同的单片机的启动流程有其特定的细节,但大多数单片机的启动流程都遵循一个通用的模式。通用启动流程: 上电或复位:当单片机接通电源或被复位时,启动流程开始。复位可以是软件触发的,也可以是通过复位引脚进行的硬件复位。 执行内置启动代码:单片机首先执行存储在内部 ROM 中的固件
深入解析DI-engine训练文件夹:串行与并行模式详解 DI-engine通过创建不同的文件夹和文件来管理训练过程中的数据和模型状态。这些文件夹对于理解模型是如何训练的以及如何进行性能监控至关重要。但对于初学者来说,这些文件夹可能看起来实在是一团麻又难以理解。在本篇博客中,我们将详细解释串行与并行训练模式下DI-engine生成的文件夹,快速了解它们的功能和用途。 串行模式下的文件夹结构 在串行
在前几章机器人步态仿真系列中,我们详细介绍了如何通过PyBullet对机器人进行仿真,本章我们将搭建PyBullet环境并结合DI-engine运行SAC算法。Pybullet运行效果: 一、PyBullet环境概述 PyBullet提供了一个物理仿真平台,广泛应用于游戏开发、视觉效果制作、机器人技术以及作为评估连续空间强化学习策略的标准测试工具。此平台包括多个不同的环境,总计有20种场景供使用者
上一章我们搭建了Atari的强化学习环境,这一期我们来搭建MUJOCO强化学习环境那么我们为什么要“多此一举”呢? 一、概述 MuJoCo和Atari对比 Atari: 类型:Atari游戏是一系列的经典视频游戏。 简单性:Atari游戏通常有相对简单的视觉和动作空间。例如,游戏”Breakout”中的动作可能仅限于将挡板向左或向右移动。 离散动作空间:Atari游戏中的动作通常是离散的(即非连
Atari是一家知名的电子游戏公司,成立于1972年,是早期电子游戏产业的先驱之一。在强化学习领域,提到Atari通常指的是Atari 2600游戏的一系列环境,这些环境是用于开发和测试强化学习算法的标准平台。 Atari 2600 强化学习环境概述 历史: Atari 2600是一款在1977年推出的家用游戏机,它推动了早期电子游戏行业的发展。随着时间的推移,其上的游戏被用来作为研究人工智能
观前提醒:本章介绍了如何通过DI-engine使用DQN算法训练强化学习模型 一、什么是DQN算法 DQN算法,全称为Deep Q-Network算法,是一种结合了Q学习(一种价值基础的强化学习算法)和深度学习的算法。该算法是由DeepMind团队在2013年提出的,并在2015年通过在多款Atari 2600视频游戏上取得超越人类专家的表现而闻名。DQN算法是深度强化学习领域的一个里程碑,因为它
观前提醒:本章内容为训练一个强化学习模型,并使用强化学习模型控制月球着陆器。安装和运行DI-engine示例。 什么是DI-engine? DI-engine 是一个由 OpenDILab 提供的开源强化学习(Reinforcement Learning,简称RL)库,它旨在提供一个易于使用、灵活且高效的RL算法研究和应用平台。DI-engine 不仅支持多种RL算法,还提供了易于扩展的接口,可以
什么是语音合成? 语音合成通常指的是人工产生的语音,这种语音可以模仿人类的语音模式、语调和节奏。它在多种应用中都有使用,包括但不限于:语音助手、读屏软件、自动客服和电子学习平台。 语音合成的基本工作原理: 语音合成系统通常包括以下几个步骤: 文本分析: 预处理:将输入的文本处理成可以被系统理解的格式,可能包括去除无关字符、扩展缩写等。 词法分析:对文本进行分词,识别句子中的单词和标点符号。
观前提醒,本章主要内容为分析四足机器人步态实现和姿态控制,碰撞体积等程序步态效果: 一、完整代码如下 # -*- coding: utf-8 -*- import pybullet as p import time import numpy as np p.connect(p.GUI) p.createCollisionShape(p.GEOM_PLANE) p.createMultiBody
观前提醒:本章主要内容是通过PyBullet仿真kuka机械臂,并控制机械臂末端按照预定轨迹运动 一、什么是运动学? 运动学是物理学的一个分支,专注于物体的运动描述,包括位移、速度、加速度等,而不考虑这些运动是如何产生的(即不考虑力和质量)。运动学可以应用在很多领域,包括机械工程、机器人学、生物力学等。 在机器人学中,运动学特别指的是机器人各个部件之间的运动关系。机器人的运动学可以分为两个主要的部
观前提醒:本文主要内容为使用Python在局域网内建立TCP连接并传输图片信息,计算机为一块旭日X3和一块英伟达Orin NX。 一、什么是TCP TCP(传输控制协议)是一种可靠的、面向连接的协议,它确保数据包的顺序传输和完整性。当需要确保数据完全无误地传送到目的地时,TCP 是一个不错的选择。在我们的示例中,一台计算机将作为服务器来接收图片,另一台计算机作为客户端来发送图片。 那TCP通信
一、PyBullet 简介 1.1 PyBullet是什么? PyBullet 是一个用于机器人学、游戏开发和图形研究的开源物理仿真库。它是基于 Bullet Physics SDK,这是一个成熟的、广泛使用的开源物理引擎。 PyBullet 提供了 Python 接口,使得开发者能够利用 Bullet 强大的物理仿真能力,同时享受 Python 的易用性。 1.2 PyBullet的发展历程
观前提醒:你以为我斥资6600买了一个NX玩?我其实买了三个NX NVIDIA Jetson Orin NX 简介: NVIDIA Jetson Orin NX是NVIDIA推出的一款高性能边缘计算平台,其设计目标是提供卓越的计算能力以支持各种复杂的人工智能(AI)应用,包括机器人、无人机、智能相机和便携式医疗设备等。下面将详细介绍这款平台的核心特性、性能参数、软件支持以及可能的应用场景。 Or
观前提醒:本期内容为ESP32的FreeRTOS、ESP32多核任务编程。 项目预告:一个无需计算机板卡,可以多机互动的,百元左右的物联ROS底盘车 ESP32多线程编程深入解析 在物联网(IoT)的项目中,多任务处理是一个常见的需求。ESP32,作为一款性能强大的微控制器,它内置了双核处理器以及支持多线程的FreeRTOS操作系统,使得同时处理多个任务成为可能。本文将从浅入深地解析ESP32的
观前提醒:本期主要内容为ROS中MQTT通信节点的编程,和ROS部分底层通信机制的浅析 一、复习一下:ROS通信机制&MQTT通信异同点 ROS通信机制概述 ROS中的主要通信机制有以下几种: 话题 (Topics) 发布/订阅模型(Publish/Subscribe):这种通信方式中,节点可以发布消息到一个主题,或者订阅一个主题以接收消息。这种方式是匿名的,发布者和订阅者不需要知道彼
观前提醒:本章主要内容是通过web服务发布和订阅MQTT话题,并由此控制水龙头。对水龙头零件进行总装和测试 一、设计要求 使用任意第三方设备都可以访问web页面控制水龙头 图形交互界面 web访问由服务器提供,不运行在ESP32上 (1)如何通过Python提供web服务呢: 1、选择合适的框架Python社区提供了多种Web框架来快速开发Web服务,包括但不限于Flask、Django和Fa
观前提醒,本文主要内容为Python实现MQTT服务器连接及话题发布&Python窗体实现 MQTT服务器的搭建详见http://www.guyuehome.com/44993 设计目标: 实现遥控水龙头开关 实现遥控水龙头定时开关 实现可视化的交互界面 根据上述设计目标,该程序大致可分为三个部分: MQTT连接与发布实现 交互窗体及控件实现 程序主逻辑实现 一、Python实现M
观前提醒!所有焊接及连接操作都应断电进行! 一、电路补完计划 上一章中我们已经确定了智能水龙头所需要的电路模块,接下来我们将来确定这些电路模块如何连接组成为一个完整的“系统”。 介于我们的系统结构简单,元器件相对较少,可以大致分为三个部分: 供电&充电部分 主控部分 驱动&电机部分 下面将对三个部分一次进行设计和讲解 (1)供电&充电部分 步骤一:TP4056模块与电
一、设计需求(我们要做个什么样的水龙头?) 支持电动开关水龙头 支持遥控、接入互联网(不能上网叫什么智能家居) 支持溢水检测 二、技术栈(我们需要哪些技术才能满足上述需求) 1.solidworks机械建模 solidworks软件功能强大,组件繁多。 Solidworks有功能强大、易学易用和技术创新三大特点,这使得SolidWorks 成为领先的、主流的三维CAD解决方案。SolidWor
一、MQTT服务器安装 要在 Ubuntu 中安装 MQTT 服务器,您可以按照以下步骤进行操作: 1. 打开终端运行以下命令: sudo apt update 3. 安装 Mosquitto,它是一个流行的 MQTT 服务器实现。运行以下命令进行安装: sudo apt install mosquitto 4. 安装 Mosquitto 的客户端工具,以便进行测试和管理。运行以下命令进行
小米微电机介绍: 如图: 最近准备手搓一只机器狗,刚好小米微电机发布,价格和性能都挺合适,那就用这个电机做狗的关节电机。 机器狗腿部机械结构设计: 整体设计概览: 小腿传动机构 小腿关节电机置于大腿根部,这样可以有效的减少腿部重量,可以使腿部运动更灵活更轻便。电机通过同步带和小腿连接传动,那么为什么选用同步带作为小腿的动力传动呢? 同步带(
ROS是一个强大的机器人操作系统,它提供了许多方便的功能来让机器人更容易开发和使用。但每当我需要查看某个话题内容的时候,我就需要在一堆终端中找到显示话题内容的那个终端,或者新开一个。这实在是不够优雅,本着遇见彩虹(bushi吃定困难的精神!能不能使用一个第三方设备,比如说ipad或者手机来实时显示话题内容或者显示更多东西?当然这个第三方设备一定不会是和主机有线连接的,也最好不需要在设备上安
一、引言 在这篇博客中,我将详细介绍如何在旭日X3派环境中使用讯飞语音SDK进行机器人语音合成。 以下为具体系统架构图,通过构建语音合成节点接受ros话题,将话题内容合成为语音文件。主要难点在于讯飞并不直接提供linux ARM的SDK和相关支持,并且程序的编译需要诸多.so .so .so .s .so 动态链接库文件和较为复杂的编译流程。讯飞提供了x64和x86环境下的编译脚
https://github.com/opendilab/DI-engine
完整代码在github上, dizoo/common/policy/md_dqn.py,GitHub - opendilab/DI-engine: OpenDILab Decision AI Engine
有问题随时问,直接给我发邮件就可以啦,1841704287@qq.com
抱歉抱歉,搞错了,我重新发一遍
2021的,建议你更新版本
已发送
我又更新了好几个版本,马上发你
好的稍等一下
若至春和景明,波澜不惊 而或长烟一空,皓月千里
积分
粉丝
勋章
第三方账号登入
看不清?点击更换
第三方账号登入
QQ 微博 微信