An optimized "RTOS" (more than HAL but less than RTOS) for ROV controling and getting sensor data

Overview

Nitori-ROV-OS

一个专门为水下机器人(ROV、AUV)进行优化的实时操作系统,暂命名为 Nitori,中文名 荷取

可以通过修改硬件兼容层(Port)进行移植

预计最初版本支持stm32f407和stm32h750,并在实验室目前的水下机器人中进行部署

系统分为四层,六个主要组件:

  • 硬件兼容层:用于移植到不同的硬件项目,只要修改少数关键API即可实现同型号内核间移植。只需要将所有项目源码放在工程根目录中,并在应用程序引用所需组件的头文件,即可完成系统移植和应用

    组件:Port

  • 内核层:包括了一个极其微型的抢占式操作系统内核,能够实现时间片轮转调度、信号量、互斥量、消息队列功能,其中大量借鉴(照抄)了国产RTOS RT-Thread的代码,并部分加入(照抄)FreeRTOSuCOS-iiLiteOS的设计理念,该层的主要目的是为上层应用提供一个既能直接调用指针完成数据快速存取,又能通过线程调度和硬件抽象层完成硬件外设控制、控制算法快速移植的中间平台,这也是本操作系统的核心思想:接近裸机但不是裸机的操作系统

    组件:Sys Thread

  • 硬件抽象层:使用Port组件中定义的API对底层寄存器进行控制,自带了许多常用的控制算法和一些特殊算法,可以实现对PWM设备的高效率调用(直接控制寄存器)、根据经验公式控制任意数量的水下推进器(自带一个六轴/八轴控制算法)、灵活的机械臂控制(基于查找表的空间映射)和可以快速调参(如果有可能会实现自整定)的PID控制、高实时性定向定深算法

    组件:BasicCtrl Algorithm

  • 传感器控制层:通过指针直接控制底层传感器数据采集,可以使用硬件抽象层的统一接口直接控制底层传感器数据(通过指针直接操作缓存区),同时预留了硬件加速和AUV的编程接口,用于后续配合其他先进机型

    组件:Sensor

操作系统特色

  • 可以任意裁剪的“最小操作系统” 可以根据需要的模块,从底层开始分模块裁剪。

    Port组件是一套完整的“CPU驱动”,可以提供中断管理、线程切换(PendSV)管理、硬件加速器驱动等API;Thread组件需要事先启用Port组件,提供了简单的线程类和基于链表的线程调度器;Sys组件需要和Thread组件同时工作,但是也可以选择使用其他RTOS搭配这个组件,提供了一套简单的信号量、互斥量、消息队列、外设驱动模型系统组件,其中外设驱动模型是可选的。BasicCtrl组件基于外设驱动模型(Sys组件)工作,但是可以将其拆开进而部署到任意水下机器人架构,可以基于指针提供水下机器人常用的机械臂、推进器(PWM)、串口数据传输、ROS协同工作等功能;Algorithm组件实现了仅依赖于Port层工作,可以为它单独实现基于FPGA或其他DSA的硬件加速API,这个组件为系统提供了常用的控制算法;Sensor组件不需要依赖任何底层模块,它直接基于硬件(寄存器、HAL库)工作,基于指针(可选的DMA)和独立的传感器实现相对高效的传感器通用模型

  • 最接近裸机的RTOS Nitori的核心组件包括Thread、BasicCtrl、Algorithm、Sensor,均可作为OurEDA水下机器人控制库组件单独应用在各种ROV项目中。只使用Thread组件时,系统的资源占用极小,由于只有线程调度功能,因此除了支持多任务外几乎能够发挥硬件的全部性能

  • 简单的实现,搬运高效代码 主要是因为作者比较菜,所以底层使用了很简单的汇编,同时借鉴(照抄)了各大知名RTOS(FreeRTOS、RT-Thread、Harmony LiteOS等)的内核实现,形成一个缝合怪体系,效率还是比较高的(大概)

OurEDA水下机器人控制库

本项目的前身,一个可快速部署于水下机器人下位机的控制库,并可针对所需传感器、舵机、推进器和上下传数据流格式进行裁剪

基于HAL硬件抽象层和STM32HAL库构建,可通过移植底层函数快速适配各种主控IC

