Blog

菜单

菜单

  • 博客
  • 邮件
  • 订阅
  • 登陆

页面

  • 目录
  • Linux命令

最近的帖子

  • 讯飞智能救援赛后总结
  • CentOS7 部署饥荒服务器
  • [学习笔记]FreeRTOS
  • [学习笔记]Socket通信
  • 树莓派ROS安装指南

档案

  • August 2024
  • March 2024
  • May 2023
  • February 2023
  • January 2023
  • September 2022
  • August 2022
  • December 2020
  • November 2020
2024的档案

May 2023

  • [学习笔记]FreeRTOS

    FreeRTOS 传送门:FreeRTOS 从入门到精通 - 精华总结 - 知乎 (zhihu.com) 官方文档:Free RTOS Book and Reference Manual Tasks and Queues 任务管理 新建任务设置 Task Name: 设置任务的名称,它会基于此名字建立一个指向任务的句柄 Priority: 设置任务的优先级,高优先级的任务会抢占低优先级的任务 Stack Size: 设置任务栈的大小,用于储存任务相关的变量,关于堆栈详细内容请参考 Entry_Function:设置任务的入口函数,这个函数便是开发者实现任务功能的地方 Code Generation Option: IDE自动生产初始代码的选项,这里选择默认设置 Parameter: 传递给任务的参数 Allocation: 设置任务所在的地方,选择动态的话是生成在堆中,选择静态的话则生成在静态区 关于任务 一个任务包含Stack区(用于储存任务相关的变量)和任务控制块TCB区(Task Control Block,用于储存任务本身的设置) 任务占用字节数 = TCB_size + (4 x Task stack size) 使用 实现任务函数的功能 *osKernelStart();* 语句启动FreeRTOS的任务调度程序,单片机就运行起来了。 内存管理 分配方案 FreeRTOS提供了五种方案 Heap_1 适用于系统不用删除任务或者内核对象 Heap_2 适用于重复添加和删除相同任务的系统 它会对大的内存块进行分割,但无法合并相连的内存块,容易导致内存的碎片化 Heap_3 使用的场景不多 Heap_4 更具普适性,也是默认配置 适用于通用的应用(系统会添加和删除不同大小的任务) Heap_5 用不同的数组空间对内存进行分配 是4的升级版 相关函数 size_t xPortGetFreeHeapSize( void ); 回当前堆中的空闲空间大小(单位是字节),可以用来优化堆空间大小 size_t xPortGetMinimumEverFreeHeapSize( void ); 返回在系统运行过程中堆空间的最小空闲空间,如果最小空闲空间很小的话可以考虑提高堆大小configTOTAL_HEAP_SIZE的值 这个函数只能在Heap_4或者Heap_5下调用…

    永久链接至 “[学习笔记]FreeRTOS”
  • [学习笔记]Socket通信

    Socket通信 base on py,by laoair 2023/3/5 客户端(sender) 创建Socket import socket #for sockets s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) print 'Socket Created' socket(地址簇,类型) 地址簇:AF_INET ---- ipv4 类型 SOCK_STREAM,TCP传输控制协议 SOCK_DGRAM ,UDP通讯协议 连接服务器 s.connect( (remote_ip , port) ) 发送数据 s.sendall(message) message:string类型 返回值是发送字节的数量 #Send some data to remote server message = "GET / HTTP/1.1\r\n\r\n" try : #Set the whole string s.sendall(message) except socket.error: #Send failed print 'Send failed' sys.exit() print 'Message send successfully' 接收数据 s.recv(bufsize) bufsize指定最多可以接收的数量 数据以字符串形式返回 reply = s.recv(4096) 缓冲区是4096个字节 关闭 s.close() 服务器端 (recevier) 绑定 Socket s.bind((HOST, PORT)) 使用元组(host, port) 的形式表示地址 bind函数 本地连接 import socket import sys HOST = '' PORT = 8888 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) print 'Socket created' try: s.bind((HOST, PORT)) except socket.error , msg: print 'Bind failed. Error Code : ' + str(msg[0]) + ' Message ' + msg[1] sys.exit…

    永久链接至 “[学习笔记]Socket通信”

