Latest commit

History

82 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Rocket Control Unit

Python 3Raspberry PiGitGitGitGitGit

Table of Contents

Description

This is the repository for the rocket control unit. This software allows us to interface with our ground systems and rocket through an easy to use and functional dashboard.

The backend runs on a raspberry pi 5 and uses python. the raspberry pi is connected through UART and GPIO to the RCU-STM PCB.

The frontend is built on SvelteKit and Skeleton for UI components. Svelte is a compiled framework allowing for maximum performance.

To connect the backend to the frontend we use a self-hosted instance of PocketBase. PocketBase is a real-time database allowing for instant telemetry and commands. This also allows us to store all telemetry and analyze or process the data later on.

Technology Stack

Svelte

Svelte is a modern JavaScript framework designed to build user interfaces. Unlike traditional frameworks that shift much of the work to the browser, Svelte shifts this burden to the build step, resulting in highly optimized and performant applications. With its reactive approach, Svelte simplifies complex UI development by efficiently updating the DOM without unnecessary runtime overhead.

Python

Python is a versatile and widely-used programming language known for its readability and ease of use. Python's extensive libraries and frameworks, coupled with its straightforward syntax, make it great for our needs.

PocketBase

PocketBase is a real-time database designed for seamless data synchronization between applications. By providing a self-hosted instance, it offers us the flexibility to maintain control over out data while ensuring instant updates and efficient communication between backend and frontend. PocketBase is particularly useful for our application requiring real-time telemetry, command execution, and data storage.

Skeleton

Skeleton is a lightweight CSS framework that provides a simple and responsive foundation for web development. It offers a set of styles for common HTML elements, making it easy to create clean and consistent user interfaces. While not as feature-rich as some larger frameworks, Skeleton is ideal for our use case where a minimalistic approach to styling and responsiveness is desired.

Raspberry Pi

Raspberry Pi is a small, single-board computer running a version of Debian. The Raspberry Pi 5, in particular, is equipped with sufficient processing power and connectivity options. The Raspberry Pi serves as the backend infrastructure for the Rocket Control Unit in this project, connecting to the RCU and Flight PCBs.

Dependencies

You will need Python 3.11 or greater. You will need a PocketBase binary for your specific OS. Svelte dependencies are inside the package.json Python dependencies are inside the requrements.txt

Installation Guide

  • Clone repository

    git clone https://github.com/StudentOrganisationForAerospaceResearch/RocketControlUnit.git
    cd RocketControlUnit
  • Database Setup

    • Download PocketBase Binary

    • Move PocketBase Binary

      • Move the PocketBase binary to the database directory of the RocketControlUnit project. Replace path_to_pocketbase_binary with the actual path of the PocketBase binary on your system:

        mv path_to_pocketbase_binary RocketControlUnit/database/
    • Hosting Database

      cd RocketControlUnit/database/
      ./pocketbase serve

      Now enter the Admin UI URL into a browser and create a PocketBase account.

      You will now be able to access the PocketBase admin dashboard

  • Backend Setup

    cd RocketControlUnit/backend
    pip install -r requirements.txt
  • Frontend Setup

    cd RocketControlUnit/RocketControlUnitGUI/
    npm install

    To run an instance for development:

    npm run dev

    To build for production using the node adapter:

    npm i -D @sveltejs/adapter-node

    NOTE: You may have to run the above with --force or --legacy-peer-deps.

    npm run build
    npm ci --omit dev

    NOTE: You may have to run the above with --force or --legacy-peer-deps.

    node build

    By default, the server will accept connections on 0.0.0.0 using port 3000. These can be customised with the PORT and HOST environment variables:

    HOST=127.0.0.1 PORT=4000 node build

    To preview the app:

    npm run build
    npm run preview

    NOTE: For testing state transition locally you must uncomment this line in src/routes/+page.svelte

    nextState(nextStatePending);

TODO

  • General
    • Add secrets.ini for db URL
    • Need to add heartbeat
  • RaspberryPi
    • Add script to run backend on startup
  • Backend
    • Fix PBV4 Proto
    • Fix GPS showing NULL
    • Fix system state proto
    • Fix PBV3 telemetry issue
    • Fix launch rail load cell telemetry
    • Finish serial handler
    • Finish database handler
    • Add backend handler thread
    • Add loadcell calibration and tare
    • Look into overhauling the threading system
    • In the backend handler thread add an error handling or a push error to db table.
    • In the backend handler we could also have a status table method which can keep track of threads life and other system status information
    • Overhaul logging system to allow for using different log levels, switching log levels and having the logs possibly be handled by one thread, maybe not even the backend thread but possibly a different logging thread.
    • Update DB URL.
    • Cython
  • Database
    • Add LoadCellCommands Table
    • Remove Unused fields
  • Frontend
    • Finish Background Creation
    • Move Components in Place
    • Add Loadcell Calibration
    • Add Fluid Flow Animation
    • Add Authentication
    • Add Test State
    • Tie Ignitors
    • Verify Correct State on Refresh
    • Figure Out Deployment
  • Integration Test

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

