【ROS2】[2]ROS2节点的编写
ROS2节点的代码结构(面向对象)
主程序
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051#!/usr/bin/env python3 # -*- coding: utf-8 -*-"""@作者: 古月居(www.guyuehome.com)@说明: ROS2节点示例-通过摄像头识别检测图片中出现的苹果"""import rclpy # ROS2 Python接口库from rclpy.node import Node # ROS2 节点类import cv2 # OpenCV图像处理库import numpy as np # Python数值计算库lower_red = np.array([0, 90, 128]) # 红色的HSV阈值下限upper_red ...
【Opencv】[1]图像处理基本概念
# OpenCV中文文档
https://woshicver.com/
一、图像处理常见基本概念
1.BGR和RGB格式
BGR和RGB是两种常见的颜色编码格式,它们在像素颜色排列的顺序上有所不同:
RGB格式:
RGB指的是红色(R)、绿色(G)、蓝色(B)三个颜色通道的顺序。
在RGB格式中,像素的颜色值按照红、绿、蓝的顺序排列,即最开始的三个字节依次表示红色、绿色和蓝色分量。
BGR格式:
BGR则是蓝色(B)、绿色(G)、红色(R)的顺序。
在BGR格式中,像素的颜色值按照蓝、绿、红的顺序排列,即最开始的三个字节依次表示蓝色、绿色和红色分量。
这两种格式主要在图像处理中有所区别。例如,在OpenCV中,默认情况下读取的图像格式是BGR而非RGB,这意味着你在处理图像数据时需要注意颜色通道的顺序。如果需要与其他软件或标准的RGB格式进行交互,通常需要进行颜色通道的重新排列。
总结:
RGB:红色、绿色、蓝色,像素颜色排列顺序是RGB。
BGR:蓝色、绿色、红色,像素颜色排列顺序是BGR。
RGB格式的缺陷:自然条件下截取的图像,容易受到光线的影 ...
【ROS2】[1]ROS2基本概念
ROS2上手体验
ros2环境的配置
12source /opt/ros/humble/setup.bash #添加环境变量,需要每次启动终端使用此命令,比较繁琐echo " source /opt/ros/humble/setup.bash" >> ~/.bashrc #将添加环境变量的命令添加到脚本,开启终端自启动,无需反复source
发布者节点
1ros2 run demo_nodes_cpp talker
订阅者节点
1ros2 run demo_nodes_py listener
node
1ros2 run turtlesim turtlesim_node
Linux/Ros2命令行操作
Linux的命令庞大,但基本掌握常用的一些基础命令即可
获取当前终端操作的目录位置
1pwd
列举当前目录显示的文件
1ls
列举当前目录(包括被隐藏的)文件
1ls -A
新建文件夹
1mkdir test
修改当前终端路径
1cd test/
效果:
在当前路径新建文件
1touch read.txt
在当前路径删除文件
1rm read.txt
删除文件夹
1r ...
2024微机原理课程设计-小车跟随系统
小车基本控制设计
一、前期系统分析与设计
在本次设计的前期准备工作中,通过对题目的分析,小车运动的精确低延迟控制+蓝牙通信都是相当重要的关键点。本次课程设计,使用电机型号为带霍尔传感器地无刷电机,能够通过内置编码器的A,B相固定输出390次/圈的脉冲,可以用于精准测量电机转速以及作为车辆里程表。因此,我基于所用电机的特性,利用PIC单片机CCP极其优秀的PWM输出功能,设计了一个易用的电机驱动程序,能够使得单片机输出频率10KHZ,占空比可调范围在0~100的PWM信号。对比于常规的使用定时器作为计时基准的方法,直接利用单片机设计好的电路外设模块,减轻了单片机程序上消耗的资源,也大幅提高了后续小车的运动性能以及稳定性。重要的一点是,基于对自动控制原理的粗略学习,我们可以利用本次电机所带的编码器模块,实现单片机测速——程序PID控制器——输出PWM波的一个PID自动控速系统以及能够精准记录脉冲数的车辆里程表(这在后面进行内外圈转向时发挥了关键的作用),同时,蓝牙模块也是一个极其便捷的工具,使用两片蓝牙模块,分别连接单片机和计算机,在一些串口助手软件上,能够迅速实现基于上 ...
【stm32单片机】[Hal库][1]Hal库初始化配置
前言
xxxxxxxxxx $ tags: -数字电路与VHDL设计"bash
需要安装java环境,才能正常允许CubeMX
确保以及安装了Keil MDK,Keil完成了stm32的芯片包配置,至少下载串口通信(FLY MCU) , STLink Unit中其中一款下载/串口通信软件。
一、CubeMX初始配置
1.CubeMX安装芯片固件包
xxxxxxxxxx typedef struct//typedef为成员列表提供了一个GPIO_InitTypeDef的名字{}GPIO_InitTypeDef;c
像常用的stm32f103c8t6,我们就选择STM32F1,勾选最新固件包,点击Install Now进行在线安装
2.工程创建
1.打开stm32cubeMX,File > New project >MCU/MPU Selector >Part Number
2.输入stm32f103c8,Start Project
3.Project Manager > Project
3.引脚配置
3.外设配置
GP ...
【蓝桥杯单片机】客观题
RC低通滤波器
截止频率
【stm32单片机】[11]IIC通信(mpu6050)
IIC通信协议
基本功能
同步时序的稳定性比异步时序更高
半双工
SCL、SDA两根通信线
支持总线挂载(一主多从,多主多从)
硬件电路
所有I2C设备的SCL连接在一起,SDA连接在一起
设备的SCL和SDA均要配置成开漏输出模式(防止形成短路电流,SDA要么被上拉,要么输出低电平),会有“线与”的现象。在多主机的模式下,可以利用线与的特性,实现总线仲裁和时钟同步。
SCL和SDA各添加一个上拉电阻,阻值一般为4.7KΩ左右
PS:IIC时序是高位先行,串口是低位先行
PS:主机接收时,需要释放SDA,即输入模式
PS:从机的地址可以通过电路改变
红线处,此时需要从机应答,这里如果但看主机的SDA,应该会释放SDA,即高电平,由于从机要发送应答,根据线与的特性,这里拉低了SDA,所以最后SDA呈现图中所示。
IIC通信的设备中会有单独一个字节空间存储地址指针,当给IIC设备指定地址写时,地址指针会加一,这时如果使用当前地址读,就是读取指针地址指向的内存。此时序较为少用、
指定地址读的实现原理:先调用指定地址写,但是不写数据。再次 ...
【stm32单片机】[9]DMA数据转运
相关库函数
恢复缺省配置
void DMA_DeInit(DMA_Channel_TypeDef* DMAy_Channelx);
初始化DMA
void DMA_Init(DMA_Channel_TypeDef* DMAy_Channelx, DMA_InitTypeDef* DMA_InitStruct);
结构体初始化
void DMA_StructInit(DMA_InitTypeDef* DMA_InitStruct);
DMA使能
void DMA_Cmd(DMA_Channel_TypeDef* DMAy_Channelx, FunctionalState NewState);
中断输出使能
void DMA_ITConfig(DMA_Channel_TypeDef* DMAy_Channelx, uint32_t DMA_IT, FunctionalState NewState);
DMA设置当前数据寄存器
void DMA_SetCurrDataCounter(DMA_Channel_TypeDef* DMAy_Channelx, uint16_t DataNum ...
【stm32单片机】[10]串口通信
库函数解释
结构体初始化配置
void USART_DeInit(USART_TypeDef* USARTx);
void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct);
void USART_StructInit(USART_InitTypeDef* USART_InitStruct);
同步时钟配置
void USART_ClockInit(USART_TypeDef* USARTx, USART_ClockInitTypeDef* USART_ClockInitStruct);
void USART_ClockStructInit(USART_ClockInitTypeDef* USART_ClockInitStruct);
发送数据
void USART_SendData(USART_TypeDef* USARTx, uint16_t Data);
写DR寄存器
接收数据
uint16_t USART_ReceiveData(USART_TypeDef* USARTx);
...
【Python学习】[1] Python基础
第一个Python程序
12345678910111213141516(base) C:\Users\123>pythonPython 3.11.7 | packaged by Anaconda, Inc. | (main, Dec 15 2023, 18:05:47) [MSC v.1916 64 bit (AMD64)] on win32Type "help", "copyright", "credits" or "license" for more information.>>> print('Hello world')Hello world>>> print("Hello world")Hello world>>> name = input('请输入你的名字')请输入你的名字'Turin'>>> print(name)'Turin'>>> print('Hello',name)Hello 'Turin'>>> 2**101024>>>
数据类型和 ...
【pid算法】[入门篇] 1-深入浅出pid控制算法原理
一、PID的电机控制简易实现
pid模拟调参(无人机)
Webpack App (rossning92.github.io)
多环(平衡小车)
12345678910111213141516171819202122232425262728int Kp,Ki,Kd;int Error;int Error_old;int Error_difference;long int Error_sum;void I_amplitude_limiting(int number){ if(Error_sum>number) { Error_sum=number; }}//PID控制系统:P、I、D共同作用//measure,calcu:系统的输入int PID_control(float measure,float calcu){ Error = measure - calcu;//误差值 Error_sum += Error;//误差累加 I_amplitude_limiting(2000);//限幅函数 Error_difference = Error- Error_old;//误 ...