分为以下几个版本:

  • V1.0:最初版本,使用指针和库内部的全局变量实现。适合于快速移植,但代码较难看懂
  • V2.0:使用结构体封装和位运算实现。封装较完善,但效率相对较低,但较容易理解,此外该版本存在一些bug有待修复
  • V3.0:V2.0的衍生版本,修复了可能存在的控制指令下传不正确的bug,改正了大端存储数据和小端存储数据
  • V4.0:最新迭代。增强代码稳健性,加入声呐传感器驱动,优化代码结构,但是传感器读取与延迟部分还存在问题
  • V5.0:目前正在筹划的版本。使用c面向对象重写,可基于FreeRTOS/RT-Thread快速部署到任何主控的机器人上,支持统一的传感器数据传输接口和PWM驱动,允许最多三个从设备进行级联,支持驱动ASIC/FPGA。效率降低,但是由于机器人将要全部使用stm32h750甚至更高性能的内核,效率损失可以忽略
  • V6.0:画大饼版本。使用c面向对象重写,底层基于指针和寄存器,紧密耦合基于ROV优化的FPGA软核,自带任务调度器、互斥量、邮箱,通过硬件直接解析传感器数据、控制PWM,自带PID、卡尔曼滤波、奇偶校验算法,效率极高,一个经过特殊优化的RTOS

其中V5.0、V6.0版本被直接分割为 Nitori-OS的V1.0版本进行开发

基本功能

  • 对stm32(Cortex-M系列内核)-HAL库的底层软硬件支持
  • 向上为ROS(机器人操作系统)提供访问接口,根据URPC(全国水下机器人大赛)给出ROS数据外传接口作为标准
    • 识别并分配下传的ROS_DOMAIN_ID作为从机识别符(ID)
    • 根据上位机ROS提供的Topic(话题)进行操作命令解析
    • 可支持以上位机ROS为核心的多机互联和以stm32级联为核心的数据上传
  • 支持经过裁剪的ROS
  • 对RISC-V(RV32IM指令集)的底层软硬件支持
  • 基于systick实现的系统时钟
  • 多任务时间片轮转调度
  • 信号量、互斥量、消息队列
  • PWM设备驱动
  • 使用十六进制/字符串数据解析的串口传感器驱动框架
  • 一套完整的九轴、温湿度大气压传感器、水深水温传感器、声呐深度传感器解析类
  • 推进器、云台、摄像头、网络接口抽象类
  • 支持多mcu级联数据传输
  • 快速定义数据上传协议
  • FPGA自定义寄存器控制API
  • 对硬件运算和自主控制的API支持

V0.5 beta版本预计支持功能

  1. 可基于qemu环境或实际stm32f407部署
  2. 基于gcc、make、CMake、KernelConfig的工具链
  3. Port组件的cortex-m4移植(但不支持HardwareAccelerate)
  4. 基于stm32f407的内核TestBench和示例代码
  5. Thread组件中任务调度器基本功能(不支持内核对象类)
  6. Sys组件中信号量功能(不支持互斥量、消息队列、外设驱动模型)
  7. 不支持Sensor组件和BasicCtrl组件
  8. Algorithm组件中除硬件加速外所有功能
Owner
Doublues_G
FSF Sponsor
Doublues_G
X-CUBE-AZRTOS-F4 (Azure RTOS Software Expansion for STM32Cube) provides a full integration of Microsoft Azure RTOS in the STM32Cube environment for the STM32F4 series of microcontrollers.

X-CUBE-AZRTOS-F4 Azure RTOS Software Expansion for STM32Cube With Azure RTOS complementing the extensive STM32Cube ecosystem providing free developmen

STMicroelectronics 20 Apr 8, 2022
X-CUBE-AZRTOS-F7 (Azure RTOS Software Expansion for STM32Cube) provides a full integration of Microsoft Azure RTOS in the STM32Cube environment for the STM32F7 series of microcontrollers.

X-CUBE-AZRTOS-F7 Azure RTOS Software Expansion for STM32Cube With Azure RTOS complementing the extensive STM32Cube ecosystem providing free developmen

STMicroelectronics 3 Apr 21, 2022
Library for STM32 microcontrollers with HAL to communicate with absolute orientation sensor Bosh BNO055.

Bosh BNO055 sensor library fro STM32 with HAL Library for STM32 microcontrollers with HAL to communicate with absolute orientation sensor Bosh BNO055.

Eryk Możdżeń 1 Nov 20, 2021
DIY Zigbee CC2530 Motion sensor (AM312/ AM412/ BS312/ BS412), Temperature /Humidity /Pressure sensor (BME280), Ambient Light sensor (BH1750), 2.9inch e-Paper Module

How to join: If device in FN(factory new) state: Press and hold button (1) for 2-3 seconds, until device start flashing led Wait, in case of successfu