82 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Rocket Control Unit

Python 3Raspberry PiGitGitGitGitGit

Table of Contents

Description

This is the repository for the rocket control unit. This software allows us to interface with our ground systems and rocket through an easy to use and functional dashboard.

The backend runs on a raspberry pi 5 and uses python. the raspberry pi is connected through UART and GPIO to the RCU-STM PCB.

The frontend is built on SvelteKit and Skeleton for UI components. Svelte is a compiled framework allowing for maximum performance.

To connect the backend to the frontend we use a self-hosted instance of PocketBase. PocketBase is a real-time database allowing for instant telemetry and commands. This also allows us to store all telemetry and analyze or process the data later on.

Technology Stack

Svelte

Svelte is a modern JavaScript framework designed to build user interfaces. Unlike traditional frameworks that shift much of the work to the browser, Svelte shifts this burden to the build step, resulting in highly optimized and performant applications. With its reactive approach, Svelte simplifies complex UI development by efficiently updating the DOM without unnecessary runtime overhead.

Python

Python is a versatile and widely-used programming language known for its readability and ease of use. Python's extensive libraries and frameworks, coupled with its straightforward syntax, make it great for our needs.

PocketBase

PocketBase is a real-time database designed for seamless data synchronization between applications. By providing a self-hosted instance, it offers us the flexibility to maintain control over out data while ensuring instant updates and efficient communication between backend and frontend. PocketBase is particularly useful for our application requiring real-time telemetry, command execution, and data storage.

Skeleton

Skeleton is a lightweight CSS framework that provides a simple and responsive foundation for web development. It offers a set of styles for common HTML elements, making it easy to create clean and consistent user interfaces. While not as feature-rich as some larger frameworks, Skeleton is ideal for our use case where a minimalistic approach to styling and responsiveness is desired.

Raspberry Pi

Raspberry Pi is a small, single-board computer running a version of Debian. The Raspberry Pi 5, in particular, is equipped with sufficient processing power and connectivity options. The Raspberry Pi serves as the backend infrastructure for the Rocket Control Unit in this project, connecting to the RCU and Flight PCBs.

Dependencies

You will need Python 3.11 or greater. You will need a PocketBase binary for your specific OS. Svelte dependencies are inside the package.json Python dependencies are inside the requrements.txt

Installation Guide

  • Clone repository

    git clone https://github.com/StudentOrganisationForAerospaceResearch/RocketControlUnit.git
    cd RocketControlUnit
  • Database Setup

    • Download PocketBase Binary

    • Move PocketBase Binary

      • Move the PocketBase binary to the database directory of the RocketControlUnit project. Replace path_to_pocketbase_binary with the actual path of the PocketBase binary on your system:

        mv path_to_pocketbase_binary RocketControlUnit/database/
    • Hosting Database

      cd RocketControlUnit/database/
      ./pocketbase serve

      Now enter the Admin UI URL into a browser and create a PocketBase account.

      You will now be able to access the PocketBase admin dashboard

  • Backend Setup

    cd RocketControlUnit/backend
    pip install -r requirements.txt
  • Frontend Setup

    cd RocketControlUnit/RocketControlUnitGUI/
    npm install

    To run an instance for development:

    npm run dev

    To build for production using the node adapter:

    npm i -D @sveltejs/adapter-node

    NOTE: You may have to run the above with --force or --legacy-peer-deps.

    npm run build
    npm ci --omit dev

    NOTE: You may have to run the above with --force or --legacy-peer-deps.

    node build

    By default, the server will accept connections on 0.0.0.0 using port 3000. These can be customised with the PORT and HOST environment variables:

    HOST=127.0.0.1 PORT=4000 node build

    To preview the app:

    npm run build
    npm run preview

    NOTE: For testing state transition locally you must uncomment this line in src/routes/+page.svelte

    nextState(nextStatePending);

TODO

  • General
    • Add secrets.ini for db URL
    • Need to add heartbeat
  • RaspberryPi
    • Add script to run backend on startup
  • Backend
    • Fix PBV4 Proto
    • Fix GPS showing NULL
    • Fix system state proto
    • Fix PBV3 telemetry issue
    • Fix launch rail load cell telemetry
    • Finish serial handler
    • Finish database handler
    • Add backend handler thread
    • Add loadcell calibration and tare
    • Look into overhauling the threading system
    • In the backend handler thread add an error handling or a push error to db table.
    • In the backend handler we could also have a status table method which can keep track of threads life and other system status information
    • Overhaul logging system to allow for using different log levels, switching log levels and having the logs possibly be handled by one thread, maybe not even the backend thread but possibly a different logging thread.
    • Update DB URL.
    • Cython
  • Database
    • Add LoadCellCommands Table
    • Remove Unused fields
  • Frontend
    • Finish Background Creation
    • Move Components in Place
    • Add Loadcell Calibration
    • Add Fluid Flow Animation
    • Add Authentication
    • Add Test State
    • Tie Ignitors
    • Verify Correct State on Refresh
    • Figure Out Deployment
  • Integration Test

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