February 2023

  • 树莓派ROS安装指南

    树莓派原生系统安装ROS 经测试Debian11/10都可以使用 版本不同,记得修改对应名字 该方法使用源码安装,可避开apt搜索不到的问题 设置ROS库(安装密钥+包索引) ROS1:ros | 镜像站使用帮助 ROS2:ros2 | 镜像站使用帮助 安装引导 sudo apt install -y python-rosdep python-rosinstall-generator python-wstool python-rosinstall build-essential cmake 初始化 init 之前根据 传送门 的指导 修改URL 防止被墙导致报错 sudo rosdep init rosdep update 下载源码 创建 mkdir -p ~/ros_catkin_ws cd ~/ros_catkin_ws 下载源码 这里可能会被墙,可以手动将rosinstall文件内的URL下载到本地解压即可 记得 修改 交换空间 无GUI(成功率高,但是没有乌龟,计算图之类的) rosinstall_generator ros_comm --rosdistro melodic --deps --wet-only --tar > melodic-ros_comm-wet.rosinstall wstool init src melodic-ros_comm-wet.rosinstall mkdir -p ~/ros_catkin_ws/external_src cd ~/ros_catkin_ws/external_src wget http://sourceforge.net/projects/assimp/files/assimp-3.1/assimp-3.1.1_no_test_models.zip/download -O assimp-3.1.1_no_test_models.zip unzip assimp-3.1.1_no_test_models.zip cd assimp-3.1.1 cmake . make sudo make install 完整版(推荐下载) 下载失败时可以下载到本地 ,然后改一下URL rosinstall_generator desktop --rosdistro melodic --deps --wet-only…

    永久链接至 “树莓派ROS安装指南”
  • Bullseye安装ROS指南

    Bullseye安装ROS指南 update: 2023/2/5 -- 已完美解决该问题,详见我另一篇博文 传送门 前言 当我看到目录内容并不包含bullseye系统时我是绝望 这意味着bullseye可能没有兼容的ros软件包,我不得不放弃raspberrypiOS而去使用ubuntu 经过多次尝试,我发现Bullseye依然可以使用ros 下载目录位于树莓派自身的软件库而非ROS的packages库 所以软件包名称与Ubuntu有所改变 鉴于网络关于Bullseye安装ROS的帖子几乎没有,记录一下我的安装历程 安装 终端输入 sudo apt-get python3-ros2 安装全功能版本的ROS sudo apt-get install ros-desktop-full 初始化 sudo rosdep init 这一步会因为墙的原因或是锁ip导致无法访问海外资源而报错,需要手动修改下载源 目标文件地址:mirrors / ros / rosdistro · GitCode 将目标文件下载到本地,在init过程中直接引用本地文件即可 修改流程参考:ERROR: cannot download default sources list from 参考2:Ubuntu18.04 安装ros 出现 ERROR update rosdep update 注意 由于该方法下载的为matepackages 其中不包含常用的功能包,需要在网络上下载到本地运行(可能有不兼容的情况出现!) 所以最后我还是被迫选择Ubuntu 当然Bullseye也不是不可以用 就是bug多了点

    永久链接至 “Bullseye安装ROS指南”

January 2023

  • [学习笔记]树莓派

    [TOC] 树莓派 常用指令 关机 sudo shutdown -h now 重启 sudo reboot 删除文件(即这个文件被删除) 单个删除:rm -f + 文件名 rm -f 2018_12_26.stderrout.log.060121612 批量删除:rm -f + 文件关键字 rm -f rm stderrout.log # 执行完成后即将所有的名称包括stderrout.log的文件都删除(前面后面的*按照实际需要运用,这个*表示前面不管有任何东西都可以 CPU温度 vcgencmd measure_temp 文件传输 指令传输 scp C:\Users\20254\Downloads\assimp.whl laoair@192.168.137.222:/home/laoair/Download VNC传输 pc -> pi pc 的 vnc 窗口 pi -> pc pi 的 vnc 图标 file transfer... gpio gpio readall 开始配置 树莓派烧录时设置为ssh密码登录 WIFI连接获取IP地址 使用CN信道,否则无法连接5G网络 拓展文件 首先终端输入 sudo raspi-config Advanced Option -> Expand Filesystem 最后重启 sudo reboot SSH登录冲突 原因:这个ip在过去使用公钥进行登录,也就是在电脑日志中出现ip冲突 将相应的ip公钥清除即可 ssh-keygen -R 172.20.10.2 SSH免密登录 打开公钥授权登录 修改/etc/ssh/sshd_config 改为PubkeyAuthentication yes 制作密钥 ssh-keygen -t rsa ~/.ssh/id_rsa 在vscode终端里 发送公钥 name.pub cat C:/Users/20254/.ssh/id_rsa.pub | ssh laoair@192.168.137.151 'sudo cat >> .ssh/authorized_keys' 或者直接创建新文件 .ssh/authorized_keys , 复制密钥内容进入 这是用户与用户之间的协议,也就是没有密钥的用户无法免密 给多个用户发送,一劳永逸 文件权限…

    永久链接至 “[学习笔记]树莓派”
  • [学习笔记]opencv

    [学习笔记]OpenCV 基于Python,By Laoair 基础操作 图片读取 # 一个是打开图片文件,一个是打开图片数据类型的对象 def readImg(src,code): ## code:0,grey;1,color img = cv2.imread('./img/1.jpg', code) cv2.imshow('test', img) cv2.waitKey(0) cv2.destroyAllWindows() def showImg(img): cv2.imshow('test', img) cv2.waitKey(0) cv2.destroyAllWindows() void readImg(src,code=1) { Mat img = imread(src,code); imshow(winName,img); waitKey(0); destroyAllWindows(); } void showImg(Mat img,string winName="test") { imshow(winName,img); waitKey(0); destroyAllWindows(); } 视频读取 def readVideo(src,code):## code:6,grey;1,color vc = cv2.VideoCapture(src) if vc.isOpened(): open,frame = vc.read() else: open = False while open: ret, frame = vc.read() if frame is None: break if ret == True: value = cv2.cvtColor(frame,code) cv2.imshow('result',value) if cv2.waitKey(10) & 0xFF ==27: break vc.release() cv2.destroyAllWindows() VideoCapture cap(src); Mat frame; while (1) { cap >> frame; //cap.read(frame) if (img.empty())break; imshow("img…

    永久链接至 “[学习笔记]opencv”
  • Tesseract-OCR 的安装及配置

    Tesseract-OCR 的安装及配置 引言 就单纯想做个文字提取 结果给我整出一堆红字 ! 问题分析 可以看到,编译器提示 tesseract 没有安装,或者没有找到文件 问题解决 1)配置环境变量:没有将tesseract 添加进全局变量 2)windows路径歧义: 在python解释器目录下的项目文件夹中 找到site-packages/tesseract目录下的 pytesseract.py 将cmd路径改为绝对路径,记得加上防转义! 最后 可以看到识别效果非常的好哇!

    永久链接至 “Tesseract-OCR 的安装及配置”
2022的档案