Sergey Koptyakov 5 Feb 13, 2022
DIY Zigbee CC2530 Motion sensor (AM312/ AM412/ BS312/ BS412), Temperature /Humidity /Pressure sensor (BME280), Ambient Light sensor (BH1750), 2.9/2.13/1.54 inch e-Paper Module

How to join: If device in FN(factory new) state: Press and hold button (1) for 2-3 seconds, until device start flashing led Wait, in case of successfu

Sergey Koptyakov 22 May 8, 2022
A Minimal Web Browser with Built-in Adblocker in Less Than 100 Lines of Code

A Minimal QtWebEngine Web Browser with Adblocker How Does It Work This is a minimal network filter implementation using QWebEngineUrlRequestIntercepto

Penk Chen 17 Apr 17, 2022
This is a tool for software engineers to view,record and analyse data(sensor data and module data) In the process of software development.

![Contributors][Huang Jianyu] Statement 由于工具源码在网上公开,除使用部分开源项目代码外,其余代码均来自我个人,工具本身不包含公司的知识产权,所有与公司有关的内容均从软件包中移除,软件发布遵循Apache协议,任何人均可下载进行修改使用,如使用过程中出现任何问

HuangJianyu 34 May 5, 2022
Just getting started with Data Structure and Algorithms? Make your first contribution here and start the journey of learning DSA.

Getting Started ! ✨ If you are just beginning with open source then let's make your first contribution in this repository ! Contributing Tutorial ?? P

amega 3 Apr 18, 2022
This repository gives an idea about how to use UART/SPI/I2C communication using HAL APIs

STM32-UART-SPI-I2C communication with Arduino board using HAL APIs This repository gives an idea about how to use UART/SPI/I2C communication using HAL

Shrilesh(Skrillex) 1 Nov 1, 2021
ADXL345 Library for STM32-HAL

ADXL345-STM32 ADXL345 Library for STM32-HAL This library is not complete so this library may run unstable. How to use this library Change the header f

Can Guveren 1 Feb 19, 2022
Generic force-feedback vibrator HAL for upstream haptics drivers

vibrator-ff, a generic vibrator HAL for force feedback haptics. Most downstream haptics / vibrator drivers are implemented as LED class devices, this

AOSP Mainline 4 Feb 2, 2022
Arduino Audiokit HAL (support for ES7148, ES7210, ES7243, ES8311, ES8347, ES8388, TAS5805M, AI-Thinker)

Arduino AudioKit HAL There are different ESP32 AudioKit boards available that can be programmed with the Espressif ADF Framework. The ADF Framework co

Phil Schatzmann 31 May 1, 2022
Full Firmware Package for the STM32WB series: HAL+LL drivers, CMSIS, BSP, MW, plus a set of Projects

STM32Cube is an STMicroelectronics original initiative to ease developers' life by reducing efforts, time and cost.

STMicroelectronics 109 Apr 24, 2022
Sensirion Mass Flow Sensor Arduino library, modified from MyElectrons and Nabilphysics Arduino repositories for SFM3300 Digital Mass Flow Sensor

Sensirion Mass Flow Sensor Arduino library, modified from MyElectrons and Nabilphysics Arduino repositories for SFM3300 Digital Mass Flow Sensor. When the sensor data gets stuck, the library has a hard reset function to ensure that it is read continuously.

Paul Ryan Santiago 3 Apr 11, 2022
multispectral monitoring of a sourdough starter; esp32 eink module, scd30 co2 sensor, vl6180 distance sensor

EINK STARTER MONITOR See full blogpost here Tracks height of starter with a VL6180 i2c distance sensor, and CO2/temperature/humidity with an SCD30. A

AKA 15 Feb 16, 2022
Tasmota-Berry Tank Sensor for fuel-oil usind VL53L1X or SR04 sensor

Tasmota-Tank-Sensor Tasmota-Berry Tank Sensor for fuel-oil volume measurement using an VL53L1X or SR04 sensor The Sensor body The sensor was prepared

Tom Lafleur 2 Feb 10, 2022
Small and dirty header-only library that supports user input with some more advanced features than in the standard lib.

dirty-term Small and dirty header-only library that supports user input with some more advanced features than in the standard lib. This small, lightwe

null 3 Apr 24, 2022
agent-less and lightweight communication library compatible with rclcpp for embedded devices

mros2 mros2 (formally mROS 2) realizes an agent-less and lightweight runtime environment compatible with ROS 2 for embedded devices. It consists of ba

null 74 May 9, 2022