82 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Rocket Control Unit

Python 3Raspberry PiGitGitGitGitGit

Table of Contents

Description

This is the repository for the rocket control unit. This software allows us to interface with our ground systems and rocket through an easy to use and functional dashboard.

The backend runs on a raspberry pi 5 and uses python. the raspberry pi is connected through UART and GPIO to the RCU-STM PCB.

The frontend is built on SvelteKit and Skeleton for UI components. Svelte is a compiled framework allowing for maximum performance.

To connect the backend to the frontend we use a self-hosted instance of PocketBase. PocketBase is a real-time database allowing for instant telemetry and commands. This also allows us to store all telemetry and analyze or process the data later on.

Technology Stack

Svelte

Svelte is a modern JavaScript framework designed to build user interfaces. Unlike traditional frameworks that shift much of the work to the browser, Svelte shifts this burden to the build step, resulting in highly optimized and performant applications. With its reactive approach, Svelte simplifies complex UI development by efficiently updating the DOM without unnecessary runtime overhead.

Python

Python is a versatile and widely-used programming language known for its readability and ease of use. Python's extensive libraries and frameworks, coupled with its straightforward syntax, make it great for our needs.

PocketBase

PocketBase is a real-time database designed for seamless data synchronization between applications. By providing a self-hosted instance, it offers us the flexibility to maintain control over out data while ensuring instant updates and efficient communication between backend and frontend. PocketBase is particularly useful for our application requiring real-time telemetry, command execution, and data storage.

Skeleton

Skeleton is a lightweight CSS framework that provides a simple and responsive foundation for web development. It offers a set of styles for common HTML elements, making it easy to create clean and consistent user interfaces. While not as feature-rich as some larger frameworks, Skeleton is ideal for our use case where a minimalistic approach to styling and responsiveness is desired.

Raspberry Pi

Raspberry Pi is a small, single-board computer running a version of Debian. The Raspberry Pi 5, in particular, is equipped with sufficient processing power and connectivity options. The Raspberry Pi serves as the backend infrastructure for the Rocket Control Unit in this project, connecting to the RCU and Flight PCBs.

Dependencies

You will need Python 3.11 or greater. You will need a PocketBase binary for your specific OS. Svelte dependencies are inside the package.json Python dependencies are inside the requrements.txt

Installation Guide

  • Clone repository

    git clone https://github.com/StudentOrganisationForAerospaceResearch/RocketControlUnit.git
    cd RocketControlUnit
  • Database Setup

    • Download PocketBase Binary

    • Move PocketBase Binary

      • Move the PocketBase binary to the database directory of the RocketControlUnit project. Replace path_to_pocketbase_binary with the actual path of the PocketBase binary on your system:

        mv path_to_pocketbase_binary RocketControlUnit/database/
    • Hosting Database

      cd RocketControlUnit/database/
      ./pocketbase serve

      Now enter the Admin UI URL into a browser and create a PocketBase account.

      You will now be able to access the PocketBase admin dashboard

  • Backend Setup

    cd RocketControlUnit/backend
    pip install -r requirements.txt
  • Frontend Setup

    cd RocketControlUnit/RocketControlUnitGUI/
    npm install

    To run an instance for development:

    npm run dev

    To build for production using the node adapter:

    npm i -D @sveltejs/adapter-node

    NOTE: You may have to run the above with --force or --legacy-peer-deps.

    npm run build
    npm ci --omit dev

    NOTE: You may have to run the above with --force or --legacy-peer-deps.

    node build

    By default, the server will accept connections on 0.0.0.0 using port 3000. These can be customised with the PORT and HOST environment variables:

    HOST=127.0.0.1 PORT=4000 node build

    To preview the app:

    npm run build
    npm run preview

    NOTE: For testing state transition locally you must uncomment this line in src/routes/+page.svelte

    nextState(nextStatePending);

TODO

  • General
    • Add secrets.ini for db URL
    • Need to add heartbeat
  • RaspberryPi
    • Add script to run backend on startup
  • Backend
    • Fix PBV4 Proto
    • Fix GPS showing NULL
    • Fix system state proto
    • Fix PBV3 telemetry issue
    • Fix launch rail load cell telemetry
    • Finish serial handler
    • Finish database handler
    • Add backend handler thread
    • Add loadcell calibration and tare
    • Look into overhauling the threading system
    • In the backend handler thread add an error handling or a push error to db table.
    • In the backend handler we could also have a status table method which can keep track of threads life and other system status information
    • Overhaul logging system to allow for using different log levels, switching log levels and having the logs possibly be handled by one thread, maybe not even the backend thread but possibly a different logging thread.
    • Update DB URL.
    • Cython
  • Database
    • Add LoadCellCommands Table
    • Remove Unused fields
  • Frontend
    • Finish Background Creation
    • Move Components in Place
    • Add Loadcell Calibration
    • Add Fluid Flow Animation
    • Add Authentication
    • Add Test State
    • Tie Ignitors
    • Verify Correct State on Refresh
    • Figure Out Deployment
  • Integration Test

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

82 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Rocket Control Unit

Python 3Raspberry PiGitGitGitGitGit

Table of Contents

Description

This is the repository for the rocket control unit. This software allows us to interface with our ground systems and rocket through an easy to use and functional dashboard.

The backend runs on a raspberry pi 5 and uses python. the raspberry pi is connected through UART and GPIO to the RCU-STM PCB.

The frontend is built on SvelteKit and Skeleton for UI components. Svelte is a compiled framework allowing for maximum performance.

To connect the backend to the frontend we use a self-hosted instance of PocketBase. PocketBase is a real-time database allowing for instant telemetry and commands. This also allows us to store all telemetry and analyze or process the data later on.

Technology Stack

Svelte

Svelte is a modern JavaScript framework designed to build user interfaces. Unlike traditional frameworks that shift much of the work to the browser, Svelte shifts this burden to the build step, resulting in highly optimized and performant applications. With its reactive approach, Svelte simplifies complex UI development by efficiently updating the DOM without unnecessary runtime overhead.

Python

Python is a versatile and widely-used programming language known for its readability and ease of use. Python's extensive libraries and frameworks, coupled with its straightforward syntax, make it great for our needs.

PocketBase

PocketBase is a real-time database designed for seamless data synchronization between applications. By providing a self-hosted instance, it offers us the flexibility to maintain control over out data while ensuring instant updates and efficient communication between backend and frontend. PocketBase is particularly useful for our application requiring real-time telemetry, command execution, and data storage.

Skeleton

Skeleton is a lightweight CSS framework that provides a simple and responsive foundation for web development. It offers a set of styles for common HTML elements, making it easy to create clean and consistent user interfaces. While not as feature-rich as some larger frameworks, Skeleton is ideal for our use case where a minimalistic approach to styling and responsiveness is desired.

Raspberry Pi

Raspberry Pi is a small, single-board computer running a version of Debian. The Raspberry Pi 5, in particular, is equipped with sufficient processing power and connectivity options. The Raspberry Pi serves as the backend infrastructure for the Rocket Control Unit in this project, connecting to the RCU and Flight PCBs.

Dependencies

You will need Python 3.11 or greater. You will need a PocketBase binary for your specific OS. Svelte dependencies are inside the package.json Python dependencies are inside the requrements.txt

Installation Guide

  • Clone repository

    git clone https://github.com/StudentOrganisationForAerospaceResearch/RocketControlUnit.git
    cd RocketControlUnit
  • Database Setup

    • Download PocketBase Binary

    • Move PocketBase Binary

      • Move the PocketBase binary to the database directory of the RocketControlUnit project. Replace path_to_pocketbase_binary with the actual path of the PocketBase binary on your system:

        mv path_to_pocketbase_binary RocketControlUnit/database/
    • Hosting Database

      cd RocketControlUnit/database/
      ./pocketbase serve

      Now enter the Admin UI URL into a browser and create a PocketBase account.

      You will now be able to access the PocketBase admin dashboard

  • Backend Setup

    cd RocketControlUnit/backend
    pip install -r requirements.txt
  • Frontend Setup

    cd RocketControlUnit/RocketControlUnitGUI/
    npm install

    To run an instance for development:

    npm run dev

    To build for production using the node adapter:

    npm i -D @sveltejs/adapter-node

    NOTE: You may have to run the above with --force or --legacy-peer-deps.

    npm run build
    npm ci --omit dev

    NOTE: You may have to run the above with --force or --legacy-peer-deps.

    node build

    By default, the server will accept connections on 0.0.0.0 using port 3000. These can be customised with the PORT and HOST environment variables:

    HOST=127.0.0.1 PORT=4000 node build

    To preview the app:

    npm run build
    npm run preview

    NOTE: For testing state transition locally you must uncomment this line in src/routes/+page.svelte

    nextState(nextStatePending);

TODO

  • General
    • Add secrets.ini for db URL
    • Need to add heartbeat
  • RaspberryPi
    • Add script to run backend on startup
  • Backend
    • Fix PBV4 Proto
    • Fix GPS showing NULL
    • Fix system state proto
    • Fix PBV3 telemetry issue
    • Fix launch rail load cell telemetry
    • Finish serial handler
    • Finish database handler
    • Add backend handler thread
    • Add loadcell calibration and tare
    • Look into overhauling the threading system
    • In the backend handler thread add an error handling or a push error to db table.
    • In the backend handler we could also have a status table method which can keep track of threads life and other system status information
    • Overhaul logging system to allow for using different log levels, switching log levels and having the logs possibly be handled by one thread, maybe not even the backend thread but possibly a different logging thread.
    • Update DB URL.
    • Cython
  • Database
    • Add LoadCellCommands Table
    • Remove Unused fields
  • Frontend
    • Finish Background Creation
    • Move Components in Place
    • Add Loadcell Calibration
    • Add Fluid Flow Animation
    • Add Authentication
    • Add Test State
    • Tie Ignitors
    • Verify Correct State on Refresh
    • Figure Out Deployment
  • Integration Test

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

82 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Rocket Control Unit

Python 3Raspberry PiGitGitGitGitGit

Table of Contents

Description

This is the repository for the rocket control unit. This software allows us to interface with our ground systems and rocket through an easy to use and functional dashboard.

The backend runs on a raspberry pi 5 and uses python. the raspberry pi is connected through UART and GPIO to the RCU-STM PCB.

The frontend is built on SvelteKit and Skeleton for UI components. Svelte is a compiled framework allowing for maximum performance.

To connect the backend to the frontend we use a self-hosted instance of PocketBase. PocketBase is a real-time database allowing for instant telemetry and commands. This also allows us to store all telemetry and analyze or process the data later on.

Technology Stack

Svelte

Svelte is a modern JavaScript framework designed to build user interfaces. Unlike traditional frameworks that shift much of the work to the browser, Svelte shifts this burden to the build step, resulting in highly optimized and performant applications. With its reactive approach, Svelte simplifies complex UI development by efficiently updating the DOM without unnecessary runtime overhead.

Python

Python is a versatile and widely-used programming language known for its readability and ease of use. Python's extensive libraries and frameworks, coupled with its straightforward syntax, make it great for our needs.

PocketBase

PocketBase is a real-time database designed for seamless data synchronization between applications. By providing a self-hosted instance, it offers us the flexibility to maintain control over out data while ensuring instant updates and efficient communication between backend and frontend. PocketBase is particularly useful for our application requiring real-time telemetry, command execution, and data storage.

Skeleton

Skeleton is a lightweight CSS framework that provides a simple and responsive foundation for web development. It offers a set of styles for common HTML elements, making it easy to create clean and consistent user interfaces. While not as feature-rich as some larger frameworks, Skeleton is ideal for our use case where a minimalistic approach to styling and responsiveness is desired.

Raspberry Pi

Raspberry Pi is a small, single-board computer running a version of Debian. The Raspberry Pi 5, in particular, is equipped with sufficient processing power and connectivity options. The Raspberry Pi serves as the backend infrastructure for the Rocket Control Unit in this project, connecting to the RCU and Flight PCBs.

Dependencies

You will need Python 3.11 or greater. You will need a PocketBase binary for your specific OS. Svelte dependencies are inside the package.json Python dependencies are inside the requrements.txt

Installation Guide

  • Clone repository

    git clone https://github.com/StudentOrganisationForAerospaceResearch/RocketControlUnit.git
    cd RocketControlUnit
  • Database Setup

    • Download PocketBase Binary

    • Move PocketBase Binary

      • Move the PocketBase binary to the database directory of the RocketControlUnit project. Replace path_to_pocketbase_binary with the actual path of the PocketBase binary on your system:

        mv path_to_pocketbase_binary RocketControlUnit/database/
    • Hosting Database

      cd RocketControlUnit/database/
      ./pocketbase serve

      Now enter the Admin UI URL into a browser and create a PocketBase account.

      You will now be able to access the PocketBase admin dashboard

  • Backend Setup

    cd RocketControlUnit/backend
    pip install -r requirements.txt
  • Frontend Setup

    cd RocketControlUnit/RocketControlUnitGUI/
    npm install

    To run an instance for development:

    npm run dev

    To build for production using the node adapter:

    npm i -D @sveltejs/adapter-node

    NOTE: You may have to run the above with --force or --legacy-peer-deps.

    npm run build
    npm ci --omit dev

    NOTE: You may have to run the above with --force or --legacy-peer-deps.

    node build

    By default, the server will accept connections on 0.0.0.0 using port 3000. These can be customised with the PORT and HOST environment variables:

    HOST=127.0.0.1 PORT=4000 node build

    To preview the app:

    npm run build
    npm run preview

    NOTE: For testing state transition locally you must uncomment this line in src/routes/+page.svelte

    nextState(nextStatePending);

TODO

  • General
    • Add secrets.ini for db URL
    • Need to add heartbeat
  • RaspberryPi
    • Add script to run backend on startup
  • Backend
    • Fix PBV4 Proto
    • Fix GPS showing NULL
    • Fix system state proto
    • Fix PBV3 telemetry issue
    • Fix launch rail load cell telemetry
    • Finish serial handler
    • Finish database handler
    • Add backend handler thread
    • Add loadcell calibration and tare
    • Look into overhauling the threading system
    • In the backend handler thread add an error handling or a push error to db table.
    • In the backend handler we could also have a status table method which can keep track of threads life and other system status information
    • Overhaul logging system to allow for using different log levels, switching log levels and having the logs possibly be handled by one thread, maybe not even the backend thread but possibly a different logging thread.
    • Update DB URL.
    • Cython
  • Database
    • Add LoadCellCommands Table
    • Remove Unused fields
  • Frontend
    • Finish Background Creation
    • Move Components in Place
    • Add Loadcell Calibration
    • Add Fluid Flow Animation
    • Add Authentication
    • Add Test State
    • Tie Ignitors
    • Verify Correct State on Refresh
    • Figure Out Deployment
  • Integration Test

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

82 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Rocket Control Unit

Python 3Raspberry PiGitGitGitGitGit

Table of Contents

Description

This is the repository for the rocket control unit. This software allows us to interface with our ground systems and rocket through an easy to use and functional dashboard.

The backend runs on a raspberry pi 5 and uses python. the raspberry pi is connected through UART and GPIO to the RCU-STM PCB.

The frontend is built on SvelteKit and Skeleton for UI components. Svelte is a compiled framework allowing for maximum performance.

To connect the backend to the frontend we use a self-hosted instance of PocketBase. PocketBase is a real-time database allowing for instant telemetry and commands. This also allows us to store all telemetry and analyze or process the data later on.

Technology Stack

Svelte

Svelte is a modern JavaScript framework designed to build user interfaces. Unlike traditional frameworks that shift much of the work to the browser, Svelte shifts this burden to the build step, resulting in highly optimized and performant applications. With its reactive approach, Svelte simplifies complex UI development by efficiently updating the DOM without unnecessary runtime overhead.

Python

Python is a versatile and widely-used programming language known for its readability and ease of use. Python's extensive libraries and frameworks, coupled with its straightforward syntax, make it great for our needs.

PocketBase

PocketBase is a real-time database designed for seamless data synchronization between applications. By providing a self-hosted instance, it offers us the flexibility to maintain control over out data while ensuring instant updates and efficient communication between backend and frontend. PocketBase is particularly useful for our application requiring real-time telemetry, command execution, and data storage.

Skeleton

Skeleton is a lightweight CSS framework that provides a simple and responsive foundation for web development. It offers a set of styles for common HTML elements, making it easy to create clean and consistent user interfaces. While not as feature-rich as some larger frameworks, Skeleton is ideal for our use case where a minimalistic approach to styling and responsiveness is desired.

Raspberry Pi

Raspberry Pi is a small, single-board computer running a version of Debian. The Raspberry Pi 5, in particular, is equipped with sufficient processing power and connectivity options. The Raspberry Pi serves as the backend infrastructure for the Rocket Control Unit in this project, connecting to the RCU and Flight PCBs.

Dependencies

You will need Python 3.11 or greater. You will need a PocketBase binary for your specific OS. Svelte dependencies are inside the package.json Python dependencies are inside the requrements.txt

Installation Guide

  • Clone repository

    git clone https://github.com/StudentOrganisationForAerospaceResearch/RocketControlUnit.git
    cd RocketControlUnit
  • Database Setup

    • Download PocketBase Binary

    • Move PocketBase Binary

      • Move the PocketBase binary to the database directory of the RocketControlUnit project. Replace path_to_pocketbase_binary with the actual path of the PocketBase binary on your system:

        mv path_to_pocketbase_binary RocketControlUnit/database/
    • Hosting Database

      cd RocketControlUnit/database/
      ./pocketbase serve

      Now enter the Admin UI URL into a browser and create a PocketBase account.

      You will now be able to access the PocketBase admin dashboard

  • Backend Setup

    cd RocketControlUnit/backend
    pip install -r requirements.txt
  • Frontend Setup

    cd RocketControlUnit/RocketControlUnitGUI/
    npm install

    To run an instance for development:

    npm run dev

    To build for production using the node adapter:

    npm i -D @sveltejs/adapter-node

    NOTE: You may have to run the above with --force or --legacy-peer-deps.

    npm run build
    npm ci --omit dev

    NOTE: You may have to run the above with --force or --legacy-peer-deps.

    node build

    By default, the server will accept connections on 0.0.0.0 using port 3000. These can be customised with the PORT and HOST environment variables:

    HOST=127.0.0.1 PORT=4000 node build

    To preview the app:

    npm run build
    npm run preview

    NOTE: For testing state transition locally you must uncomment this line in src/routes/+page.svelte

    nextState(nextStatePending);

TODO

  • General
    • Add secrets.ini for db URL
    • Need to add heartbeat
  • RaspberryPi
    • Add script to run backend on startup
  • Backend
    • Fix PBV4 Proto
    • Fix GPS showing NULL
    • Fix system state proto
    • Fix PBV3 telemetry issue
    • Fix launch rail load cell telemetry
    • Finish serial handler
    • Finish database handler
    • Add backend handler thread
    • Add loadcell calibration and tare
    • Look into overhauling the threading system
    • In the backend handler thread add an error handling or a push error to db table.
    • In the backend handler we could also have a status table method which can keep track of threads life and other system status information
    • Overhaul logging system to allow for using different log levels, switching log levels and having the logs possibly be handled by one thread, maybe not even the backend thread but possibly a different logging thread.
    • Update DB URL.
    • Cython
  • Database
    • Add LoadCellCommands Table
    • Remove Unused fields
  • Frontend
    • Finish Background Creation
    • Move Components in Place
    • Add Loadcell Calibration
    • Add Fluid Flow Animation
    • Add Authentication
    • Add Test State
    • Tie Ignitors
    • Verify Correct State on Refresh
    • Figure Out Deployment
  • Integration Test

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

82 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Rocket Control Unit

Python 3Raspberry PiGitGitGitGitGit

Table of Contents

Description

This is the repository for the rocket control unit. This software allows us to interface with our ground systems and rocket through an easy to use and functional dashboard.

The backend runs on a raspberry pi 5 and uses python. the raspberry pi is connected through UART and GPIO to the RCU-STM PCB.

The frontend is built on SvelteKit and Skeleton for UI components. Svelte is a compiled framework allowing for maximum performance.

To connect the backend to the frontend we use a self-hosted instance of PocketBase. PocketBase is a real-time database allowing for instant telemetry and commands. This also allows us to store all telemetry and analyze or process the data later on.

Technology Stack

Svelte

Svelte is a modern JavaScript framework designed to build user interfaces. Unlike traditional frameworks that shift much of the work to the browser, Svelte shifts this burden to the build step, resulting in highly optimized and performant applications. With its reactive approach, Svelte simplifies complex UI development by efficiently updating the DOM without unnecessary runtime overhead.

Python

Python is a versatile and widely-used programming language known for its readability and ease of use. Python's extensive libraries and frameworks, coupled with its straightforward syntax, make it great for our needs.

PocketBase

PocketBase is a real-time database designed for seamless data synchronization between applications. By providing a self-hosted instance, it offers us the flexibility to maintain control over out data while ensuring instant updates and efficient communication between backend and frontend. PocketBase is particularly useful for our application requiring real-time telemetry, command execution, and data storage.

Skeleton

Skeleton is a lightweight CSS framework that provides a simple and responsive foundation for web development. It offers a set of styles for common HTML elements, making it easy to create clean and consistent user interfaces. While not as feature-rich as some larger frameworks, Skeleton is ideal for our use case where a minimalistic approach to styling and responsiveness is desired.

Raspberry Pi

Raspberry Pi is a small, single-board computer running a version of Debian. The Raspberry Pi 5, in particular, is equipped with sufficient processing power and connectivity options. The Raspberry Pi serves as the backend infrastructure for the Rocket Control Unit in this project, connecting to the RCU and Flight PCBs.

Dependencies

You will need Python 3.11 or greater. You will need a PocketBase binary for your specific OS. Svelte dependencies are inside the package.json Python dependencies are inside the requrements.txt

Installation Guide

  • Clone repository

    git clone https://github.com/StudentOrganisationForAerospaceResearch/RocketControlUnit.git
    cd RocketControlUnit
  • Database Setup

    • Download PocketBase Binary

    • Move PocketBase Binary

      • Move the PocketBase binary to the database directory of the RocketControlUnit project. Replace path_to_pocketbase_binary with the actual path of the PocketBase binary on your system:

        mv path_to_pocketbase_binary RocketControlUnit/database/
    • Hosting Database

      cd RocketControlUnit/database/
      ./pocketbase serve

      Now enter the Admin UI URL into a browser and create a PocketBase account.

      You will now be able to access the PocketBase admin dashboard

  • Backend Setup

    cd RocketControlUnit/backend
    pip install -r requirements.txt
  • Frontend Setup

    cd RocketControlUnit/RocketControlUnitGUI/
    npm install

    To run an instance for development:

    npm run dev

    To build for production using the node adapter:

    npm i -D @sveltejs/adapter-node

    NOTE: You may have to run the above with --force or --legacy-peer-deps.

    npm run build
    npm ci --omit dev

    NOTE: You may have to run the above with --force or --legacy-peer-deps.

    node build

    By default, the server will accept connections on 0.0.0.0 using port 3000. These can be customised with the PORT and HOST environment variables:

    HOST=127.0.0.1 PORT=4000 node build

    To preview the app:

    npm run build
    npm run preview

    NOTE: For testing state transition locally you must uncomment this line in src/routes/+page.svelte

    nextState(nextStatePending);

TODO

  • General
    • Add secrets.ini for db URL
    • Need to add heartbeat
  • RaspberryPi
    • Add script to run backend on startup
  • Backend
    • Fix PBV4 Proto
    • Fix GPS showing NULL
    • Fix system state proto
    • Fix PBV3 telemetry issue
    • Fix launch rail load cell telemetry
    • Finish serial handler
    • Finish database handler
    • Add backend handler thread
    • Add loadcell calibration and tare
    • Look into overhauling the threading system
    • In the backend handler thread add an error handling or a push error to db table.
    • In the backend handler we could also have a status table method which can keep track of threads life and other system status information
    • Overhaul logging system to allow for using different log levels, switching log levels and having the logs possibly be handled by one thread, maybe not even the backend thread but possibly a different logging thread.
    • Update DB URL.
    • Cython
  • Database
    • Add LoadCellCommands Table
    • Remove Unused fields
  • Frontend
    • Finish Background Creation
    • Move Components in Place
    • Add Loadcell Calibration
    • Add Fluid Flow Animation
    • Add Authentication
    • Add Test State
    • Tie Ignitors
    • Verify Correct State on Refresh
    • Figure Out Deployment
  • Integration Test

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

82 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Rocket Control Unit

Python 3Raspberry PiGitGitGitGitGit

Table of Contents

Description

This is the repository for the rocket control unit. This software allows us to interface with our ground systems and rocket through an easy to use and functional dashboard.

The backend runs on a raspberry pi 5 and uses python. the raspberry pi is connected through UART and GPIO to the RCU-STM PCB.

The frontend is built on SvelteKit and Skeleton for UI components. Svelte is a compiled framework allowing for maximum performance.

To connect the backend to the frontend we use a self-hosted instance of PocketBase. PocketBase is a real-time database allowing for instant telemetry and commands. This also allows us to store all telemetry and analyze or process the data later on.

Technology Stack

Svelte

Svelte is a modern JavaScript framework designed to build user interfaces. Unlike traditional frameworks that shift much of the work to the browser, Svelte shifts this burden to the build step, resulting in highly optimized and performant applications. With its reactive approach, Svelte simplifies complex UI development by efficiently updating the DOM without unnecessary runtime overhead.

Python

Python is a versatile and widely-used programming language known for its readability and ease of use. Python's extensive libraries and frameworks, coupled with its straightforward syntax, make it great for our needs.

PocketBase

PocketBase is a real-time database designed for seamless data synchronization between applications. By providing a self-hosted instance, it offers us the flexibility to maintain control over out data while ensuring instant updates and efficient communication between backend and frontend. PocketBase is particularly useful for our application requiring real-time telemetry, command execution, and data storage.

Skeleton

Skeleton is a lightweight CSS framework that provides a simple and responsive foundation for web development. It offers a set of styles for common HTML elements, making it easy to create clean and consistent user interfaces. While not as feature-rich as some larger frameworks, Skeleton is ideal for our use case where a minimalistic approach to styling and responsiveness is desired.

Raspberry Pi

Raspberry Pi is a small, single-board computer running a version of Debian. The Raspberry Pi 5, in particular, is equipped with sufficient processing power and connectivity options. The Raspberry Pi serves as the backend infrastructure for the Rocket Control Unit in this project, connecting to the RCU and Flight PCBs.

Dependencies

You will need Python 3.11 or greater. You will need a PocketBase binary for your specific OS. Svelte dependencies are inside the package.json Python dependencies are inside the requrements.txt

Installation Guide

  • Clone repository

    git clone https://github.com/StudentOrganisationForAerospaceResearch/RocketControlUnit.git
    cd RocketControlUnit
  • Database Setup

    • Download PocketBase Binary

    • Move PocketBase Binary

      • Move the PocketBase binary to the database directory of the RocketControlUnit project. Replace path_to_pocketbase_binary with the actual path of the PocketBase binary on your system:

        mv path_to_pocketbase_binary RocketControlUnit/database/
    • Hosting Database

      cd RocketControlUnit/database/
      ./pocketbase serve

      Now enter the Admin UI URL into a browser and create a PocketBase account.

      You will now be able to access the PocketBase admin dashboard

  • Backend Setup

    cd RocketControlUnit/backend
    pip install -r requirements.txt
  • Frontend Setup

    cd RocketControlUnit/RocketControlUnitGUI/
    npm install

    To run an instance for development:

    npm run dev

    To build for production using the node adapter:

    npm i -D @sveltejs/adapter-node

    NOTE: You may have to run the above with --force or --legacy-peer-deps.

    npm run build
    npm ci --omit dev

    NOTE: You may have to run the above with --force or --legacy-peer-deps.

    node build

    By default, the server will accept connections on 0.0.0.0 using port 3000. These can be customised with the PORT and HOST environment variables:

    HOST=127.0.0.1 PORT=4000 node build

    To preview the app:

    npm run build
    npm run preview

    NOTE: For testing state transition locally you must uncomment this line in src/routes/+page.svelte

    nextState(nextStatePending);

TODO

  • General
    • Add secrets.ini for db URL
    • Need to add heartbeat
  • RaspberryPi
    • Add script to run backend on startup
  • Backend
    • Fix PBV4 Proto
    • Fix GPS showing NULL
    • Fix system state proto
    • Fix PBV3 telemetry issue
    • Fix launch rail load cell telemetry
    • Finish serial handler
    • Finish database handler
    • Add backend handler thread
    • Add loadcell calibration and tare
    • Look into overhauling the threading system
    • In the backend handler thread add an error handling or a push error to db table.
    • In the backend handler we could also have a status table method which can keep track of threads life and other system status information
    • Overhaul logging system to allow for using different log levels, switching log levels and having the logs possibly be handled by one thread, maybe not even the backend thread but possibly a different logging thread.
    • Update DB URL.
    • Cython
  • Database
    • Add LoadCellCommands Table
    • Remove Unused fields
  • Frontend
    • Finish Background Creation
    • Move Components in Place
    • Add Loadcell Calibration
    • Add Fluid Flow Animation
    • Add Authentication
    • Add Test State
    • Tie Ignitors
    • Verify Correct State on Refresh
    • Figure Out Deployment
  • Integration Test

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages