<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://aurorarobotics.sssn.us/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Acmattson3</id>
	<title>Aurora Robotics - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://aurorarobotics.sssn.us/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Acmattson3"/>
	<link rel="alternate" type="text/html" href="https://aurorarobotics.sssn.us/index.php/Special:Contributions/Acmattson3"/>
	<updated>2026-04-25T22:31:24Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://aurorarobotics.sssn.us/index.php?title=Main_Page&amp;diff=825</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://aurorarobotics.sssn.us/index.php?title=Main_Page&amp;diff=825"/>
		<updated>2026-02-14T20:38:13Z</updated>

		<summary type="html">&lt;p&gt;Acmattson3: Added location and meeting time.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Original Aurora Robotics Lab Logo.png|alt=The original Aurora Robotics Lab logo, made in Paint.|thumb|The original Aurora Robotics Lab logo, made in Inkscape.]]&lt;br /&gt;
&lt;br /&gt;
== Welcome to the Aurora Robotics Wiki ==&lt;br /&gt;
Welcome to the official wiki for &#039;&#039;&#039;Aurora Robotics&#039;&#039;&#039; at the University of Alaska Fairbanks! Our team focuses on the research, design, and development of autonomous robotics platforms (like [[L.A.M.P: Lunar, Autonomous, Modular Platform|LAMP]]) for extreme environments, particularly the Moon.&lt;br /&gt;
&lt;br /&gt;
=== About Us ===&lt;br /&gt;
The Aurora Robotics Team is a multidisciplinary group of students and faculty working on various projects aimed at advancing robotics technology for lunar operations. Our team collaborates with NASA and other partners through challenges and grants to explore solutions for challenges in lunar mining, habitat construction, and autonomous navigation.&lt;br /&gt;
&lt;br /&gt;
We are located in the University of Alaska Fairbanks&#039; engineering building &#039;&#039;&#039;(ELIF/JUB) room 118&#039;&#039;&#039;. We meet every Thursday (usually even holidays/breaks!) at 1:00pm.&lt;br /&gt;
&lt;br /&gt;
=== Current Projects ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[[L.A.M.P: Lunar, Autonomous, Modular Platform|LAMP (Lunar, Autonomous, Modular, Platform)]]&#039;&#039;&#039;: A highly modular robotic platform designed to serve as the hands of the [[LUMIN]] control system. [[L.A.M.P: Lunar, Autonomous, Modular Platform|LAMP]] is being developed to be capable of executing a wide range of tasks on the lunar surface.&lt;br /&gt;
* &#039;&#039;&#039;[[LUMIN|LUMIN (LUnar Mining and Infrastructure Network)]]&#039;&#039;&#039;: The overarching control software for all lunar operations. [[LUMIN]] acts as the central command system, using [[L.A.M.P: Lunar, Autonomous, Modular Platform|LAMP]] robots to create a functional operational network and managing tasks ranging from autonomous construction to resource distribution.&lt;br /&gt;
* &#039;&#039;&#039;[[LUMINSim]]&#039;&#039;&#039;: A lunar robotic simulator for [[LUMIN]] built in [https://godotengine.org/releases/4.4/ Godot 4.4] used to develop [[LUMIN]] software and test [[L.A.M.P: Lunar, Autonomous, Modular Platform|LAMP]] robot designs.&lt;br /&gt;
&lt;br /&gt;
=== Previous Projects ===&lt;br /&gt;
Check out [[Project_Archives|the project archives page]] to see previous projects Aurora Robotics has done.&lt;br /&gt;
&lt;br /&gt;
=== Our Mission ===&lt;br /&gt;
Our mission is to develop largely open-source robotics solutions that address lunar challenges. By building autonomous systems and control networks ([[L.A.M.P: Lunar, Autonomous, Modular Platform|LAMP]] and [[LUMIN]]), we aim to contribute to the advancement of human presence on the Moon and beyond, and even in remote places here on Earth. &lt;br /&gt;
&lt;br /&gt;
==== Long Term, our vision is: ====&lt;br /&gt;
&lt;br /&gt;
# Drop off a few [[L.A.M.P: Lunar, Autonomous, Modular Platform|LAMP]] robots and some equipment in a remote location (on Earth, the Moon, or beyond).&lt;br /&gt;
# Autonomously (through [[LUMIN]]) explore and begin developing basic infrastructure (cleared paths, basic equipment/structure setup).&lt;br /&gt;
# Begin mining, refining, and preparing resources for expansion.&lt;br /&gt;
# Build human-ready structures from the ground up.&lt;br /&gt;
&lt;br /&gt;
Due to the simplicity and modularity of [[L.A.M.P: Lunar, Autonomous, Modular Platform|LAMP]], our vision includes a point where a couple LAMP robots, with assisting equipment, can develop more LAMP robots, equipment, and infrastructure autonomously, potentially allowing us to remotely colonize entire planets, then their moons, then their star systems and beyond, just by sending a couple robots that way. Then, the LUMIN system can coordinate sending resources back to Earth or inhabited planets (from hard-to-inhabit locations), or humans can move right in (to more habitable locations). &lt;br /&gt;
&lt;br /&gt;
=== Get Involved ===&lt;br /&gt;
We welcome students from all backgrounds to join the Aurora Robotics Team. Regardless of your experience in robotics, programming, mechanical design, if you have an interest in anything you see here, we can find a place for you on our team. Reach out to learn more about how you can get involved in our projects!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See more at [https://auroraroboticslab.com auroraroboticslab.com]&lt;/div&gt;</summary>
		<author><name>Acmattson3</name></author>
	</entry>
	<entry>
		<id>https://aurorarobotics.sssn.us/index.php?title=LUMIN&amp;diff=824</id>
		<title>LUMIN</title>
		<link rel="alternate" type="text/html" href="https://aurorarobotics.sssn.us/index.php?title=LUMIN&amp;diff=824"/>
		<updated>2025-09-06T21:28:59Z</updated>

		<summary type="html">&lt;p&gt;Acmattson3: Constricted thesis scope&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;LUMIN (LUnar Mining and Infrastructure Network)&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;LUMIN&amp;lt;/strong&amp;gt; is a theoretical overarching control software designed to manage and coordinate robotic lunar operations. It acts as the central hub for autonomous and teleoperated systems, coordinating safe and efficient construction, mining, and transport across the lunar surface.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Overview&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The LUMIN control system works with various robotic platforms, including the [[L.A.M.P: Lunar, Autonomous, Modular Platform|Lunar, Autonomous, Modular Platform (LAMP)]] and [[Excahauler]]. The goal of LUMIN is flexibility, which is necessary for the incorporation of new tools, modules, and tasks as lunar infrastructure grows, especially in a multi-organizational context.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;[[LUMINSim]] is an open-source simulation of the LUMIN system, though many proposed LUMIN features are still in the process of development.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== [[User:Acmattson3|Andrew Mattson&#039;s]] Thesis ==&lt;br /&gt;
LUMIN, developed in [[LUMINSim]], will be the core of [[User:Acmattson3|Andrew Mattson&#039;s]] master&#039;s thesis for the Summer 2025, Fall 2025, and Spring 2026 semesters at the [https://www.uaf.edu/uaf/ University of Alaska Fairbanks]. As of July 7th, 2025, Andrew&#039;s thesis is titled &#039;&#039;&#039;&#039;&#039;Multi-Organizational Robot Coordination and Communication via Realistic Lunar Surface Simulation&#039;&#039;&#039;,&#039;&#039; and he will attempt to answer the question: &#039;&#039;Can autonomous robotic systems effectively coordinate tasks, maintain communication, and manage operational safety zones using [https://www.nasa.gov/humans-in-space/lunanet-empowering-artemis-with-communications-and-navigation-interoperability/ LunaNet] on the lunar surface when operating under constraints such as limited line-of-sight (LOS), signal degradation, and delays, while in a multi-organizational context?&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
His project aims to:&lt;br /&gt;
&lt;br /&gt;
* Extend the [[LUMINSim|GodotRobot (LUMINSim) Lunar Mining Simulator]] to simulate realistic communication challenges including LOS, signal degradation, and delayed transmission.&lt;br /&gt;
* Evaluate the effectiveness of [https://www.nasa.gov/humans-in-space/lunanet-empowering-artemis-with-communications-and-navigation-interoperability/ LunaNet] in realistic lunar conditions.&lt;br /&gt;
* Implement dynamic safety zones to test [https://www.nasa.gov/artemis-accords/ Artemis Accords]-inspired coordination constraints.&lt;br /&gt;
* Perform incremental testing, scaling from basic two-node scenarios to complex multi-robot networks involving satellites, towers, and robots.&lt;br /&gt;
&lt;br /&gt;
== Core Functions ==&lt;br /&gt;
&amp;lt;p&amp;gt;LUMIN&#039;s primary functions will include:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Coordination:&amp;lt;/strong&amp;gt; Managing operations across the lunar surface, including but not limited to robotic platforms like [[L.A.M.P: Lunar, Autonomous, Modular Platform|LAMP]] and [[Excahauler]], to carry out construction, mining, transport, resource distribution, and maintenance tasks safely and efficiently in accordance with the [https://www.nasa.gov/artemis-accords/ Artemis Accords].&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Data Collection and Analysis:&amp;lt;/strong&amp;gt; Gathering information while working on the lunar environment to improve decision-making and research.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Communication:&amp;lt;/strong&amp;gt; Providing a reliable communication network ([https://www.nasa.gov/humans-in-space/lunanet-empowering-artemis-with-communications-and-navigation-interoperability/ LunaNet]) for all lunar operations.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Future Developments&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;As lunar operations expand, LUMIN&#039;s feature set will continue to grow, especially as [[User:Acmattson3|Andrew Mattson]] completes his master&#039;s thesis.&amp;lt;/p&amp;gt;&lt;/div&gt;</summary>
		<author><name>Acmattson3</name></author>
	</entry>
	<entry>
		<id>https://aurorarobotics.sssn.us/index.php?title=L.A.M.P:_Lunar,_Autonomous,_Modular_Platform&amp;diff=823</id>
		<title>L.A.M.P: Lunar, Autonomous, Modular Platform</title>
		<link rel="alternate" type="text/html" href="https://aurorarobotics.sssn.us/index.php?title=L.A.M.P:_Lunar,_Autonomous,_Modular_Platform&amp;diff=823"/>
		<updated>2025-08-02T01:22:06Z</updated>

		<summary type="html">&lt;p&gt;Acmattson3: Added reference to RobotMoose YouTube video.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;LAMP is the hands of the [[LUMIN]] control system. It is a highly modular robotic platform designed to enforce safety protocols, develop lunar infrastructure, and generally do what [[LUMIN]] requires. Through coordination with [[LUMIN]], LAMPs in the field will work together to achieve tasks that would be extremely difficult or impossible for a single robot to accomplish.&lt;br /&gt;
&lt;br /&gt;
For more information and visuals, watch the [https://www.youtube.com/watch?v=GwJjh-E93ZA&amp;amp;ab_channel=RobotMoose RobotMoose YouTube video] about LAMP and [[LAMP v1|Astra]] (A.K.A LAMP v1).&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
LAMP&#039;s modularity will allow it to serve a wide range of needs on the Moon. LAMP robots might: &lt;br /&gt;
&lt;br /&gt;
* Enforce general safety (like patrolling safety zone borders, decommissioning or disabling rogue agents, or developing and maintaining reliable infrastructure)&lt;br /&gt;
* Collect data (for use in research, decision-making processes, and policy refinement)&lt;br /&gt;
* Distribute resources (by hauling tools, materials, or power across the lunar surface)&lt;br /&gt;
* Act as communication relays (before communication infrastructure is in place and during its development, or in especially remote locations)&lt;br /&gt;
&lt;br /&gt;
LAMP&#039;s modularity allows it to complete a large variety of tasks. For example, materials transport may require a flatbed or dump bed, communications infrastructure development may need a specialized tool-head for trenching and a rear payload for spools of wire or tubing.&lt;br /&gt;
&lt;br /&gt;
=== Previous LAMP candidates: ===&lt;br /&gt;
* [[Excahauler]] (created before the LAMP concept)&lt;br /&gt;
* [[LAMP v1]] (A.K.A. Astra)&lt;br /&gt;
&lt;br /&gt;
== Design Philosophy ==&lt;br /&gt;
&amp;lt;p&amp;gt;LAMP&#039;s design revolves around its versatility for ranges of tasks on the Moon. Specialized tools for LAMP should always be built as attachments that can be easily interchanged to maintain said versatility. Any permanent additions to the main frame should be carefully designed to function across multiple purposes.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To meet the demands of lunar infrastructure, LAMP must maintain simplicity without compromising its abilities in order to: &lt;br /&gt;
&lt;br /&gt;
# Keep manufacturing costs down.&lt;br /&gt;
# Encourage simpler parts, which are ultimately easier to make durable and repair.&lt;br /&gt;
# Encourage extension through the system&#039;s modularity.__FORCETOC__&lt;/div&gt;</summary>
		<author><name>Acmattson3</name></author>
	</entry>
	<entry>
		<id>https://aurorarobotics.sssn.us/index.php?title=LUMINSim_Documentation&amp;diff=822</id>
		<title>LUMINSim Documentation</title>
		<link rel="alternate" type="text/html" href="https://aurorarobotics.sssn.us/index.php?title=LUMINSim_Documentation&amp;diff=822"/>
		<updated>2025-08-02T01:18:53Z</updated>

		<summary type="html">&lt;p&gt;Acmattson3: Added reference to RobotMoose YouTube video.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= LUMINSim Documentation =&lt;br /&gt;
This is an ongoing page as I ([[User:Acmattson3|Andrew Mattson]]) document [[LUMINSim]]&#039;s current systems. This page is a &#039;&#039;major&#039;&#039; work in progress; feel free to add to it!&lt;br /&gt;
&lt;br /&gt;
Going forward, I hope to add in-depth descriptions of the inner workings of each major system, including:&lt;br /&gt;
* Power&lt;br /&gt;
* Tools and tool swapping&lt;br /&gt;
* Terrain&lt;br /&gt;
* Multiplayer&lt;br /&gt;
* Each user-controlled scene (robots and astronaut)&lt;br /&gt;
* The UI (multiplayer menu, settings menu, keybind menu)&lt;br /&gt;
* Each (largely) independent scene and corresponding system(s) (brick maker, dirt spawner, tool spawner, etc.)&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
To learn how to get started with development yourself, [https://github.com/AuroraRoboticsLab/GodotRobot/blob/main/README.md visit the repository&#039;s README] and follow the steps there to get the project set up.&lt;br /&gt;
&lt;br /&gt;
== Known Issues ==&lt;br /&gt;
The following are known issues that continuously plague the simulator.&lt;br /&gt;
&lt;br /&gt;
=== Major Issues ===&lt;br /&gt;
Major issues are detrimental to fundamental functionalities of the simulator. Generally they have no known fix without major redesign of the system itself and adjacent systems.&lt;br /&gt;
&lt;br /&gt;
* With no consistency or known cause, some BetterHingeJoint3D (see [[LUMINSim Documentation#Classes|Classes]]) joints are floppy noodles. If you create a joint and it works at first, it will continue to work, but if it is a floppy noodle at first, it will always be a floppy noodle. Deleting and re-instantiating the joint scene does not seem to work. &lt;br /&gt;
** A potential fix is to completely redo BetterHingeJoint3D to work directly with transforms, but this has the side effect of making things &#039;&#039;much&#039;&#039; easier to break the sim if there isn&#039;t some sort of implementation of forces.&lt;br /&gt;
&lt;br /&gt;
=== Minor Issues ===&lt;br /&gt;
Minor issues are just annoying. Generally they have workarounds or can simply be ignored. &lt;br /&gt;
&lt;br /&gt;
* The multiplayer synchronizers throw errors when connecting/disconnecting. No impact on multiplayer functionalities has been observed.&lt;br /&gt;
&lt;br /&gt;
== Repository Structure ==&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;src/&amp;lt;/code&amp;gt;&#039;&#039;&#039; – C++ GDExtension code for terrain and registration. Likely to be deprecated. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Godot project containing levels, assets, and GDScript systems.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;export_presets.cfg&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Information for Godot on how to export the project into platform-native forms. Created automatically by the Godot export menu.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;game_manager.gd&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Handles the majority of the multiplayer logic, especially the sending of data between the clients and the server. See [[LUMINSim Documentation#Networking and Multiplayer|Networking and Multiplayer]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;project.godot&amp;lt;/code&amp;gt;&#039;&#039;&#039; – The main project file. Contains general project configurations and properties. This is the primary reference point for the Godot Engine when developing this project.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/astra&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the drivable [[LUMINSim Documentation#Astra Robot|Astra]] robot.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/astronaut&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the in-game, procedurally-animated astronaut character. See [[LUMINSim Documentation#Astronaut Character|Astronaut Character]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/bin&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the compiled GDExtension binaries. Likely to be deprecated. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/components&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains components or component-like scenes and related files. See [[LUMINSim Documentation#Classes|Classes]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/environment&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files for the skybox (i.e., the stars in the sky).&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/excahauler&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the drivable [[LUMINSim Documentation#Excahauler Robot|Excahauler]] robot.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/graphics&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains many images for icons and textures, especially for the user interface. See [[LUMINSim Documentation#User Interface|User Interface]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/landers&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains directories for different lunar landers. Landers are currently just static models.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/levels&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains the main playable (i.e., non-UI) scenes and related files. See [[LUMINSim Documentation#Levels|Levels]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/objects&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains non-static (i.e., movable RigidBody3D) objects. See [[LUMINSim Documentation#Objects|Objects]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/static_objects&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains static (i.e., unmovable StaticBody3D) objects and their related code. See [[LUMINSim Documentation#Static Objects|Static Objects]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/terrain&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Scenes and files pertaining to the dynamic (i.e., mineable) terrain. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/terrain_fixed&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Scenes and files pertaining to the static (i.e., unchanging) terrain. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/util&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Scenes and files pertaining to UI as well as other useful scripts. See [[LUMINSim Documentation#User Interface|User Interface]].&lt;br /&gt;
In-depth repository structure documentation (brief descriptions on a per-scene basis) may be created here by anyone.&lt;br /&gt;
&lt;br /&gt;
== Classes ==&lt;br /&gt;
The following scripts (ordered alphabetically, ignoring case conventions) register custom nodes with the keyword &amp;lt;code&amp;gt;class_name&amp;lt;/code&amp;gt;:&lt;br /&gt;
* &amp;lt;code&amp;gt;autonomy_component.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;AutonomyComponent&#039;&#039;&#039; – simple navigation helper for NPC robots. See [[LUMINSim Documentation#Autonomy System|Autonomy System]].&lt;br /&gt;
* &amp;lt;code&amp;gt;better_hinge_joint_3d.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;BetterHingeJoint3D&#039;&#039;&#039; – wrapper over &amp;lt;code&amp;gt;Generic6DOFJoint3D&amp;lt;/code&amp;gt; for motorized joints that better simulate joints driven by hydraulics or linear actuators.&lt;br /&gt;
* &amp;lt;code&amp;gt;bucket_attachment.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;Bucket&#039;&#039;&#039; – digs into terrain to collect dirtballs. See [[LUMINSim Documentation#Tools and Attachments|Tools and Attachments]].&lt;br /&gt;
* &amp;lt;code&amp;gt;charge_component.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;ChargeComponent&#039;&#039;&#039; – tracks battery state and handles charging/discharging. See [[LUMINSim Documentation#Power System|Power System]].&lt;br /&gt;
* &amp;lt;code&amp;gt;connector_component.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;Connector&#039;&#039;&#039; – area detector system useful in many contexts, including tool couplers and charge stations.&lt;br /&gt;
* &amp;lt;code&amp;gt;dem_loader.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;DemLoader&#039;&#039;&#039; – loads fixed DEM heightmaps and extends &amp;lt;code&amp;gt;TerrainStatic256&amp;lt;/code&amp;gt;, which is declared via GDExtensions. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
* &amp;lt;code&amp;gt;forks.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;Forks&#039;&#039;&#039; – tool attachment for moving objects. See [[LUMINSim Documentation#Tools and Attachments|Tools and Attachments]].&lt;br /&gt;
* &amp;lt;code&amp;gt;saw_blade_attachment.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;SawBlade&#039;&#039;&#039; – spinning blade for cutting objects. See [[LUMINSim Documentation#Tools and Attachments|Tools and Attachments]].&lt;br /&gt;
* &amp;lt;code&amp;gt;tool_attachment.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;ToolAttachment&#039;&#039;&#039; – base class for all detachable tools. See [[LUMINSim Documentation#Tools and Attachments|Tools and Attachments]].&lt;br /&gt;
* &amp;lt;code&amp;gt;ToolCouplerComponent.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;ToolCoupler&#039;&#039;&#039; – manages attaching tools to a robot via physics joints. See [[LUMINSim Documentation#Tools and Attachments|Tools and Attachments]].&lt;br /&gt;
== Autonomy System ==&lt;br /&gt;
The current autonomous driving logic is implemented by the &amp;lt;code&amp;gt;AutonomyComponent&amp;lt;/code&amp;gt; script. Every robot scene instantiates this node under its root &amp;lt;code&amp;gt;VehicleBody3D&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Currently, this is how it works:&lt;br /&gt;
&lt;br /&gt;
* A child &amp;lt;code&amp;gt;NavigationAgent3D&amp;lt;/code&amp;gt; computes a path when &amp;lt;code&amp;gt;pathfind_to(target_pos)&amp;lt;/code&amp;gt; is called.&lt;br /&gt;
&lt;br /&gt;
* During &amp;lt;code&amp;gt;_physics_process()&amp;lt;/code&amp;gt; the component steers the robot toward the next path point using the &amp;lt;code&amp;gt;get_drive()&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;get_steer()&amp;lt;/code&amp;gt; helpers.&lt;br /&gt;
&lt;br /&gt;
* The helpers are polled by &amp;lt;code&amp;gt;astra_3d.gd&amp;lt;/code&amp;gt; so the component effectively overrides manual controls when active.&lt;br /&gt;
&lt;br /&gt;
* If progress stalls the script nudges the body upward and forward to get free. Once the destination is reached the &amp;lt;code&amp;gt;have_arrived&amp;lt;/code&amp;gt; flag is set.&lt;br /&gt;
&lt;br /&gt;
=== Proposed External API ===&lt;br /&gt;
To enable players to program autonomy from outside the engine, a new &amp;lt;code&amp;gt;AutonomyServer&amp;lt;/code&amp;gt; node could expose a local API via WebSocket, HTTP, or MQTT. The simulator would send each robot&#039;s state to this server, including data like true position, velocity, tool data, and battery level data, and eventually realistic simulated sensor data. An external script could connect to the API and issue commands such as drive, steer, actuate arm, and so on.&lt;br /&gt;
&lt;br /&gt;
This approach decouples vehicle logic from the engine so users can iterate on autonomy in &#039;&#039;&#039;any language&#039;&#039;&#039; without recompiling the project. The &amp;lt;code&amp;gt;AutonomyServer&amp;lt;/code&amp;gt; would relay commands to the relevant nodes (mirroring the current &amp;lt;code&amp;gt;get_drive()&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;get_steer()&amp;lt;/code&amp;gt; methods) while still supporting multiplayer authority checks via &amp;lt;code&amp;gt;GameManager&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Terrain System (C++) ==&lt;br /&gt;
C++ based GDExtensions currently provide the terrain implementation and will be replaced in the future with a more developer-friendly system.&lt;br /&gt;
&lt;br /&gt;
=== Terrain Nodes ===&lt;br /&gt;
The terrain nodes let you represent static or dynamic terrain. They can be nested in other Node3Ds or offset around, but &#039;&#039;&#039;should not be scaled.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Static Terrain ====&lt;br /&gt;
&amp;lt;code&amp;gt;TerrainStatic256&amp;lt;/code&amp;gt; loads heightmaps and generates render and collision meshes. It stores a 256x256 heightmap, normally loaded from an EXR float height image scaled to -10000 meters (black) to +10000 meters (white).&lt;br /&gt;
&lt;br /&gt;
* `fill_from_image(dem:Image, pixel_spacing:float)` takes an image and pixel spacing in meters to create the height map.&lt;br /&gt;
* `add_mesh(shader:Shader,casts_shadows:bool)` creates a mesh for rendering, using the specified shader.&lt;br /&gt;
* `add_static_collider()` creates a StaticBody3D with a CollisionShape3D of our heightmap, so physics interacts with the terrain.&lt;br /&gt;
&lt;br /&gt;
==== Dynamic Terrain ====&lt;br /&gt;
&amp;lt;code&amp;gt;TerrainSim&amp;lt;/code&amp;gt; extends &amp;lt;code&amp;gt;TerrainStatic256&amp;lt;/code&amp;gt; to simulate excavation, landslides, and merging dirtballs back into the heightmap. It stores a dynamic mineable 256x256 heightmap and inherits from &amp;lt;code&amp;gt;TerrainStatic256&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;excavate_point(world:Vector3, dirtball_offset:Vector3, spawn_vel:Vector3)&amp;lt;/code&amp;gt; to excavate terrain into dirtballs. Any locations needing dirtablls will emit the signal `spawn_dirtball` with a spawn position and velocity as Vector3.&lt;br /&gt;
* &amp;lt;code&amp;gt;try_merge(dirtball:Node3D)&amp;lt;/code&amp;gt; to merge dirtballs back down onto the terrain.&lt;br /&gt;
&lt;br /&gt;
=== Terrain Tools ===&lt;br /&gt;
Scripts such as &amp;lt;code&amp;gt;dirt_spawner.gd&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;dirtball.gd&amp;lt;/code&amp;gt; spawn and merge mobile particles with the dynamic terrain.&lt;br /&gt;
&lt;br /&gt;
== Power System ==&lt;br /&gt;
Movable vehicles include a &#039;&#039;&#039;ChargeComponent&#039;&#039;&#039; (see [[LUMINSim Documentation#Classes|Classes]]) that stores amp-hours and battery percentage. Robots consume charge while driving or actuating, and static objects like charge stations or solar panels provide power when connected.&lt;br /&gt;
&lt;br /&gt;
== Tools and Attachments ==&lt;br /&gt;
All interchangeable implements derive from &#039;&#039;&#039;ToolAttachment&#039;&#039;&#039;. Robot arms have &#039;&#039;&#039;ToolCoupler&#039;&#039;&#039; nodes that detect nearby &#039;&#039;&#039;Connector&#039;&#039;&#039; areas and create physics joints to attach or detach tools. Available tools include the Bucket, Forks, and SawBlade (see [[LUMINSim Documentation#Excavation Tools|Excavation Tools]] under [[LUMINSim Documentation#Robot Systems|Robot Systems]]). &amp;lt;code&amp;gt;tool_spawner.gd&amp;lt;/code&amp;gt; respawns tools removed from its bays. To find where each of these classes are declares, see [[LUMINSim Documentation#Classes|Classes]]. &lt;br /&gt;
&lt;br /&gt;
== Robot Systems ==&lt;br /&gt;
=== [[Astra]] Robot ===&lt;br /&gt;
The main scene is &amp;lt;code&amp;gt;astra_3d.tscn&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;astra_3d.gd&amp;lt;/code&amp;gt; handles driving, energy usage, and tool attachment. It works with &amp;lt;code&amp;gt;astra_arm_3d.gd&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;astra_hopper_3d.gd&amp;lt;/code&amp;gt; and their associated &amp;lt;code&amp;gt;.tscn&amp;lt;/code&amp;gt; files for the robot&#039;s arm and hopper.&lt;br /&gt;
&lt;br /&gt;
For more information and visuals, watch [https://www.youtube.com/watch?v=GwJjh-E93ZA&amp;amp;ab_channel=RobotMoose the RobotMoose YouTube video about Astra].&lt;br /&gt;
&lt;br /&gt;
=== Astronaut Character ===&lt;br /&gt;
&amp;lt;code&amp;gt;astronaut_character_3d.gd&amp;lt;/code&amp;gt; provides walking and camera control for a procedurally animated astronaut. We hope to implement VR for the astronaut in the future.&lt;br /&gt;
&lt;br /&gt;
=== Excavation Tools ===&lt;br /&gt;
Attachments such as the bucket, forks, and saw blade extend &#039;&#039;&#039;ToolAttachment&#039;&#039;&#039; (see [[LUMINSim Documentation#Classes|Classes]]) for various tasks. The files for these attachments are currently in [[LUMINSim Documentation#Astra Robot|Astra]]&#039;s directory, but this is subject to change.&lt;br /&gt;
&lt;br /&gt;
=== [[Excahauler]] Robot ===&lt;br /&gt;
The main scene is &amp;lt;code&amp;gt;excahauler_3d.tscn&amp;lt;/code&amp;gt;. Unlike [[LUMINSim Documentation#Astra Robot|Astra&#039;s implementation]], all functionalities are within a &#039;&#039;single&#039;&#039; &amp;lt;code&amp;gt;.tscn&amp;lt;/code&amp;gt; file and a few associated &amp;lt;code&amp;gt;.gd&amp;lt;/code&amp;gt; files. Currently, only Excahauler&#039;s main arm (boom, stick, and tilt) is implemented, as trying to set up the scoop (fork and dump) joints in an identical way results in uncontrollable, noodle-like joints (See [[LUMINSim Documentation#Major Issues|Major Issues]]).&lt;br /&gt;
&lt;br /&gt;
== Objects ==&lt;br /&gt;
Movable, physics-enabled props used primarily for construction.&lt;br /&gt;
&lt;br /&gt;
* Madsen Cinder Block – a simple RigidBody3D brick spawned by [[LUMINSim Documentation#Static Objects|brick_maker.gd]]. Designed by [[User:Frozenstiff|Elliott Madsen]].&lt;br /&gt;
&lt;br /&gt;
* Truss Modules – sets of 1m and 3m segments with collision shapes for stacking into arches, garages or other structures. These are modeled after [[NASA X-Hab 2025: Modular Robotic Construction#The L-Truss System|the L-Truss design seen in our 2025 X-Hab project]].&lt;br /&gt;
&lt;br /&gt;
== Static Objects ==&lt;br /&gt;
Charge stations and solar panels (see [[LUMINSim Documentation#Power System|Power System]]), tool spawners, and other generally useful environment pieces. These scenes generally work independently of other scenes, and include:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;brick_maker.gd&amp;lt;/code&amp;gt; – creates bricks when filled with loose dirt.&lt;br /&gt;
* &amp;lt;code&amp;gt;tool_spawner.gd&amp;lt;/code&amp;gt; – keeps bays stocked by respawning assigned attachments when they are taken.&lt;br /&gt;
* &amp;lt;code&amp;gt;dirt_spawner.gd&amp;lt;/code&amp;gt; – continuously emits dirtballs for terrain testing, currently toggle-able by pressing &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Building ==&lt;br /&gt;
Currently there is no built-in building system (see [[LUMINSim Documentation#2.1. Define challenge types (e.g., unloading, excavation, structure building)|Future Work, Challenge Framework]]), but [[User:Lawlor|Dr. Lawlor]] has begun work on &#039;&#039;&#039;[https://github.com/auroraroboticslab/buildot Buildot]&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Working from Buildot, my ([[User:Acmattson3|Andrew Mattson]]) idea is to have: &lt;br /&gt;
&lt;br /&gt;
* A separate builder interface (Buildot) in the simulator.&lt;br /&gt;
* Users would have a way to select buildings made in Buildot and place them down as a holographic blueprint. &lt;br /&gt;
** Once the user confirms where they want to place the building, the holographic disappears and the user is prompted to place components in certain locations or excavate areas. &lt;br /&gt;
** For example, the [[NASA X-Hab 2025: Modular Robotic Construction|X-Hab 2025]] arch would have the user place all of the anchors, then go to the truss segments and so on. We could even make it so that, to build the arch, the user must have a robot designated for holding up the structure and, as the build process progresses, it can lift the structure as needed. &lt;br /&gt;
&lt;br /&gt;
== Networking and Multiplayer ==&lt;br /&gt;
&amp;lt;code&amp;gt;game_manager.gd&amp;lt;/code&amp;gt; manages synchronized player/object data and signals for network updates. &amp;lt;code&amp;gt;multiplayer_menu.gd&amp;lt;/code&amp;gt; lets players host or join games, start sessions, and handle disconnects.&lt;br /&gt;
&lt;br /&gt;
== User Interface ==&lt;br /&gt;
The &amp;lt;code&amp;gt;ui.gd&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;joystick.gd&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;keybinds_menu.gd&amp;lt;/code&amp;gt; scripts provide HUD elements, customizable input bindings, and on-screen controls for mobile users.&lt;br /&gt;
&lt;br /&gt;
=== Command Line Interface ===&lt;br /&gt;
The user interface includes a command line interface (opened by pressing &amp;lt;code&amp;gt;f1&amp;lt;/code&amp;gt; if you are in a local game or are the host) with the following commands:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;goto X Y Z&amp;lt;/code&amp;gt; – Pathfind to the entered coordinates. &#039;&#039;&#039;Not working&#039;&#039;&#039; until a new autonomy system is implemented.&lt;br /&gt;
* &amp;lt;code&amp;gt;respawn&amp;lt;/code&amp;gt; – Teleport back to the starting position.&lt;br /&gt;
* &amp;lt;code&amp;gt;move X Y Z&amp;lt;/code&amp;gt; – Teleport to the given coordinates &#039;&#039;relative&#039;&#039; &#039;&#039;to your current position&#039;&#039;.&lt;br /&gt;
* &amp;lt;code&amp;gt;grav X&amp;lt;/code&amp;gt; – Change the gravity to &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt; m/s&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;tp X Y Z&amp;lt;/code&amp;gt; – Teleport to the given coordinates &#039;&#039;relative to the world origin.&#039;&#039;&lt;br /&gt;
* &amp;lt;code&amp;gt;freecam&amp;lt;/code&amp;gt; – Enter a freecam state.&lt;br /&gt;
* &amp;lt;code&amp;gt;simrate X&amp;lt;/code&amp;gt; – Change the speed of the simulation to &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt; times normal speed.&lt;br /&gt;
* &amp;lt;code&amp;gt;pause&amp;lt;/code&amp;gt; – Pause the simulation. Useful for capturing cinematics (freecam functionality still works, for example).&lt;br /&gt;
&lt;br /&gt;
== Cameras and Controls ==&lt;br /&gt;
&amp;lt;code&amp;gt;movable_camera_3d.tscn&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;freecam.tscn&amp;lt;/code&amp;gt; implement user-controlled cameras.&lt;br /&gt;
&lt;br /&gt;
== Levels ==&lt;br /&gt;
Scenes in &amp;lt;code&amp;gt;demo/levels/&amp;lt;/code&amp;gt; (e.g., &amp;lt;code&amp;gt;main3D.tscn&amp;lt;/code&amp;gt; with script &amp;lt;code&amp;gt;main3D.gd&amp;lt;/code&amp;gt;) instantiate players, objects, and the terrain simulator, driving the overall simulation loop.&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
[https://github.com/auroraroboticslab/godotrobot/ The repository] is under active development. Planned areas of documentation include deeper explanations of the power system, tool workflow, and multiplayer networking. Below are the current plans for [[LUMINSim]] to turn it into a commercial product. All contributions are welcome!&lt;br /&gt;
&lt;br /&gt;
The idea of this breakdown is to first write the idea for implementation under the heading, and then update it over time to reflect the real implementation as it is completed. This might also include changing headings as we progress. These things do not necessarily have to be completed in order, as many systems can be created and made to work together over time. This can then be used as a direct reference for creating documentation once pushed.&lt;br /&gt;
&lt;br /&gt;
=== 1. Terrain Streaming System ===&lt;br /&gt;
&lt;br /&gt;
==== 1.1. Design chunk-based terrain data model (glTF/GLB) ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 1.2. Implement terrain export pipeline (server-side) ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 1.3. Develop server API for terrain distribution ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 1.4. Integrate client-side terrain streaming and chunk loading in Godot ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 1.5. Add terrain caching for offline/local testing ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
=== 2. Challenge Framework ===&lt;br /&gt;
&lt;br /&gt;
==== 2.1. Define challenge types (e.g., unloading, excavation, structure building) ====&lt;br /&gt;
This requires we have a building system (see the stub for [[LUMINSim Documentation#Building|Building]]).&lt;br /&gt;
&lt;br /&gt;
==== 2.2. Implement challenge UI and timers ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 2.3. Track and store performance metrics locally ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 2.4. Integrate results with leaderboard backend (see 5.3) ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
=== 3. Robot Autonomy Interface ===&lt;br /&gt;
&lt;br /&gt;
==== 3.1. Define LUMINSim scripting API (for movement, sensing, etc.) ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 3.2. Implement local scripting sandbox (Python or simplified API) ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 3.3. Add ability to deploy user scripts to control robots in challenge mode ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
=== 4. Simulated Sensor Suite ===&lt;br /&gt;
&lt;br /&gt;
==== 4.1. Implement simulated IMU and encoder feedback ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 4.2. Implement LIDAR (2D/3D) and depth camera sensors ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 4.3. Expose sensor data via scripting API ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 4.4. Visualize sensor outputs in debug/test modes ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
=== 5. Account &amp;amp; Leaderboard System ===&lt;br /&gt;
&lt;br /&gt;
==== 5.1. Build account creation and login system (email/password or OAuth) ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 5.2. Set up secure backend server with user profiles and authentication ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 5.3. Implement leaderboard storage for challenge scores ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 5.4. Create frontend UI for viewing and submitting records ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 5.5. Implement reward system hooks (for future prize/cosmetic integration) ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
=== 6. LunaNet / Artemis Protocol Simulation ===&lt;br /&gt;
See [[LUMIN]] for more information.&lt;br /&gt;
&lt;br /&gt;
==== 6.1. Define safety zone data format and map overlay ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 6.2. Define safety zone defaults and rules ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 6.3. Notify players of violations with UI feedback or in-sim events ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 6.4. Enforce safety zones (LAMP intervention, LunaNet cutoffs) ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 6.5. Log compliance for integration with challenge scoring ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
=== 7. Steam &amp;amp; Web Demo Packaging ===&lt;br /&gt;
&lt;br /&gt;
==== 7.1. Configure Godot project export for Steam ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 7.2. Create stripped-down web demo with limited map and challenge ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 7.3. Prepare demo marketing assets (logo, screenshots, description) ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 7.4. Set up Steam store page and submission ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 7.5. Deploy web demo on auroraroboticslab.com or similar ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
=== 8. Testing &amp;amp; QA ===&lt;br /&gt;
&lt;br /&gt;
==== 8.1. Write unit tests for API and terrain loading ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 8.2. Conduct user testing of challenge flows and scripting ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 8.3. Optimize performance for low-end systems (especially web demo) ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 8.4. Fix usability issues and polish UI for MVP release ====&lt;br /&gt;
WIP&lt;/div&gt;</summary>
		<author><name>Acmattson3</name></author>
	</entry>
	<entry>
		<id>https://aurorarobotics.sssn.us/index.php?title=LAMP_v1&amp;diff=821</id>
		<title>LAMP v1</title>
		<link rel="alternate" type="text/html" href="https://aurorarobotics.sssn.us/index.php?title=LAMP_v1&amp;diff=821"/>
		<updated>2025-08-02T01:18:45Z</updated>

		<summary type="html">&lt;p&gt;Acmattson3: Added reference to RobotMoose YouTube video.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;LAMP v1 (Astra)&amp;lt;/h1&amp;gt;&lt;br /&gt;
[[File:Astra Digging.png|alt=Astra in LUMINSim, digging on a hill.|thumb|Astra in LUMINSim, digging on a hill.]]&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;LAMP v1, also known as Astra&amp;lt;/strong&amp;gt;, is the first proposed candidate to become [[L.A.M.P: Lunar, Autonomous, Modular Platform|LAMP (Lunar, Autonomous, Modular, Platform)]]. Designed by [[User:Frozenstiff|Elliott Madsen]], Astra was developed in [https://www.autodesk.com/products/fusion-360/overview Fusion360] and tested in &amp;lt;strong&amp;gt;[[LUMINSim]]&amp;lt;/strong&amp;gt; to assess its mining, mobility, and transport capabilities on the lunar surface. This testing revealed core flaws requiring near-complete redesign, which (as of July 3rd, 2025) has yet to be completed.&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;For more information and visuals, watch the [https://www.youtube.com/watch?v=GwJjh-E93ZA&amp;amp;ab_channel=RobotMoose RobotMoose YouTube video about Astra] that covers both Astra and [[L.A.M.P: Lunar, Autonomous, Modular Platform|LAMP]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Design Overview&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modular Tool Coupler ===&lt;br /&gt;
&amp;lt;p&amp;gt;Astra features a single arm equipped with a modular tool coupler, allowing it to utilize any tool designed for it. Unlike &amp;lt;strong&amp;gt;[[Excahauler]]&amp;lt;/strong&amp;gt;, Astra does not have a pre-attached bucket, as it&#039;s design prioritizes modularity. Astra&#039;s tool coupler is located on the end of a two-joint arm and has tilt functionality, providing versatility in operating a range of tools.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modular Bed ===&lt;br /&gt;
On Astra&#039;s back is a modular bed coupler. This coupler allows it to carry a large variety of beds, including but not limited to:&lt;br /&gt;
&lt;br /&gt;
* A hopper-style bed (seen in the photo above; for transporting loose material).&lt;br /&gt;
* A flatbed (for general transport of solid objects).&lt;br /&gt;
* A tool bed (for carrying multiple tool types).&lt;br /&gt;
* A communications relay (possibly with an antenna to be lifted by the arm&#039;s tool coupler).&lt;br /&gt;
&lt;br /&gt;
=== Frame ===&lt;br /&gt;
Astra&#039;s frame was designed to be highly modular while also allowing high mobility across lunar terrain, with emphasis on ease of travel and transport.&amp;lt;h2&amp;gt;Design Flaws and Testing&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;During its development and testing in &amp;lt;strong&amp;gt;[[LUMINSim]]&amp;lt;/strong&amp;gt;, several design flaws in Astra were identified:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;The arm&#039;s hinge point on the frame was positioned too far forward, causing the robot to easily tip over, especially during heavy lifting.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;The original built-in hopper design was deemed inefficient. This was replaced with the aforementioned modular bed interface, but was not enough to save the overall design due to the previous issue.&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;The wheelbase generally struggles in lunar agility.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;These insights have guided plans for design improvements in the next [[L.A.M.P: Lunar, Autonomous, Modular Platform|LAMP]] candidate.&amp;lt;h2&amp;gt;Related&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For more information or to contribute to the development of the [[L.A.M.P: Lunar, Autonomous, Modular Platform|LAMP]] project, visit the team&#039;s [https://github.com/AuroraRoboticsLab GitHub page].&amp;lt;/p&amp;gt;&lt;/div&gt;</summary>
		<author><name>Acmattson3</name></author>
	</entry>
	<entry>
		<id>https://aurorarobotics.sssn.us/index.php?title=LUMINSim_Documentation&amp;diff=820</id>
		<title>LUMINSim Documentation</title>
		<link rel="alternate" type="text/html" href="https://aurorarobotics.sssn.us/index.php?title=LUMINSim_Documentation&amp;diff=820"/>
		<updated>2025-07-10T20:39:25Z</updated>

		<summary type="html">&lt;p&gt;Acmattson3: Added potential fix for BetterHingeJoint3D issue.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= LUMINSim Documentation =&lt;br /&gt;
This is an ongoing page as I ([[User:Acmattson3|Andrew Mattson]]) document [[LUMINSim]]&#039;s current systems. This page is a &#039;&#039;major&#039;&#039; work in progress; feel free to add to it!&lt;br /&gt;
&lt;br /&gt;
Going forward, I hope to add in-depth descriptions of the inner workings of each major system, including:&lt;br /&gt;
* Power&lt;br /&gt;
* Tools and tool swapping&lt;br /&gt;
* Terrain&lt;br /&gt;
* Multiplayer&lt;br /&gt;
* Each user-controlled scene (robots and astronaut)&lt;br /&gt;
* The UI (multiplayer menu, settings menu, keybind menu)&lt;br /&gt;
* Each (largely) independent scene and corresponding system(s) (brick maker, dirt spawner, tool spawner, etc.)&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
To learn how to get started with development yourself, [https://github.com/AuroraRoboticsLab/GodotRobot/blob/main/README.md visit the repository&#039;s README] and follow the steps there to get the project set up.&lt;br /&gt;
&lt;br /&gt;
== Known Issues ==&lt;br /&gt;
The following are known issues that continuously plague the simulator.&lt;br /&gt;
&lt;br /&gt;
=== Major Issues ===&lt;br /&gt;
Major issues are detrimental to fundamental functionalities of the simulator. Generally they have no known fix without major redesign of the system itself and adjacent systems.&lt;br /&gt;
&lt;br /&gt;
* With no consistency or known cause, some BetterHingeJoint3D (see [[LUMINSim Documentation#Classes|Classes]]) joints are floppy noodles. If you create a joint and it works at first, it will continue to work, but if it is a floppy noodle at first, it will always be a floppy noodle. Deleting and re-instantiating the joint scene does not seem to work. &lt;br /&gt;
** A potential fix is to completely redo BetterHingeJoint3D to work directly with transforms, but this has the side effect of making things &#039;&#039;much&#039;&#039; easier to break the sim if there isn&#039;t some sort of implementation of forces.&lt;br /&gt;
&lt;br /&gt;
=== Minor Issues ===&lt;br /&gt;
Minor issues are just annoying. Generally they have workarounds or can simply be ignored. &lt;br /&gt;
&lt;br /&gt;
* The multiplayer synchronizers throw errors when connecting/disconnecting. No impact on multiplayer functionalities has been observed.&lt;br /&gt;
&lt;br /&gt;
== Repository Structure ==&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;src/&amp;lt;/code&amp;gt;&#039;&#039;&#039; – C++ GDExtension code for terrain and registration. Likely to be deprecated. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Godot project containing levels, assets, and GDScript systems.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;export_presets.cfg&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Information for Godot on how to export the project into platform-native forms. Created automatically by the Godot export menu.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;game_manager.gd&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Handles the majority of the multiplayer logic, especially the sending of data between the clients and the server. See [[LUMINSim Documentation#Networking and Multiplayer|Networking and Multiplayer]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;project.godot&amp;lt;/code&amp;gt;&#039;&#039;&#039; – The main project file. Contains general project configurations and properties. This is the primary reference point for the Godot Engine when developing this project.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/astra&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the drivable [[LUMINSim Documentation#Astra Robot|Astra]] robot.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/astronaut&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the in-game, procedurally-animated astronaut character. See [[LUMINSim Documentation#Astronaut Character|Astronaut Character]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/bin&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the compiled GDExtension binaries. Likely to be deprecated. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/components&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains components or component-like scenes and related files. See [[LUMINSim Documentation#Classes|Classes]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/environment&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files for the skybox (i.e., the stars in the sky).&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/excahauler&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the drivable [[LUMINSim Documentation#Excahauler Robot|Excahauler]] robot.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/graphics&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains many images for icons and textures, especially for the user interface. See [[LUMINSim Documentation#User Interface|User Interface]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/landers&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains directories for different lunar landers. Landers are currently just static models.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/levels&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains the main playable (i.e., non-UI) scenes and related files. See [[LUMINSim Documentation#Levels|Levels]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/objects&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains non-static (i.e., movable RigidBody3D) objects. See [[LUMINSim Documentation#Objects|Objects]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/static_objects&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains static (i.e., unmovable StaticBody3D) objects and their related code. See [[LUMINSim Documentation#Static Objects|Static Objects]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/terrain&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Scenes and files pertaining to the dynamic (i.e., mineable) terrain. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/terrain_fixed&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Scenes and files pertaining to the static (i.e., unchanging) terrain. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/util&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Scenes and files pertaining to UI as well as other useful scripts. See [[LUMINSim Documentation#User Interface|User Interface]].&lt;br /&gt;
In-depth repository structure documentation (brief descriptions on a per-scene basis) may be created here by anyone.&lt;br /&gt;
&lt;br /&gt;
== Classes ==&lt;br /&gt;
The following scripts (ordered alphabetically, ignoring case conventions) register custom nodes with the keyword &amp;lt;code&amp;gt;class_name&amp;lt;/code&amp;gt;:&lt;br /&gt;
* &amp;lt;code&amp;gt;autonomy_component.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;AutonomyComponent&#039;&#039;&#039; – simple navigation helper for NPC robots. See [[LUMINSim Documentation#Autonomy System|Autonomy System]].&lt;br /&gt;
* &amp;lt;code&amp;gt;better_hinge_joint_3d.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;BetterHingeJoint3D&#039;&#039;&#039; – wrapper over &amp;lt;code&amp;gt;Generic6DOFJoint3D&amp;lt;/code&amp;gt; for motorized joints that better simulate joints driven by hydraulics or linear actuators.&lt;br /&gt;
* &amp;lt;code&amp;gt;bucket_attachment.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;Bucket&#039;&#039;&#039; – digs into terrain to collect dirtballs. See [[LUMINSim Documentation#Tools and Attachments|Tools and Attachments]].&lt;br /&gt;
* &amp;lt;code&amp;gt;charge_component.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;ChargeComponent&#039;&#039;&#039; – tracks battery state and handles charging/discharging. See [[LUMINSim Documentation#Power System|Power System]].&lt;br /&gt;
* &amp;lt;code&amp;gt;connector_component.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;Connector&#039;&#039;&#039; – area detector system useful in many contexts, including tool couplers and charge stations.&lt;br /&gt;
* &amp;lt;code&amp;gt;dem_loader.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;DemLoader&#039;&#039;&#039; – loads fixed DEM heightmaps and extends &amp;lt;code&amp;gt;TerrainStatic256&amp;lt;/code&amp;gt;, which is declared via GDExtensions. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
* &amp;lt;code&amp;gt;forks.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;Forks&#039;&#039;&#039; – tool attachment for moving objects. See [[LUMINSim Documentation#Tools and Attachments|Tools and Attachments]].&lt;br /&gt;
* &amp;lt;code&amp;gt;saw_blade_attachment.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;SawBlade&#039;&#039;&#039; – spinning blade for cutting objects. See [[LUMINSim Documentation#Tools and Attachments|Tools and Attachments]].&lt;br /&gt;
* &amp;lt;code&amp;gt;tool_attachment.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;ToolAttachment&#039;&#039;&#039; – base class for all detachable tools. See [[LUMINSim Documentation#Tools and Attachments|Tools and Attachments]].&lt;br /&gt;
* &amp;lt;code&amp;gt;ToolCouplerComponent.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;ToolCoupler&#039;&#039;&#039; – manages attaching tools to a robot via physics joints. See [[LUMINSim Documentation#Tools and Attachments|Tools and Attachments]].&lt;br /&gt;
== Autonomy System ==&lt;br /&gt;
The current autonomous driving logic is implemented by the &amp;lt;code&amp;gt;AutonomyComponent&amp;lt;/code&amp;gt; script. Every robot scene instantiates this node under its root &amp;lt;code&amp;gt;VehicleBody3D&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Currently, this is how it works:&lt;br /&gt;
&lt;br /&gt;
* A child &amp;lt;code&amp;gt;NavigationAgent3D&amp;lt;/code&amp;gt; computes a path when &amp;lt;code&amp;gt;pathfind_to(target_pos)&amp;lt;/code&amp;gt; is called.&lt;br /&gt;
&lt;br /&gt;
* During &amp;lt;code&amp;gt;_physics_process()&amp;lt;/code&amp;gt; the component steers the robot toward the next path point using the &amp;lt;code&amp;gt;get_drive()&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;get_steer()&amp;lt;/code&amp;gt; helpers.&lt;br /&gt;
&lt;br /&gt;
* The helpers are polled by &amp;lt;code&amp;gt;astra_3d.gd&amp;lt;/code&amp;gt; so the component effectively overrides manual controls when active.&lt;br /&gt;
&lt;br /&gt;
* If progress stalls the script nudges the body upward and forward to get free. Once the destination is reached the &amp;lt;code&amp;gt;have_arrived&amp;lt;/code&amp;gt; flag is set.&lt;br /&gt;
&lt;br /&gt;
=== Proposed External API ===&lt;br /&gt;
To enable players to program autonomy from outside the engine, a new &amp;lt;code&amp;gt;AutonomyServer&amp;lt;/code&amp;gt; node could expose a local API via WebSocket, HTTP, or MQTT. The simulator would send each robot&#039;s state to this server, including data like true position, velocity, tool data, and battery level data, and eventually realistic simulated sensor data. An external script could connect to the API and issue commands such as drive, steer, actuate arm, and so on.&lt;br /&gt;
&lt;br /&gt;
This approach decouples vehicle logic from the engine so users can iterate on autonomy in &#039;&#039;&#039;any language&#039;&#039;&#039; without recompiling the project. The &amp;lt;code&amp;gt;AutonomyServer&amp;lt;/code&amp;gt; would relay commands to the relevant nodes (mirroring the current &amp;lt;code&amp;gt;get_drive()&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;get_steer()&amp;lt;/code&amp;gt; methods) while still supporting multiplayer authority checks via &amp;lt;code&amp;gt;GameManager&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Terrain System (C++) ==&lt;br /&gt;
C++ based GDExtensions currently provide the terrain implementation and will be replaced in the future with a more developer-friendly system.&lt;br /&gt;
&lt;br /&gt;
=== Terrain Nodes ===&lt;br /&gt;
The terrain nodes let you represent static or dynamic terrain. They can be nested in other Node3Ds or offset around, but &#039;&#039;&#039;should not be scaled.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Static Terrain ====&lt;br /&gt;
&amp;lt;code&amp;gt;TerrainStatic256&amp;lt;/code&amp;gt; loads heightmaps and generates render and collision meshes. It stores a 256x256 heightmap, normally loaded from an EXR float height image scaled to -10000 meters (black) to +10000 meters (white).&lt;br /&gt;
&lt;br /&gt;
* `fill_from_image(dem:Image, pixel_spacing:float)` takes an image and pixel spacing in meters to create the height map.&lt;br /&gt;
* `add_mesh(shader:Shader,casts_shadows:bool)` creates a mesh for rendering, using the specified shader.&lt;br /&gt;
* `add_static_collider()` creates a StaticBody3D with a CollisionShape3D of our heightmap, so physics interacts with the terrain.&lt;br /&gt;
&lt;br /&gt;
==== Dynamic Terrain ====&lt;br /&gt;
&amp;lt;code&amp;gt;TerrainSim&amp;lt;/code&amp;gt; extends &amp;lt;code&amp;gt;TerrainStatic256&amp;lt;/code&amp;gt; to simulate excavation, landslides, and merging dirtballs back into the heightmap. It stores a dynamic mineable 256x256 heightmap and inherits from &amp;lt;code&amp;gt;TerrainStatic256&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;excavate_point(world:Vector3, dirtball_offset:Vector3, spawn_vel:Vector3)&amp;lt;/code&amp;gt; to excavate terrain into dirtballs. Any locations needing dirtablls will emit the signal `spawn_dirtball` with a spawn position and velocity as Vector3.&lt;br /&gt;
* &amp;lt;code&amp;gt;try_merge(dirtball:Node3D)&amp;lt;/code&amp;gt; to merge dirtballs back down onto the terrain.&lt;br /&gt;
&lt;br /&gt;
=== Terrain Tools ===&lt;br /&gt;
Scripts such as &amp;lt;code&amp;gt;dirt_spawner.gd&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;dirtball.gd&amp;lt;/code&amp;gt; spawn and merge mobile particles with the dynamic terrain.&lt;br /&gt;
&lt;br /&gt;
== Power System ==&lt;br /&gt;
Movable vehicles include a &#039;&#039;&#039;ChargeComponent&#039;&#039;&#039; (see [[LUMINSim Documentation#Classes|Classes]]) that stores amp-hours and battery percentage. Robots consume charge while driving or actuating, and static objects like charge stations or solar panels provide power when connected.&lt;br /&gt;
&lt;br /&gt;
== Tools and Attachments ==&lt;br /&gt;
All interchangeable implements derive from &#039;&#039;&#039;ToolAttachment&#039;&#039;&#039;. Robot arms have &#039;&#039;&#039;ToolCoupler&#039;&#039;&#039; nodes that detect nearby &#039;&#039;&#039;Connector&#039;&#039;&#039; areas and create physics joints to attach or detach tools. Available tools include the Bucket, Forks, and SawBlade (see [[LUMINSim Documentation#Excavation Tools|Excavation Tools]] under [[LUMINSim Documentation#Robot Systems|Robot Systems]]). &amp;lt;code&amp;gt;tool_spawner.gd&amp;lt;/code&amp;gt; respawns tools removed from its bays. To find where each of these classes are declares, see [[LUMINSim Documentation#Classes|Classes]]. &lt;br /&gt;
&lt;br /&gt;
== Robot Systems ==&lt;br /&gt;
=== [[Astra]] Robot ===&lt;br /&gt;
The main scene is &amp;lt;code&amp;gt;astra_3d.tscn&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;astra_3d.gd&amp;lt;/code&amp;gt; handles driving, energy usage, and tool attachment. It works with &amp;lt;code&amp;gt;astra_arm_3d.gd&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;astra_hopper_3d.gd&amp;lt;/code&amp;gt; and their associated &amp;lt;code&amp;gt;.tscn&amp;lt;/code&amp;gt; files for the robot&#039;s arm and hopper.&lt;br /&gt;
&lt;br /&gt;
=== Astronaut Character ===&lt;br /&gt;
&amp;lt;code&amp;gt;astronaut_character_3d.gd&amp;lt;/code&amp;gt; provides walking and camera control for a procedurally animated astronaut. We hope to implement VR for the astronaut in the future.&lt;br /&gt;
&lt;br /&gt;
=== Excavation Tools ===&lt;br /&gt;
Attachments such as the bucket, forks, and saw blade extend &#039;&#039;&#039;ToolAttachment&#039;&#039;&#039; (see [[LUMINSim Documentation#Classes|Classes]]) for various tasks. The files for these attachments are currently in [[LUMINSim Documentation#Astra Robot|Astra]]&#039;s directory, but this is subject to change.&lt;br /&gt;
&lt;br /&gt;
=== [[Excahauler]] Robot ===&lt;br /&gt;
The main scene is &amp;lt;code&amp;gt;excahauler_3d.tscn&amp;lt;/code&amp;gt;. Unlike [[LUMINSim Documentation#Astra Robot|Astra&#039;s implementation]], all functionalities are within a &#039;&#039;single&#039;&#039; &amp;lt;code&amp;gt;.tscn&amp;lt;/code&amp;gt; file and a few associated &amp;lt;code&amp;gt;.gd&amp;lt;/code&amp;gt; files. Currently, only Excahauler&#039;s main arm (boom, stick, and tilt) is implemented, as trying to set up the scoop (fork and dump) joints in an identical way results in uncontrollable, noodle-like joints (See [[LUMINSim Documentation#Major Issues|Major Issues]]).&lt;br /&gt;
&lt;br /&gt;
== Objects ==&lt;br /&gt;
Movable, physics-enabled props used primarily for construction.&lt;br /&gt;
&lt;br /&gt;
* Madsen Cinder Block – a simple RigidBody3D brick spawned by [[LUMINSim Documentation#Static Objects|brick_maker.gd]]. Designed by [[User:Frozenstiff|Elliott Madsen]].&lt;br /&gt;
&lt;br /&gt;
* Truss Modules – sets of 1m and 3m segments with collision shapes for stacking into arches, garages or other structures. These are modeled after [[NASA X-Hab 2025: Modular Robotic Construction#The L-Truss System|the L-Truss design seen in our 2025 X-Hab project]].&lt;br /&gt;
&lt;br /&gt;
== Static Objects ==&lt;br /&gt;
Charge stations and solar panels (see [[LUMINSim Documentation#Power System|Power System]]), tool spawners, and other generally useful environment pieces. These scenes generally work independently of other scenes, and include:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;brick_maker.gd&amp;lt;/code&amp;gt; – creates bricks when filled with loose dirt.&lt;br /&gt;
* &amp;lt;code&amp;gt;tool_spawner.gd&amp;lt;/code&amp;gt; – keeps bays stocked by respawning assigned attachments when they are taken.&lt;br /&gt;
* &amp;lt;code&amp;gt;dirt_spawner.gd&amp;lt;/code&amp;gt; – continuously emits dirtballs for terrain testing, currently toggle-able by pressing &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Building ==&lt;br /&gt;
Currently there is no built-in building system (see [[LUMINSim Documentation#2.1. Define challenge types (e.g., unloading, excavation, structure building)|Future Work, Challenge Framework]]), but [[User:Lawlor|Dr. Lawlor]] has begun work on &#039;&#039;&#039;[https://github.com/auroraroboticslab/buildot Buildot]&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Working from Buildot, my ([[User:Acmattson3|Andrew Mattson]]) idea is to have: &lt;br /&gt;
&lt;br /&gt;
* A separate builder interface (Buildot) in the simulator.&lt;br /&gt;
* Users would have a way to select buildings made in Buildot and place them down as a holographic blueprint. &lt;br /&gt;
** Once the user confirms where they want to place the building, the holographic disappears and the user is prompted to place components in certain locations or excavate areas. &lt;br /&gt;
** For example, the [[NASA X-Hab 2025: Modular Robotic Construction|X-Hab 2025]] arch would have the user place all of the anchors, then go to the truss segments and so on. We could even make it so that, to build the arch, the user must have a robot designated for holding up the structure and, as the build process progresses, it can lift the structure as needed. &lt;br /&gt;
&lt;br /&gt;
== Networking and Multiplayer ==&lt;br /&gt;
&amp;lt;code&amp;gt;game_manager.gd&amp;lt;/code&amp;gt; manages synchronized player/object data and signals for network updates. &amp;lt;code&amp;gt;multiplayer_menu.gd&amp;lt;/code&amp;gt; lets players host or join games, start sessions, and handle disconnects.&lt;br /&gt;
&lt;br /&gt;
== User Interface ==&lt;br /&gt;
The &amp;lt;code&amp;gt;ui.gd&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;joystick.gd&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;keybinds_menu.gd&amp;lt;/code&amp;gt; scripts provide HUD elements, customizable input bindings, and on-screen controls for mobile users.&lt;br /&gt;
&lt;br /&gt;
=== Command Line Interface ===&lt;br /&gt;
The user interface includes a command line interface (opened by pressing &amp;lt;code&amp;gt;f1&amp;lt;/code&amp;gt; if you are in a local game or are the host) with the following commands:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;goto X Y Z&amp;lt;/code&amp;gt; – Pathfind to the entered coordinates. &#039;&#039;&#039;Not working&#039;&#039;&#039; until a new autonomy system is implemented.&lt;br /&gt;
* &amp;lt;code&amp;gt;respawn&amp;lt;/code&amp;gt; – Teleport back to the starting position.&lt;br /&gt;
* &amp;lt;code&amp;gt;move X Y Z&amp;lt;/code&amp;gt; – Teleport to the given coordinates &#039;&#039;relative&#039;&#039; &#039;&#039;to your current position&#039;&#039;.&lt;br /&gt;
* &amp;lt;code&amp;gt;grav X&amp;lt;/code&amp;gt; – Change the gravity to &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt; m/s&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;tp X Y Z&amp;lt;/code&amp;gt; – Teleport to the given coordinates &#039;&#039;relative to the world origin.&#039;&#039;&lt;br /&gt;
* &amp;lt;code&amp;gt;freecam&amp;lt;/code&amp;gt; – Enter a freecam state.&lt;br /&gt;
* &amp;lt;code&amp;gt;simrate X&amp;lt;/code&amp;gt; – Change the speed of the simulation to &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt; times normal speed.&lt;br /&gt;
* &amp;lt;code&amp;gt;pause&amp;lt;/code&amp;gt; – Pause the simulation. Useful for capturing cinematics (freecam functionality still works, for example).&lt;br /&gt;
&lt;br /&gt;
== Cameras and Controls ==&lt;br /&gt;
&amp;lt;code&amp;gt;movable_camera_3d.tscn&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;freecam.tscn&amp;lt;/code&amp;gt; implement user-controlled cameras.&lt;br /&gt;
&lt;br /&gt;
== Levels ==&lt;br /&gt;
Scenes in &amp;lt;code&amp;gt;demo/levels/&amp;lt;/code&amp;gt; (e.g., &amp;lt;code&amp;gt;main3D.tscn&amp;lt;/code&amp;gt; with script &amp;lt;code&amp;gt;main3D.gd&amp;lt;/code&amp;gt;) instantiate players, objects, and the terrain simulator, driving the overall simulation loop.&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
[https://github.com/auroraroboticslab/godotrobot/ The repository] is under active development. Planned areas of documentation include deeper explanations of the power system, tool workflow, and multiplayer networking. Below are the current plans for [[LUMINSim]] to turn it into a commercial product. All contributions are welcome!&lt;br /&gt;
&lt;br /&gt;
The idea of this breakdown is to first write the idea for implementation under the heading, and then update it over time to reflect the real implementation as it is completed. This might also include changing headings as we progress. These things do not necessarily have to be completed in order, as many systems can be created and made to work together over time. This can then be used as a direct reference for creating documentation once pushed.&lt;br /&gt;
&lt;br /&gt;
=== 1. Terrain Streaming System ===&lt;br /&gt;
&lt;br /&gt;
==== 1.1. Design chunk-based terrain data model (glTF/GLB) ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 1.2. Implement terrain export pipeline (server-side) ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 1.3. Develop server API for terrain distribution ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 1.4. Integrate client-side terrain streaming and chunk loading in Godot ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 1.5. Add terrain caching for offline/local testing ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
=== 2. Challenge Framework ===&lt;br /&gt;
&lt;br /&gt;
==== 2.1. Define challenge types (e.g., unloading, excavation, structure building) ====&lt;br /&gt;
This requires we have a building system (see the stub for [[LUMINSim Documentation#Building|Building]]).&lt;br /&gt;
&lt;br /&gt;
==== 2.2. Implement challenge UI and timers ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 2.3. Track and store performance metrics locally ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 2.4. Integrate results with leaderboard backend (see 5.3) ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
=== 3. Robot Autonomy Interface ===&lt;br /&gt;
&lt;br /&gt;
==== 3.1. Define LUMINSim scripting API (for movement, sensing, etc.) ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 3.2. Implement local scripting sandbox (Python or simplified API) ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 3.3. Add ability to deploy user scripts to control robots in challenge mode ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
=== 4. Simulated Sensor Suite ===&lt;br /&gt;
&lt;br /&gt;
==== 4.1. Implement simulated IMU and encoder feedback ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 4.2. Implement LIDAR (2D/3D) and depth camera sensors ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 4.3. Expose sensor data via scripting API ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 4.4. Visualize sensor outputs in debug/test modes ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
=== 5. Account &amp;amp; Leaderboard System ===&lt;br /&gt;
&lt;br /&gt;
==== 5.1. Build account creation and login system (email/password or OAuth) ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 5.2. Set up secure backend server with user profiles and authentication ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 5.3. Implement leaderboard storage for challenge scores ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 5.4. Create frontend UI for viewing and submitting records ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 5.5. Implement reward system hooks (for future prize/cosmetic integration) ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
=== 6. LunaNet / Artemis Protocol Simulation ===&lt;br /&gt;
See [[LUMIN]] for more information.&lt;br /&gt;
&lt;br /&gt;
==== 6.1. Define safety zone data format and map overlay ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 6.2. Define safety zone defaults and rules ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 6.3. Notify players of violations with UI feedback or in-sim events ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 6.4. Enforce safety zones (LAMP intervention, LunaNet cutoffs) ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 6.5. Log compliance for integration with challenge scoring ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
=== 7. Steam &amp;amp; Web Demo Packaging ===&lt;br /&gt;
&lt;br /&gt;
==== 7.1. Configure Godot project export for Steam ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 7.2. Create stripped-down web demo with limited map and challenge ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 7.3. Prepare demo marketing assets (logo, screenshots, description) ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 7.4. Set up Steam store page and submission ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 7.5. Deploy web demo on auroraroboticslab.com or similar ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
=== 8. Testing &amp;amp; QA ===&lt;br /&gt;
&lt;br /&gt;
==== 8.1. Write unit tests for API and terrain loading ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 8.2. Conduct user testing of challenge flows and scripting ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 8.3. Optimize performance for low-end systems (especially web demo) ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 8.4. Fix usability issues and polish UI for MVP release ====&lt;br /&gt;
WIP&lt;/div&gt;</summary>
		<author><name>Acmattson3</name></author>
	</entry>
	<entry>
		<id>https://aurorarobotics.sssn.us/index.php?title=LUMINSim_Documentation&amp;diff=819</id>
		<title>LUMINSim Documentation</title>
		<link rel="alternate" type="text/html" href="https://aurorarobotics.sssn.us/index.php?title=LUMINSim_Documentation&amp;diff=819"/>
		<updated>2025-07-09T22:10:32Z</updated>

		<summary type="html">&lt;p&gt;Acmattson3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= LUMINSim Documentation =&lt;br /&gt;
This is an ongoing page as I ([[User:Acmattson3|Andrew Mattson]]) document [[LUMINSim]]&#039;s current systems. This page is a &#039;&#039;major&#039;&#039; work in progress; feel free to add to it!&lt;br /&gt;
&lt;br /&gt;
Going forward, I hope to add in-depth descriptions of the inner workings of each major system, including:&lt;br /&gt;
* Power&lt;br /&gt;
* Tools and tool swapping&lt;br /&gt;
* Terrain&lt;br /&gt;
* Multiplayer&lt;br /&gt;
* Each user-controlled scene (robots and astronaut)&lt;br /&gt;
* The UI (multiplayer menu, settings menu, keybind menu)&lt;br /&gt;
* Each (largely) independent scene and corresponding system(s) (brick maker, dirt spawner, tool spawner, etc.)&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
To learn how to get started with development yourself, [https://github.com/AuroraRoboticsLab/GodotRobot/blob/main/README.md visit the repository&#039;s README] and follow the steps there to get the project set up.&lt;br /&gt;
&lt;br /&gt;
== Known Issues ==&lt;br /&gt;
The following are known issues that continuously plague the simulator.&lt;br /&gt;
&lt;br /&gt;
=== Major Issues ===&lt;br /&gt;
Major issues are detrimental to fundamental functionalities of the simulator. Generally they have no known fix without major redesign of the system itself and adjacent systems.&lt;br /&gt;
&lt;br /&gt;
* With no consistency or known cause, some BetterHingeJoint3D (see [[LUMINSim Documentation#Classes|Classes]]) joints are floppy noodles. If you create a joint and it works at first, it will continue to work, but if it is a floppy noodle at first, it will always be a floppy noodle. Deleting and re-instantiating the joint scene does not seem to work.&lt;br /&gt;
&lt;br /&gt;
=== Minor Issues ===&lt;br /&gt;
Minor issues are just annoying. Generally they have workarounds or can simply be ignored. &lt;br /&gt;
&lt;br /&gt;
* The multiplayer synchronizers throw errors when connecting/disconnecting. No impact on multiplayer functionalities has been observed.&lt;br /&gt;
&lt;br /&gt;
== Repository Structure ==&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;src/&amp;lt;/code&amp;gt;&#039;&#039;&#039; – C++ GDExtension code for terrain and registration. Likely to be deprecated. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Godot project containing levels, assets, and GDScript systems.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;export_presets.cfg&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Information for Godot on how to export the project into platform-native forms. Created automatically by the Godot export menu.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;game_manager.gd&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Handles the majority of the multiplayer logic, especially the sending of data between the clients and the server. See [[LUMINSim Documentation#Networking and Multiplayer|Networking and Multiplayer]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;project.godot&amp;lt;/code&amp;gt;&#039;&#039;&#039; – The main project file. Contains general project configurations and properties. This is the primary reference point for the Godot Engine when developing this project.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/astra&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the drivable [[LUMINSim Documentation#Astra Robot|Astra]] robot.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/astronaut&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the in-game, procedurally-animated astronaut character. See [[LUMINSim Documentation#Astronaut Character|Astronaut Character]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/bin&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the compiled GDExtension binaries. Likely to be deprecated. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/components&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains components or component-like scenes and related files. See [[LUMINSim Documentation#Classes|Classes]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/environment&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files for the skybox (i.e., the stars in the sky).&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/excahauler&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the drivable [[LUMINSim Documentation#Excahauler Robot|Excahauler]] robot.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/graphics&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains many images for icons and textures, especially for the user interface. See [[LUMINSim Documentation#User Interface|User Interface]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/landers&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains directories for different lunar landers. Landers are currently just static models.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/levels&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains the main playable (i.e., non-UI) scenes and related files. See [[LUMINSim Documentation#Levels|Levels]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/objects&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains non-static (i.e., movable RigidBody3D) objects. See [[LUMINSim Documentation#Objects|Objects]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/static_objects&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains static (i.e., unmovable StaticBody3D) objects and their related code. See [[LUMINSim Documentation#Static Objects|Static Objects]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/terrain&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Scenes and files pertaining to the dynamic (i.e., mineable) terrain. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/terrain_fixed&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Scenes and files pertaining to the static (i.e., unchanging) terrain. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/util&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Scenes and files pertaining to UI as well as other useful scripts. See [[LUMINSim Documentation#User Interface|User Interface]].&lt;br /&gt;
In-depth repository structure documentation (brief descriptions on a per-scene basis) may be created here by anyone.&lt;br /&gt;
&lt;br /&gt;
== Classes ==&lt;br /&gt;
The following scripts (ordered alphabetically, ignoring case conventions) register custom nodes with the keyword &amp;lt;code&amp;gt;class_name&amp;lt;/code&amp;gt;:&lt;br /&gt;
* &amp;lt;code&amp;gt;autonomy_component.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;AutonomyComponent&#039;&#039;&#039; – simple navigation helper for NPC robots. See [[LUMINSim Documentation#Autonomy System|Autonomy System]].&lt;br /&gt;
* &amp;lt;code&amp;gt;better_hinge_joint_3d.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;BetterHingeJoint3D&#039;&#039;&#039; – wrapper over &amp;lt;code&amp;gt;Generic6DOFJoint3D&amp;lt;/code&amp;gt; for motorized joints that better simulate joints driven by hydraulics or linear actuators.&lt;br /&gt;
* &amp;lt;code&amp;gt;bucket_attachment.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;Bucket&#039;&#039;&#039; – digs into terrain to collect dirtballs. See [[LUMINSim Documentation#Tools and Attachments|Tools and Attachments]].&lt;br /&gt;
* &amp;lt;code&amp;gt;charge_component.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;ChargeComponent&#039;&#039;&#039; – tracks battery state and handles charging/discharging. See [[LUMINSim Documentation#Power System|Power System]].&lt;br /&gt;
* &amp;lt;code&amp;gt;connector_component.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;Connector&#039;&#039;&#039; – area detector system useful in many contexts, including tool couplers and charge stations.&lt;br /&gt;
* &amp;lt;code&amp;gt;dem_loader.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;DemLoader&#039;&#039;&#039; – loads fixed DEM heightmaps and extends &amp;lt;code&amp;gt;TerrainStatic256&amp;lt;/code&amp;gt;, which is declared via GDExtensions. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
* &amp;lt;code&amp;gt;forks.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;Forks&#039;&#039;&#039; – tool attachment for moving objects. See [[LUMINSim Documentation#Tools and Attachments|Tools and Attachments]].&lt;br /&gt;
* &amp;lt;code&amp;gt;saw_blade_attachment.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;SawBlade&#039;&#039;&#039; – spinning blade for cutting objects. See [[LUMINSim Documentation#Tools and Attachments|Tools and Attachments]].&lt;br /&gt;
* &amp;lt;code&amp;gt;tool_attachment.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;ToolAttachment&#039;&#039;&#039; – base class for all detachable tools. See [[LUMINSim Documentation#Tools and Attachments|Tools and Attachments]].&lt;br /&gt;
* &amp;lt;code&amp;gt;ToolCouplerComponent.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;ToolCoupler&#039;&#039;&#039; – manages attaching tools to a robot via physics joints. See [[LUMINSim Documentation#Tools and Attachments|Tools and Attachments]].&lt;br /&gt;
== Autonomy System ==&lt;br /&gt;
The current autonomous driving logic is implemented by the &amp;lt;code&amp;gt;AutonomyComponent&amp;lt;/code&amp;gt; script. Every robot scene instantiates this node under its root &amp;lt;code&amp;gt;VehicleBody3D&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Currently, this is how it works:&lt;br /&gt;
&lt;br /&gt;
* A child &amp;lt;code&amp;gt;NavigationAgent3D&amp;lt;/code&amp;gt; computes a path when &amp;lt;code&amp;gt;pathfind_to(target_pos)&amp;lt;/code&amp;gt; is called.&lt;br /&gt;
&lt;br /&gt;
* During &amp;lt;code&amp;gt;_physics_process()&amp;lt;/code&amp;gt; the component steers the robot toward the next path point using the &amp;lt;code&amp;gt;get_drive()&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;get_steer()&amp;lt;/code&amp;gt; helpers.&lt;br /&gt;
&lt;br /&gt;
* The helpers are polled by &amp;lt;code&amp;gt;astra_3d.gd&amp;lt;/code&amp;gt; so the component effectively overrides manual controls when active.&lt;br /&gt;
&lt;br /&gt;
* If progress stalls the script nudges the body upward and forward to get free. Once the destination is reached the &amp;lt;code&amp;gt;have_arrived&amp;lt;/code&amp;gt; flag is set.&lt;br /&gt;
&lt;br /&gt;
=== Proposed External API ===&lt;br /&gt;
To enable players to program autonomy from outside the engine, a new &amp;lt;code&amp;gt;AutonomyServer&amp;lt;/code&amp;gt; node could expose a local API via WebSocket, HTTP, or MQTT. The simulator would send each robot&#039;s state to this server, including data like true position, velocity, tool data, and battery level data, and eventually realistic simulated sensor data. An external script could connect to the API and issue commands such as drive, steer, actuate arm, and so on.&lt;br /&gt;
&lt;br /&gt;
This approach decouples vehicle logic from the engine so users can iterate on autonomy in &#039;&#039;&#039;any language&#039;&#039;&#039; without recompiling the project. The &amp;lt;code&amp;gt;AutonomyServer&amp;lt;/code&amp;gt; would relay commands to the relevant nodes (mirroring the current &amp;lt;code&amp;gt;get_drive()&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;get_steer()&amp;lt;/code&amp;gt; methods) while still supporting multiplayer authority checks via &amp;lt;code&amp;gt;GameManager&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Terrain System (C++) ==&lt;br /&gt;
C++ based GDExtensions currently provide the terrain implementation and will be replaced in the future with a more developer-friendly system.&lt;br /&gt;
&lt;br /&gt;
=== Terrain Nodes ===&lt;br /&gt;
The terrain nodes let you represent static or dynamic terrain. They can be nested in other Node3Ds or offset around, but &#039;&#039;&#039;should not be scaled.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Static Terrain ====&lt;br /&gt;
&amp;lt;code&amp;gt;TerrainStatic256&amp;lt;/code&amp;gt; loads heightmaps and generates render and collision meshes. It stores a 256x256 heightmap, normally loaded from an EXR float height image scaled to -10000 meters (black) to +10000 meters (white).&lt;br /&gt;
&lt;br /&gt;
* `fill_from_image(dem:Image, pixel_spacing:float)` takes an image and pixel spacing in meters to create the height map.&lt;br /&gt;
* `add_mesh(shader:Shader,casts_shadows:bool)` creates a mesh for rendering, using the specified shader.&lt;br /&gt;
* `add_static_collider()` creates a StaticBody3D with a CollisionShape3D of our heightmap, so physics interacts with the terrain.&lt;br /&gt;
&lt;br /&gt;
==== Dynamic Terrain ====&lt;br /&gt;
&amp;lt;code&amp;gt;TerrainSim&amp;lt;/code&amp;gt; extends &amp;lt;code&amp;gt;TerrainStatic256&amp;lt;/code&amp;gt; to simulate excavation, landslides, and merging dirtballs back into the heightmap. It stores a dynamic mineable 256x256 heightmap and inherits from &amp;lt;code&amp;gt;TerrainStatic256&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;excavate_point(world:Vector3, dirtball_offset:Vector3, spawn_vel:Vector3)&amp;lt;/code&amp;gt; to excavate terrain into dirtballs. Any locations needing dirtablls will emit the signal `spawn_dirtball` with a spawn position and velocity as Vector3.&lt;br /&gt;
* &amp;lt;code&amp;gt;try_merge(dirtball:Node3D)&amp;lt;/code&amp;gt; to merge dirtballs back down onto the terrain.&lt;br /&gt;
&lt;br /&gt;
=== Terrain Tools ===&lt;br /&gt;
Scripts such as &amp;lt;code&amp;gt;dirt_spawner.gd&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;dirtball.gd&amp;lt;/code&amp;gt; spawn and merge mobile particles with the dynamic terrain.&lt;br /&gt;
&lt;br /&gt;
== Power System ==&lt;br /&gt;
Movable vehicles include a &#039;&#039;&#039;ChargeComponent&#039;&#039;&#039; (see [[LUMINSim Documentation#Classes|Classes]]) that stores amp-hours and battery percentage. Robots consume charge while driving or actuating, and static objects like charge stations or solar panels provide power when connected.&lt;br /&gt;
&lt;br /&gt;
== Tools and Attachments ==&lt;br /&gt;
All interchangeable implements derive from &#039;&#039;&#039;ToolAttachment&#039;&#039;&#039;. Robot arms have &#039;&#039;&#039;ToolCoupler&#039;&#039;&#039; nodes that detect nearby &#039;&#039;&#039;Connector&#039;&#039;&#039; areas and create physics joints to attach or detach tools. Available tools include the Bucket, Forks, and SawBlade (see [[LUMINSim Documentation#Excavation Tools|Excavation Tools]] under [[LUMINSim Documentation#Robot Systems|Robot Systems]]). &amp;lt;code&amp;gt;tool_spawner.gd&amp;lt;/code&amp;gt; respawns tools removed from its bays. To find where each of these classes are declares, see [[LUMINSim Documentation#Classes|Classes]]. &lt;br /&gt;
&lt;br /&gt;
== Robot Systems ==&lt;br /&gt;
=== [[Astra]] Robot ===&lt;br /&gt;
The main scene is &amp;lt;code&amp;gt;astra_3d.tscn&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;astra_3d.gd&amp;lt;/code&amp;gt; handles driving, energy usage, and tool attachment. It works with &amp;lt;code&amp;gt;astra_arm_3d.gd&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;astra_hopper_3d.gd&amp;lt;/code&amp;gt; and their associated &amp;lt;code&amp;gt;.tscn&amp;lt;/code&amp;gt; files for the robot&#039;s arm and hopper.&lt;br /&gt;
&lt;br /&gt;
=== Astronaut Character ===&lt;br /&gt;
&amp;lt;code&amp;gt;astronaut_character_3d.gd&amp;lt;/code&amp;gt; provides walking and camera control for a procedurally animated astronaut. We hope to implement VR for the astronaut in the future.&lt;br /&gt;
&lt;br /&gt;
=== Excavation Tools ===&lt;br /&gt;
Attachments such as the bucket, forks, and saw blade extend &#039;&#039;&#039;ToolAttachment&#039;&#039;&#039; (see [[LUMINSim Documentation#Classes|Classes]]) for various tasks. The files for these attachments are currently in [[LUMINSim Documentation#Astra Robot|Astra]]&#039;s directory, but this is subject to change.&lt;br /&gt;
&lt;br /&gt;
=== [[Excahauler]] Robot ===&lt;br /&gt;
The main scene is &amp;lt;code&amp;gt;excahauler_3d.tscn&amp;lt;/code&amp;gt;. Unlike [[LUMINSim Documentation#Astra Robot|Astra&#039;s implementation]], all functionalities are within a &#039;&#039;single&#039;&#039; &amp;lt;code&amp;gt;.tscn&amp;lt;/code&amp;gt; file and a few associated &amp;lt;code&amp;gt;.gd&amp;lt;/code&amp;gt; files. Currently, only Excahauler&#039;s main arm (boom, stick, and tilt) is implemented, as trying to set up the scoop (fork and dump) joints in an identical way results in uncontrollable, noodle-like joints (See [[LUMINSim Documentation#Major Issues|Major Issues]]).&lt;br /&gt;
&lt;br /&gt;
== Objects ==&lt;br /&gt;
Movable, physics-enabled props used primarily for construction.&lt;br /&gt;
&lt;br /&gt;
* Madsen Cinder Block – a simple RigidBody3D brick spawned by [[LUMINSim Documentation#Static Objects|brick_maker.gd]]. Designed by [[User:Frozenstiff|Elliott Madsen]].&lt;br /&gt;
&lt;br /&gt;
* Truss Modules – sets of 1m and 3m segments with collision shapes for stacking into arches, garages or other structures. These are modeled after [[NASA X-Hab 2025: Modular Robotic Construction#The L-Truss System|the L-Truss design seen in our 2025 X-Hab project]].&lt;br /&gt;
&lt;br /&gt;
== Static Objects ==&lt;br /&gt;
Charge stations and solar panels (see [[LUMINSim Documentation#Power System|Power System]]), tool spawners, and other generally useful environment pieces. These scenes generally work independently of other scenes, and include:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;brick_maker.gd&amp;lt;/code&amp;gt; – creates bricks when filled with loose dirt.&lt;br /&gt;
* &amp;lt;code&amp;gt;tool_spawner.gd&amp;lt;/code&amp;gt; – keeps bays stocked by respawning assigned attachments when they are taken.&lt;br /&gt;
* &amp;lt;code&amp;gt;dirt_spawner.gd&amp;lt;/code&amp;gt; – continuously emits dirtballs for terrain testing, currently toggle-able by pressing &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Building ==&lt;br /&gt;
Currently there is no built-in building system (see [[LUMINSim Documentation#2.1. Define challenge types (e.g., unloading, excavation, structure building)|Future Work, Challenge Framework]]), but [[User:Lawlor|Dr. Lawlor]] has begun work on &#039;&#039;&#039;[https://github.com/auroraroboticslab/buildot Buildot]&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Working from Buildot, my ([[User:Acmattson3|Andrew Mattson]]) idea is to have: &lt;br /&gt;
&lt;br /&gt;
* A separate builder interface (Buildot) in the simulator.&lt;br /&gt;
* Users would have a way to select buildings made in Buildot and place them down as a holographic blueprint. &lt;br /&gt;
** Once the user confirms where they want to place the building, the holographic disappears and the user is prompted to place components in certain locations or excavate areas. &lt;br /&gt;
** For example, the [[NASA X-Hab 2025: Modular Robotic Construction|X-Hab 2025]] arch would have the user place all of the anchors, then go to the truss segments and so on. We could even make it so that, to build the arch, the user must have a robot designated for holding up the structure and, as the build process progresses, it can lift the structure as needed. &lt;br /&gt;
&lt;br /&gt;
== Networking and Multiplayer ==&lt;br /&gt;
&amp;lt;code&amp;gt;game_manager.gd&amp;lt;/code&amp;gt; manages synchronized player/object data and signals for network updates. &amp;lt;code&amp;gt;multiplayer_menu.gd&amp;lt;/code&amp;gt; lets players host or join games, start sessions, and handle disconnects.&lt;br /&gt;
&lt;br /&gt;
== User Interface ==&lt;br /&gt;
The &amp;lt;code&amp;gt;ui.gd&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;joystick.gd&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;keybinds_menu.gd&amp;lt;/code&amp;gt; scripts provide HUD elements, customizable input bindings, and on-screen controls for mobile users.&lt;br /&gt;
&lt;br /&gt;
=== Command Line Interface ===&lt;br /&gt;
The user interface includes a command line interface (opened by pressing &amp;lt;code&amp;gt;f1&amp;lt;/code&amp;gt; if you are in a local game or are the host) with the following commands:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;goto X Y Z&amp;lt;/code&amp;gt; – Pathfind to the entered coordinates. &#039;&#039;&#039;Not working&#039;&#039;&#039; until a new autonomy system is implemented.&lt;br /&gt;
* &amp;lt;code&amp;gt;respawn&amp;lt;/code&amp;gt; – Teleport back to the starting position.&lt;br /&gt;
* &amp;lt;code&amp;gt;move X Y Z&amp;lt;/code&amp;gt; – Teleport to the given coordinates &#039;&#039;relative&#039;&#039; &#039;&#039;to your current position&#039;&#039;.&lt;br /&gt;
* &amp;lt;code&amp;gt;grav X&amp;lt;/code&amp;gt; – Change the gravity to &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt; m/s&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;tp X Y Z&amp;lt;/code&amp;gt; – Teleport to the given coordinates &#039;&#039;relative to the world origin.&#039;&#039;&lt;br /&gt;
* &amp;lt;code&amp;gt;freecam&amp;lt;/code&amp;gt; – Enter a freecam state.&lt;br /&gt;
* &amp;lt;code&amp;gt;simrate X&amp;lt;/code&amp;gt; – Change the speed of the simulation to &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt; times normal speed.&lt;br /&gt;
* &amp;lt;code&amp;gt;pause&amp;lt;/code&amp;gt; – Pause the simulation. Useful for capturing cinematics (freecam functionality still works, for example).&lt;br /&gt;
&lt;br /&gt;
== Cameras and Controls ==&lt;br /&gt;
&amp;lt;code&amp;gt;movable_camera_3d.tscn&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;freecam.tscn&amp;lt;/code&amp;gt; implement user-controlled cameras.&lt;br /&gt;
&lt;br /&gt;
== Levels ==&lt;br /&gt;
Scenes in &amp;lt;code&amp;gt;demo/levels/&amp;lt;/code&amp;gt; (e.g., &amp;lt;code&amp;gt;main3D.tscn&amp;lt;/code&amp;gt; with script &amp;lt;code&amp;gt;main3D.gd&amp;lt;/code&amp;gt;) instantiate players, objects, and the terrain simulator, driving the overall simulation loop.&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
[https://github.com/auroraroboticslab/godotrobot/ The repository] is under active development. Planned areas of documentation include deeper explanations of the power system, tool workflow, and multiplayer networking. Below are the current plans for [[LUMINSim]] to turn it into a commercial product. All contributions are welcome!&lt;br /&gt;
&lt;br /&gt;
The idea of this breakdown is to first write the idea for implementation under the heading, and then update it over time to reflect the real implementation as it is completed. This might also include changing headings as we progress. These things do not necessarily have to be completed in order, as many systems can be created and made to work together over time. This can then be used as a direct reference for creating documentation once pushed.&lt;br /&gt;
&lt;br /&gt;
=== 1. Terrain Streaming System ===&lt;br /&gt;
&lt;br /&gt;
==== 1.1. Design chunk-based terrain data model (glTF/GLB) ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 1.2. Implement terrain export pipeline (server-side) ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 1.3. Develop server API for terrain distribution ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 1.4. Integrate client-side terrain streaming and chunk loading in Godot ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 1.5. Add terrain caching for offline/local testing ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
=== 2. Challenge Framework ===&lt;br /&gt;
&lt;br /&gt;
==== 2.1. Define challenge types (e.g., unloading, excavation, structure building) ====&lt;br /&gt;
This requires we have a building system (see the stub for [[LUMINSim Documentation#Building|Building]]).&lt;br /&gt;
&lt;br /&gt;
==== 2.2. Implement challenge UI and timers ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 2.3. Track and store performance metrics locally ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 2.4. Integrate results with leaderboard backend (see 5.3) ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
=== 3. Robot Autonomy Interface ===&lt;br /&gt;
&lt;br /&gt;
==== 3.1. Define LUMINSim scripting API (for movement, sensing, etc.) ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 3.2. Implement local scripting sandbox (Python or simplified API) ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 3.3. Add ability to deploy user scripts to control robots in challenge mode ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
=== 4. Simulated Sensor Suite ===&lt;br /&gt;
&lt;br /&gt;
==== 4.1. Implement simulated IMU and encoder feedback ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 4.2. Implement LIDAR (2D/3D) and depth camera sensors ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 4.3. Expose sensor data via scripting API ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 4.4. Visualize sensor outputs in debug/test modes ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
=== 5. Account &amp;amp; Leaderboard System ===&lt;br /&gt;
&lt;br /&gt;
==== 5.1. Build account creation and login system (email/password or OAuth) ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 5.2. Set up secure backend server with user profiles and authentication ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 5.3. Implement leaderboard storage for challenge scores ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 5.4. Create frontend UI for viewing and submitting records ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 5.5. Implement reward system hooks (for future prize/cosmetic integration) ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
=== 6. LunaNet / Artemis Protocol Simulation ===&lt;br /&gt;
See [[LUMIN]] for more information.&lt;br /&gt;
&lt;br /&gt;
==== 6.1. Define safety zone data format and map overlay ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 6.2. Define safety zone defaults and rules ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 6.3. Notify players of violations with UI feedback or in-sim events ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 6.4. Enforce safety zones (LAMP intervention, LunaNet cutoffs) ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 6.5. Log compliance for integration with challenge scoring ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
=== 7. Steam &amp;amp; Web Demo Packaging ===&lt;br /&gt;
&lt;br /&gt;
==== 7.1. Configure Godot project export for Steam ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 7.2. Create stripped-down web demo with limited map and challenge ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 7.3. Prepare demo marketing assets (logo, screenshots, description) ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 7.4. Set up Steam store page and submission ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 7.5. Deploy web demo on auroraroboticslab.com or similar ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
=== 8. Testing &amp;amp; QA ===&lt;br /&gt;
&lt;br /&gt;
==== 8.1. Write unit tests for API and terrain loading ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 8.2. Conduct user testing of challenge flows and scripting ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 8.3. Optimize performance for low-end systems (especially web demo) ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 8.4. Fix usability issues and polish UI for MVP release ====&lt;br /&gt;
WIP&lt;/div&gt;</summary>
		<author><name>Acmattson3</name></author>
	</entry>
	<entry>
		<id>https://aurorarobotics.sssn.us/index.php?title=LUMINSim&amp;diff=818</id>
		<title>LUMINSim</title>
		<link rel="alternate" type="text/html" href="https://aurorarobotics.sssn.us/index.php?title=LUMINSim&amp;diff=818"/>
		<updated>2025-07-09T21:47:52Z</updated>

		<summary type="html">&lt;p&gt;Acmattson3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;LUMINSim (AKA GodotRobot)&amp;lt;/h1&amp;gt;&lt;br /&gt;
[[File:Astronaut Cinematic.png|alt=The LUMINSim astronaut standing on the edge of Shackleton crater.|thumb|The LUMINSim astronaut standing on the edge of Shackleton crater.]]&lt;br /&gt;
&amp;lt;p&amp;gt;&#039;&#039;&#039;Developers:&#039;&#039;&#039; Visit [[LUMINSim Documentation]] for more detailed information about LUMINSim&#039;s inner workings and how to get started with development.&amp;lt;/p&amp;gt;&lt;br /&gt;
[[File:Astra Digging.png|alt=The Astra robot digging in LUMINSim.|thumb|The Astra robot digging in LUMINSim.]]&lt;br /&gt;
&amp;lt;h2&amp;gt;Overview&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;LUMINSim&amp;lt;/strong&amp;gt; (Lunar Mining and Infrastructure Network Simulator) is an [https://github.com/auroraroboticslab/godotrobot/ open source] lunar robotic simulator developed by Aurora Robotics using [https://godotengine.org/ Godot 4.4]. It currently serves as a tool for testing and refining robots and their operations in a simulated lunar environment. We aim to make LUMINSim a commercially available product (see [[LUMINSim#Current Status and Development|Current Status and Development]]) to assist us in research and testing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;LUMINSim allows us to test new [[L.A.M.P: Lunar, Autonomous, Modular Platform|LAMP]] candidates. [[Astra]] was the first [[L.A.M.P: Lunar, Autonomous, Modular Platform|LAMP]] candidate, but LUMINSim helped us identify fundamental flaws in its design.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Vision ==&lt;br /&gt;
Our vision is to &#039;&#039;&#039;release LUMINSim on Steam as a commercial-ready, full-featured lunar robotics simulator.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Terrain Streaming System:&#039;&#039;&#039; A chunk-style terrain download architecture (glTF/GLB) so clients fetch precomputed lunar terrain from a server (rather than generating them locally).&lt;br /&gt;
* &#039;&#039;&#039;In-Sim Challenges:&#039;&#039;&#039; Challenge modes like fastest unloading, excavation, or structure assembly; enable players to script robot behaviors via accessible client APIs. Useful for testing [[L.A.M.P: Lunar, Autonomous, Modular Platform|LAMP]] candidates and getting useful feedback and data.&lt;br /&gt;
* &#039;&#039;&#039;Realistic Sensors &amp;amp; Automation API:&#039;&#039;&#039; Realistic sensors (LIDAR, depth cams, IMUs, encoders, etc.) and a control API for user-coded autopilots (over local MQTT/websocket?). The ability to send commands over local connections allows users to utilize &#039;&#039;&#039;any programming language&#039;&#039;&#039; with networking capabilities to talk directly to the simulator.&lt;br /&gt;
* &#039;&#039;&#039;Leaderboard &amp;amp; Accounts:&#039;&#039;&#039; An account system and integrated leaderboard with reward mechanisms (gift cards, in-game cosmetics/land) for the previously mentioned challenges, as well as regular gameplay (i.e., building up your own moon base on your allocated zone), to support competitive play that boosts our research.&lt;br /&gt;
* &#039;&#039;&#039;Protocol Compliance:&#039;&#039;&#039; Realistically enforced LunaNet/Artemis Accords-style safety zones (see [[LUMIN]]) in gameplay to simulate real-world compliance. Allow risk-and-reward scenarios where players can challenge others’ zones, with consequences like protocol bans, network restrictions, and in-sim enforcement via [[L.A.M.P: Lunar, Autonomous, Modular Platform|LAMP]] robots, while also testing my ([[User:Acmattson3|Andrew Mattson]]&#039;s) thesis work.&lt;br /&gt;
* &#039;&#039;&#039;Ownership &amp;amp; Economy:&#039;&#039;&#039; Create an in-game currency and a system for earning/purchasing lunar land, managing modular base construction (see [https://github.com/auroraroboticslab/buildot/ Buildot]), and calling down/sending up landers (with semi-realistic, or at least proportional wait times?) to get more equipment or send up materials for in-game money.&lt;br /&gt;
&lt;br /&gt;
For more in-depth information about the future of LUMINSim, see the [[LUMINSim Documentation#Future Work|LUMINSim documentation&#039;s future work section]].&amp;lt;h2&amp;gt;Features&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Playable characters:&lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;The [[L.A.M.P: Lunar, Autonomous, Modular Platform|&amp;lt;strong&amp;gt;LAMP&amp;amp;nbsp;v1&amp;lt;/strong&amp;gt; (Astra)]] rover&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;[[Excahauler]]&amp;lt;/strong&amp;gt; (in progress; no fork/dump yet)&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Procedurally animated &amp;lt;strong&amp;gt;astronaut&amp;lt;/strong&amp;gt; character&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Deformable lunar terrain&amp;lt;/strong&amp;gt; based on NASA height‑map data, with excavation and dirtball re‑merging.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Modular tool attachments&amp;lt;/strong&amp;gt; (bucket, forks, saw blade) connected via a ToolCoupler.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Power system&amp;lt;/strong&amp;gt; featuring rechargeable batteries, charging stations, and solar panels.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Multiplayer networking&amp;lt;/strong&amp;gt; with host/join menus and synchronized objects.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;User interface with rebindable controls, on‑screen joystick support, and FPS display.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Utility scenes such as a brick maker, tool spawner, and dirt spawner.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;First‑person, third‑person, and spectator free‑camera modes.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;h2&amp;gt;Current Status and Development&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;LUMINSim is currently in its alpha stage. Ongoing development is aimed at developing LUMINSim into a commercial product available on Steam and on the web. The current idea is to have players join to develop their own lunar zones and compete in challenges that assist us in our research. LUMINSim will also continue to serve as a testbed for validating new [[L.A.M.P: Lunar, Autonomous, Modular Platform|LAMP]] candidates and other lunar technologies, especially as users test each candidate&#039;s limits.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For more information on the status of LUMINSim&#039;s development, see the [[LUMINSim Documentation|LUMINSim Documentation page]].&amp;lt;/p&amp;gt;&lt;/div&gt;</summary>
		<author><name>Acmattson3</name></author>
	</entry>
	<entry>
		<id>https://aurorarobotics.sssn.us/index.php?title=LUMINSim_Documentation&amp;diff=817</id>
		<title>LUMINSim Documentation</title>
		<link rel="alternate" type="text/html" href="https://aurorarobotics.sssn.us/index.php?title=LUMINSim_Documentation&amp;diff=817"/>
		<updated>2025-07-09T21:26:55Z</updated>

		<summary type="html">&lt;p&gt;Acmattson3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= LUMINSim Documentation =&lt;br /&gt;
This is an ongoing page as I ([[User:Acmattson3|Andrew Mattson]]) document [[LUMINSim]]&#039;s current systems. This page is a &#039;&#039;major&#039;&#039; work in progress; feel free to add to it!&lt;br /&gt;
&lt;br /&gt;
Going forward, I hope to add in-depth descriptions of the inner workings of each major system, including:&lt;br /&gt;
* Power&lt;br /&gt;
* Tools and tool swapping&lt;br /&gt;
* Terrain&lt;br /&gt;
* Multiplayer&lt;br /&gt;
* Each user-controlled scene (robots and astronaut)&lt;br /&gt;
* The UI (multiplayer menu, settings menu, keybind menu)&lt;br /&gt;
* Each (largely) independent scene and corresponding system(s) (brick maker, dirt spawner, tool spawner, etc.)&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
To learn how to get started with development yourself, [https://github.com/AuroraRoboticsLab/GodotRobot/blob/main/README.md visit the repository&#039;s README] and follow the steps there to get the project set up.&lt;br /&gt;
&lt;br /&gt;
== Known Issues ==&lt;br /&gt;
The following are known issues that continuously plague the simulator.&lt;br /&gt;
&lt;br /&gt;
=== Major Issues ===&lt;br /&gt;
Major issues are detrimental to fundamental functionalities of the simulator. Generally they have no known fix without major redesign of the system itself and adjacent systems.&lt;br /&gt;
&lt;br /&gt;
* With no consistency or known cause, some BetterHingeJoint3D (see [[LUMINSim Documentation#Classes|Classes]]) joints are floppy noodles. If you create a joint and it works at first, it will continue to work, but if it is a floppy noodle at first, it will always be a floppy noodle. Deleting and re-instantiating the joint scene does not seem to work.&lt;br /&gt;
&lt;br /&gt;
=== Minor Issues ===&lt;br /&gt;
Minor issues are just annoying. Generally they have workarounds or can simply be ignored. &lt;br /&gt;
&lt;br /&gt;
* The multiplayer synchronizers throw errors when connecting/disconnecting. No impact on multiplayer functionalities has been observed.&lt;br /&gt;
&lt;br /&gt;
== Repository Structure ==&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;src/&amp;lt;/code&amp;gt;&#039;&#039;&#039; – C++ GDExtension code for terrain and registration. Likely to be deprecated. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Godot project containing levels, assets, and GDScript systems.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;export_presets.cfg&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Information for Godot on how to export the project into platform-native forms. Created automatically by the Godot export menu.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;game_manager.gd&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Handles the majority of the multiplayer logic, especially the sending of data between the clients and the server. See [[LUMINSim Documentation#Networking and Multiplayer|Networking and Multiplayer]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;project.godot&amp;lt;/code&amp;gt;&#039;&#039;&#039; – The main project file. Contains general project configurations and properties. This is the primary reference point for the Godot Engine when developing this project.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/astra&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the drivable [[LUMINSim Documentation#Astra Robot|Astra]] robot.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/astronaut&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the in-game, procedurally-animated astronaut character. See [[LUMINSim Documentation#Astronaut Character|Astronaut Character]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/bin&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the compiled GDExtension binaries. Likely to be deprecated. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/components&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains components or component-like scenes and related files. See [[LUMINSim Documentation#Classes|Classes]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/environment&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files for the skybox (i.e., the stars in the sky).&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/excahauler&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the drivable [[LUMINSim Documentation#Excahauler Robot|Excahauler]] robot.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/graphics&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains many images for icons and textures, especially for the user interface. See [[LUMINSim Documentation#User Interface|User Interface]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/landers&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains directories for different lunar landers. Landers are currently just static models.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/levels&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains the main playable (i.e., non-UI) scenes and related files. See [[LUMINSim Documentation#Levels|Levels]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/objects&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains non-static (i.e., movable RigidBody3D) objects. See [[LUMINSim Documentation#Objects|Objects]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/static_objects&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains static (i.e., unmovable StaticBody3D) objects and their related code. See [[LUMINSim Documentation#Static Objects|Static Objects]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/terrain&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Scenes and files pertaining to the dynamic (i.e., mineable) terrain. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/terrain_fixed&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Scenes and files pertaining to the static (i.e., unchanging) terrain. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/util&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Scenes and files pertaining to UI as well as other useful scripts. See [[LUMINSim Documentation#User Interface|User Interface]].&lt;br /&gt;
In-depth repository structure documentation (brief descriptions on a per-scene basis) may be created here by anyone.&lt;br /&gt;
&lt;br /&gt;
== Classes ==&lt;br /&gt;
The following scripts (ordered alphabetically, ignoring case conventions) register custom nodes with the keyword &amp;lt;code&amp;gt;class_name&amp;lt;/code&amp;gt;:&lt;br /&gt;
* &amp;lt;code&amp;gt;autonomy_component.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;AutonomyComponent&#039;&#039;&#039; – simple navigation helper for NPC robots. See [[LUMINSim Documentation#Autonomy System|Autonomy System]].&lt;br /&gt;
* &amp;lt;code&amp;gt;better_hinge_joint_3d.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;BetterHingeJoint3D&#039;&#039;&#039; – wrapper over &amp;lt;code&amp;gt;Generic6DOFJoint3D&amp;lt;/code&amp;gt; for motorized joints that better simulate joints driven by hydraulics or linear actuators.&lt;br /&gt;
* &amp;lt;code&amp;gt;bucket_attachment.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;Bucket&#039;&#039;&#039; – digs into terrain to collect dirtballs. See [[LUMINSim Documentation#Tools and Attachments|Tools and Attachments]].&lt;br /&gt;
* &amp;lt;code&amp;gt;charge_component.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;ChargeComponent&#039;&#039;&#039; – tracks battery state and handles charging/discharging. See [[LUMINSim Documentation#Power System|Power System]].&lt;br /&gt;
* &amp;lt;code&amp;gt;connector_component.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;Connector&#039;&#039;&#039; – area detector system useful in many contexts, including tool couplers and charge stations.&lt;br /&gt;
* &amp;lt;code&amp;gt;dem_loader.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;DemLoader&#039;&#039;&#039; – loads fixed DEM heightmaps and extends &amp;lt;code&amp;gt;TerrainStatic256&amp;lt;/code&amp;gt;, which is declared via GDExtensions. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
* &amp;lt;code&amp;gt;forks.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;Forks&#039;&#039;&#039; – tool attachment for moving objects. See [[LUMINSim Documentation#Tools and Attachments|Tools and Attachments]].&lt;br /&gt;
* &amp;lt;code&amp;gt;saw_blade_attachment.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;SawBlade&#039;&#039;&#039; – spinning blade for cutting objects. See [[LUMINSim Documentation#Tools and Attachments|Tools and Attachments]].&lt;br /&gt;
* &amp;lt;code&amp;gt;tool_attachment.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;ToolAttachment&#039;&#039;&#039; – base class for all detachable tools. See [[LUMINSim Documentation#Tools and Attachments|Tools and Attachments]].&lt;br /&gt;
* &amp;lt;code&amp;gt;ToolCouplerComponent.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;ToolCoupler&#039;&#039;&#039; – manages attaching tools to a robot via physics joints. See [[LUMINSim Documentation#Tools and Attachments|Tools and Attachments]].&lt;br /&gt;
== Autonomy System ==&lt;br /&gt;
The current autonomous driving logic is implemented by the &amp;lt;code&amp;gt;AutonomyComponent&amp;lt;/code&amp;gt; script. Every robot scene instantiates this node under its root &amp;lt;code&amp;gt;VehicleBody3D&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Currently, this is how it works:&lt;br /&gt;
&lt;br /&gt;
* A child &amp;lt;code&amp;gt;NavigationAgent3D&amp;lt;/code&amp;gt; computes a path when &amp;lt;code&amp;gt;pathfind_to(target_pos)&amp;lt;/code&amp;gt; is called.&lt;br /&gt;
&lt;br /&gt;
* During &amp;lt;code&amp;gt;_physics_process()&amp;lt;/code&amp;gt; the component steers the robot toward the next path point using the &amp;lt;code&amp;gt;get_drive()&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;get_steer()&amp;lt;/code&amp;gt; helpers.&lt;br /&gt;
&lt;br /&gt;
* The helpers are polled by &amp;lt;code&amp;gt;astra_3d.gd&amp;lt;/code&amp;gt; so the component effectively overrides manual controls when active.&lt;br /&gt;
&lt;br /&gt;
* If progress stalls the script nudges the body upward and forward to get free. Once the destination is reached the &amp;lt;code&amp;gt;have_arrived&amp;lt;/code&amp;gt; flag is set.&lt;br /&gt;
&lt;br /&gt;
=== Proposed External API ===&lt;br /&gt;
To enable players to program autonomy from outside the engine, a new &amp;lt;code&amp;gt;AutonomyServer&amp;lt;/code&amp;gt; node could expose a local API via WebSocket, HTTP, or MQTT. The simulator would send each robot&#039;s state to this server, including data like true position, velocity, tool data, and battery level data, and eventually realistic simulated sensor data. An external script could connect to the API and issue commands such as drive, steer, actuate arm, and so on.&lt;br /&gt;
&lt;br /&gt;
This approach decouples vehicle logic from the engine so users can iterate on autonomy in &#039;&#039;&#039;any language&#039;&#039;&#039; without recompiling the project. The &amp;lt;code&amp;gt;AutonomyServer&amp;lt;/code&amp;gt; would relay commands to the relevant nodes (mirroring the current &amp;lt;code&amp;gt;get_drive()&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;get_steer()&amp;lt;/code&amp;gt; methods) while still supporting multiplayer authority checks via &amp;lt;code&amp;gt;GameManager&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Terrain System (C++) ==&lt;br /&gt;
C++ based GDExtensions currently provide the terrain implementation and will be replaced in the future with a more developer-friendly system.&lt;br /&gt;
&lt;br /&gt;
=== Terrain Nodes ===&lt;br /&gt;
The terrain nodes let you represent static or dynamic terrain. They can be nested in other Node3Ds or offset around, but &#039;&#039;&#039;should not be scaled.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Static Terrain ====&lt;br /&gt;
&amp;lt;code&amp;gt;TerrainStatic256&amp;lt;/code&amp;gt; loads heightmaps and generates render and collision meshes. It stores a 256x256 heightmap, normally loaded from an EXR float height image scaled to -10000 meters (black) to +10000 meters (white).&lt;br /&gt;
&lt;br /&gt;
* `fill_from_image(dem:Image, pixel_spacing:float)` takes an image and pixel spacing in meters to create the height map.&lt;br /&gt;
* `add_mesh(shader:Shader,casts_shadows:bool)` creates a mesh for rendering, using the specified shader.&lt;br /&gt;
* `add_static_collider()` creates a StaticBody3D with a CollisionShape3D of our heightmap, so physics interacts with the terrain.&lt;br /&gt;
&lt;br /&gt;
==== Dynamic Terrain ====&lt;br /&gt;
&amp;lt;code&amp;gt;TerrainSim&amp;lt;/code&amp;gt; extends &amp;lt;code&amp;gt;TerrainStatic256&amp;lt;/code&amp;gt; to simulate excavation, landslides, and merging dirtballs back into the heightmap. It stores a dynamic mineable 256x256 heightmap and inherits from &amp;lt;code&amp;gt;TerrainStatic256&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;excavate_point(world:Vector3, dirtball_offset:Vector3, spawn_vel:Vector3)&amp;lt;/code&amp;gt; to excavate terrain into dirtballs. Any locations needing dirtablls will emit the signal `spawn_dirtball` with a spawn position and velocity as Vector3.&lt;br /&gt;
* &amp;lt;code&amp;gt;try_merge(dirtball:Node3D)&amp;lt;/code&amp;gt; to merge dirtballs back down onto the terrain.&lt;br /&gt;
&lt;br /&gt;
=== Terrain Tools ===&lt;br /&gt;
Scripts such as &amp;lt;code&amp;gt;dirt_spawner.gd&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;dirtball.gd&amp;lt;/code&amp;gt; spawn and merge mobile particles with the dynamic terrain.&lt;br /&gt;
&lt;br /&gt;
== Power System ==&lt;br /&gt;
Movable vehicles include a &#039;&#039;&#039;ChargeComponent&#039;&#039;&#039; (see [[LUMINSim Documentation#Classes|Classes]]) that stores amp-hours and battery percentage. Robots consume charge while driving or actuating, and static objects like charge stations or solar panels provide power when connected.&lt;br /&gt;
&lt;br /&gt;
== Tools and Attachments ==&lt;br /&gt;
All interchangeable implements derive from &#039;&#039;&#039;ToolAttachment&#039;&#039;&#039;. Robot arms have &#039;&#039;&#039;ToolCoupler&#039;&#039;&#039; nodes that detect nearby &#039;&#039;&#039;Connector&#039;&#039;&#039; areas and create physics joints to attach or detach tools. Available tools include the Bucket, Forks, and SawBlade (see [[LUMINSim Documentation#Excavation Tools|Excavation Tools]] under [[LUMINSim Documentation#Robot Systems|Robot Systems]]). &amp;lt;code&amp;gt;tool_spawner.gd&amp;lt;/code&amp;gt; respawns tools removed from its bays. To find where each of these classes are declares, see [[LUMINSim Documentation#Classes|Classes]]. &lt;br /&gt;
&lt;br /&gt;
== Robot Systems ==&lt;br /&gt;
=== [[Astra]] Robot ===&lt;br /&gt;
The main scene is &amp;lt;code&amp;gt;astra_3d.tscn&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;astra_3d.gd&amp;lt;/code&amp;gt; handles driving, energy usage, and tool attachment. It works with &amp;lt;code&amp;gt;astra_arm_3d.gd&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;astra_hopper_3d.gd&amp;lt;/code&amp;gt; and their associated &amp;lt;code&amp;gt;.tscn&amp;lt;/code&amp;gt; files for the robot&#039;s arm and hopper.&lt;br /&gt;
&lt;br /&gt;
=== Astronaut Character ===&lt;br /&gt;
&amp;lt;code&amp;gt;astronaut_character_3d.gd&amp;lt;/code&amp;gt; provides walking and camera control for a procedurally animated astronaut. We hope to implement VR for the astronaut in the future.&lt;br /&gt;
&lt;br /&gt;
=== Excavation Tools ===&lt;br /&gt;
Attachments such as the bucket, forks, and saw blade extend &#039;&#039;&#039;ToolAttachment&#039;&#039;&#039; (see [[LUMINSim Documentation#Classes|Classes]]) for various tasks. The files for these attachments are currently in [[LUMINSim Documentation#Astra Robot|Astra]]&#039;s directory, but this is subject to change.&lt;br /&gt;
&lt;br /&gt;
=== [[Excahauler]] Robot ===&lt;br /&gt;
The main scene is &amp;lt;code&amp;gt;excahauler_3d.tscn&amp;lt;/code&amp;gt;. Unlike [[LUMINSim Documentation#Astra Robot|Astra&#039;s implementation]], all functionalities are within a &#039;&#039;single&#039;&#039; &amp;lt;code&amp;gt;.tscn&amp;lt;/code&amp;gt; file and a few associated &amp;lt;code&amp;gt;.gd&amp;lt;/code&amp;gt; files. Currently, only Excahauler&#039;s main arm (boom, stick, and tilt) is implemented, as trying to set up the scoop (fork and dump) joints in an identical way results in uncontrollable, noodle-like joints (See [[LUMINSim Documentation#Major Issues|Major Issues]]).&lt;br /&gt;
&lt;br /&gt;
== Objects ==&lt;br /&gt;
Movable, physics-enabled props used primarily for construction.&lt;br /&gt;
&lt;br /&gt;
* Madsen Cinder Block – a simple RigidBody3D brick spawned by [[LUMINSim Documentation#Static Objects|brick_maker.gd]]. Designed by [[User:Frozenstiff|Elliott Madsen]].&lt;br /&gt;
&lt;br /&gt;
* Truss Modules – sets of 1m and 3m segments with collision shapes for stacking into arches, garages or other structures. These are modeled after [[NASA X-Hab 2025: Modular Robotic Construction#The L-Truss System|the L-Truss design seen in our 2025 X-Hab project]].&lt;br /&gt;
&lt;br /&gt;
== Static Objects ==&lt;br /&gt;
Charge stations and solar panels (see [[LUMINSim Documentation#Power System|Power System]]), tool spawners, and other generally useful environment pieces. These scenes generally work independently of other scenes, and include:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;brick_maker.gd&amp;lt;/code&amp;gt; – creates bricks when filled with loose dirt.&lt;br /&gt;
* &amp;lt;code&amp;gt;tool_spawner.gd&amp;lt;/code&amp;gt; – keeps bays stocked by respawning assigned attachments when they are taken.&lt;br /&gt;
* &amp;lt;code&amp;gt;dirt_spawner.gd&amp;lt;/code&amp;gt; – continuously emits dirtballs for terrain testing, currently toggle-able by pressing &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Networking and Multiplayer ==&lt;br /&gt;
&amp;lt;code&amp;gt;game_manager.gd&amp;lt;/code&amp;gt; manages synchronized player/object data and signals for network updates. &amp;lt;code&amp;gt;multiplayer_menu.gd&amp;lt;/code&amp;gt; lets players host or join games, start sessions, and handle disconnects.&lt;br /&gt;
&lt;br /&gt;
== User Interface ==&lt;br /&gt;
The &amp;lt;code&amp;gt;ui.gd&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;joystick.gd&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;keybinds_menu.gd&amp;lt;/code&amp;gt; scripts provide HUD elements, customizable input bindings, and on-screen controls for mobile users.&lt;br /&gt;
&lt;br /&gt;
=== Command Line Interface ===&lt;br /&gt;
The user interface includes a command line interface (opened by pressing &amp;lt;code&amp;gt;f1&amp;lt;/code&amp;gt; if you are in a local game or are the host) with the following commands:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;goto X Y Z&amp;lt;/code&amp;gt; – Pathfind to the entered coordinates. &#039;&#039;&#039;Not working&#039;&#039;&#039; until a new autonomy system is implemented.&lt;br /&gt;
* &amp;lt;code&amp;gt;respawn&amp;lt;/code&amp;gt; – Teleport back to the starting position.&lt;br /&gt;
* &amp;lt;code&amp;gt;move X Y Z&amp;lt;/code&amp;gt; – Teleport to the given coordinates &#039;&#039;relative&#039;&#039; &#039;&#039;to your current position&#039;&#039;.&lt;br /&gt;
* &amp;lt;code&amp;gt;grav X&amp;lt;/code&amp;gt; – Change the gravity to &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt; m/s&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;tp X Y Z&amp;lt;/code&amp;gt; – Teleport to the given coordinates &#039;&#039;relative to the world origin.&#039;&#039;&lt;br /&gt;
* &amp;lt;code&amp;gt;freecam&amp;lt;/code&amp;gt; – Enter a freecam state.&lt;br /&gt;
* &amp;lt;code&amp;gt;simrate X&amp;lt;/code&amp;gt; – Change the speed of the simulation to &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt; times normal speed.&lt;br /&gt;
* &amp;lt;code&amp;gt;pause&amp;lt;/code&amp;gt; – Pause the simulation. Useful for capturing cinematics (freecam functionality still works, for example).&lt;br /&gt;
&lt;br /&gt;
== Cameras and Controls ==&lt;br /&gt;
&amp;lt;code&amp;gt;movable_camera_3d.tscn&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;freecam.tscn&amp;lt;/code&amp;gt; implement user-controlled cameras.&lt;br /&gt;
&lt;br /&gt;
== Levels ==&lt;br /&gt;
Scenes in &amp;lt;code&amp;gt;demo/levels/&amp;lt;/code&amp;gt; (e.g., &amp;lt;code&amp;gt;main3D.tscn&amp;lt;/code&amp;gt; with script &amp;lt;code&amp;gt;main3D.gd&amp;lt;/code&amp;gt;) instantiate players, objects, and the terrain simulator, driving the overall simulation loop.&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
[https://github.com/auroraroboticslab/godotrobot/ The repository] is under active development. Planned areas of documentation include deeper explanations of the power system, tool workflow, and multiplayer networking. Below are the current plans for [[LUMINSim]] to turn it into a commercial product. All contributions are welcome!&lt;br /&gt;
&lt;br /&gt;
The idea of this breakdown is to first write the idea for implementation under the heading, and then update it over time to reflect the real implementation as it is completed. This might also include changing headings as we progress. These things do not necessarily have to be completed in order, as many systems can be created and made to work together over time. This can then be used as a direct reference for creating documentation once pushed.&lt;br /&gt;
&lt;br /&gt;
=== 1. Terrain Streaming System ===&lt;br /&gt;
&lt;br /&gt;
==== 1.1. Design chunk-based terrain data model (glTF/GLB) ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 1.2. Implement terrain export pipeline (server-side) ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 1.3. Develop server API for terrain distribution ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 1.4. Integrate client-side terrain streaming and chunk loading in Godot ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 1.5. Add terrain caching for offline/local testing ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
=== 2. Challenge Framework ===&lt;br /&gt;
&lt;br /&gt;
==== 2.1. Define challenge types (e.g., unloading, excavation, structure building) ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 2.2. Implement challenge UI and timers ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 2.3. Track and store performance metrics locally ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 2.4. Integrate results with leaderboard backend (see 5.3) ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
=== 3. Robot Autonomy Interface ===&lt;br /&gt;
&lt;br /&gt;
==== 3.1. Define LUMINSim scripting API (for movement, sensing, etc.) ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 3.2. Implement local scripting sandbox (Python or simplified API) ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 3.3. Add ability to deploy user scripts to control robots in challenge mode ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
=== 4. Simulated Sensor Suite ===&lt;br /&gt;
&lt;br /&gt;
==== 4.1. Implement simulated IMU and encoder feedback ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 4.2. Implement LIDAR (2D/3D) and depth camera sensors ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 4.3. Expose sensor data via scripting API ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 4.4. Visualize sensor outputs in debug/test modes ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
=== 5. Account &amp;amp; Leaderboard System ===&lt;br /&gt;
&lt;br /&gt;
==== 5.1. Build account creation and login system (email/password or OAuth) ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 5.2. Set up secure backend server with user profiles and authentication ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 5.3. Implement leaderboard storage for challenge scores ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 5.4. Create frontend UI for viewing and submitting records ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 5.5. Implement reward system hooks (for future prize/cosmetic integration) ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
=== 6. LunaNet / Artemis Protocol Simulation ===&lt;br /&gt;
See [[LUMIN]] for more information.&lt;br /&gt;
&lt;br /&gt;
==== 6.1. Define safety zone data format and map overlay ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 6.2. Define safety zone defaults and rules ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 6.3. Notify players of violations with UI feedback or in-sim events ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 6.4. Enforce safety zones (LAMP intervention, LunaNet cutoffs) ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 6.5. Log compliance for integration with challenge scoring ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
=== 7. Steam &amp;amp; Web Demo Packaging ===&lt;br /&gt;
&lt;br /&gt;
==== 7.1. Configure Godot project export for Steam ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 7.2. Create stripped-down web demo with limited map and challenge ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 7.3. Prepare demo marketing assets (logo, screenshots, description) ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 7.4. Set up Steam store page and submission ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 7.5. Deploy web demo on auroraroboticslab.com or similar ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
=== 8. Testing &amp;amp; QA ===&lt;br /&gt;
&lt;br /&gt;
==== 8.1. Write unit tests for API and terrain loading ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 8.2. Conduct user testing of challenge flows and scripting ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 8.3. Optimize performance for low-end systems (especially web demo) ====&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==== 8.4. Fix usability issues and polish UI for MVP release ====&lt;br /&gt;
WIP&lt;/div&gt;</summary>
		<author><name>Acmattson3</name></author>
	</entry>
	<entry>
		<id>https://aurorarobotics.sssn.us/index.php?title=LUMINSim_Documentation&amp;diff=816</id>
		<title>LUMINSim Documentation</title>
		<link rel="alternate" type="text/html" href="https://aurorarobotics.sssn.us/index.php?title=LUMINSim_Documentation&amp;diff=816"/>
		<updated>2025-07-09T21:13:38Z</updated>

		<summary type="html">&lt;p&gt;Acmattson3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= LUMINSim Documentation =&lt;br /&gt;
This is an ongoing page as I ([[User:Acmattson3|Andrew Mattson]]) document [[LUMINSim]]&#039;s current systems. This page is a &#039;&#039;major&#039;&#039; work in progress; feel free to add to it!&lt;br /&gt;
&lt;br /&gt;
Going forward, I hope to add in-depth descriptions of the inner workings of each major system, including:&lt;br /&gt;
* Power&lt;br /&gt;
* Tools and tool swapping&lt;br /&gt;
* Terrain&lt;br /&gt;
* Multiplayer&lt;br /&gt;
* Each user-controlled scene (robots and astronaut)&lt;br /&gt;
* The UI (multiplayer menu, settings menu, keybind menu)&lt;br /&gt;
* Each (largely) independent scene and corresponding system(s) (brick maker, dirt spawner, tool spawner, etc.)&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
To learn how to get started with development yourself, [https://github.com/AuroraRoboticsLab/GodotRobot/blob/main/README.md visit the repository&#039;s README] and follow the steps there to get the project set up.&lt;br /&gt;
&lt;br /&gt;
== Known Issues ==&lt;br /&gt;
The following are known issues that continuously plague the simulator.&lt;br /&gt;
&lt;br /&gt;
=== Major Issues ===&lt;br /&gt;
Major issues are detrimental to fundamental functionalities of the simulator. Generally they have no known fix without major redesign of the system itself and adjacent systems.&lt;br /&gt;
&lt;br /&gt;
* With no consistency or known cause, some BetterHingeJoint3D (see [[LUMINSim Documentation#Classes|Classes]]) joints are floppy noodles. If you create a joint and it works at first, it will continue to work, but if it is a floppy noodle at first, it will always be a floppy noodle. Deleting and re-instantiating the joint scene does not seem to work.&lt;br /&gt;
&lt;br /&gt;
=== Minor Issues ===&lt;br /&gt;
Minor issues are just annoying. Generally they have workarounds or can simply be ignored. &lt;br /&gt;
&lt;br /&gt;
* The multiplayer synchronizers throw errors when connecting/disconnecting. No impact on multiplayer functionalities has been observed.&lt;br /&gt;
&lt;br /&gt;
== Repository Structure ==&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;src/&amp;lt;/code&amp;gt;&#039;&#039;&#039; – C++ GDExtension code for terrain and registration. Likely to be deprecated. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Godot project containing levels, assets, and GDScript systems.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;export_presets.cfg&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Information for Godot on how to export the project into platform-native forms. Created automatically by the Godot export menu.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;game_manager.gd&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Handles the majority of the multiplayer logic, especially the sending of data between the clients and the server. See [[LUMINSim Documentation#Networking and Multiplayer|Networking and Multiplayer]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;project.godot&amp;lt;/code&amp;gt;&#039;&#039;&#039; – The main project file. Contains general project configurations and properties. This is the primary reference point for the Godot Engine when developing this project.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/astra&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the drivable [[LUMINSim Documentation#Astra Robot|Astra]] robot.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/astronaut&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the in-game, procedurally-animated astronaut character. See [[LUMINSim Documentation#Astronaut Character|Astronaut Character]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/bin&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the compiled GDExtension binaries. Likely to be deprecated. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/components&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains components or component-like scenes and related files. See [[LUMINSim Documentation#Classes|Classes]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/environment&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files for the skybox (i.e., the stars in the sky).&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/excahauler&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the drivable [[LUMINSim Documentation#Excahauler Robot|Excahauler]] robot.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/graphics&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains many images for icons and textures, especially for the user interface. See [[LUMINSim Documentation#User Interface|User Interface]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/landers&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains directories for different lunar landers. Landers are currently just static models.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/levels&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains the main playable (i.e., non-UI) scenes and related files. See [[LUMINSim Documentation#Levels|Levels]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/objects&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains non-static (i.e., movable RigidBody3D) objects. See [[LUMINSim Documentation#Objects|Objects]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/static_objects&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains static (i.e., unmovable StaticBody3D) objects and their related code. See [[LUMINSim Documentation#Static Objects|Static Objects]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/terrain&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Scenes and files pertaining to the dynamic (i.e., mineable) terrain. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/terrain_fixed&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Scenes and files pertaining to the static (i.e., unchanging) terrain. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/util&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Scenes and files pertaining to UI as well as other useful scripts. See [[LUMINSim Documentation#User Interface|User Interface]].&lt;br /&gt;
In-depth repository structure documentation (brief descriptions on a per-scene basis) may be created here by anyone.&lt;br /&gt;
&lt;br /&gt;
== Classes ==&lt;br /&gt;
The following scripts (ordered alphabetically, ignoring case conventions) register custom nodes with the keyword &amp;lt;code&amp;gt;class_name&amp;lt;/code&amp;gt;:&lt;br /&gt;
* &amp;lt;code&amp;gt;autonomy_component.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;AutonomyComponent&#039;&#039;&#039; – simple navigation helper for NPC robots. See [[LUMINSim Documentation#Autonomy System|Autonomy System]].&lt;br /&gt;
* &amp;lt;code&amp;gt;better_hinge_joint_3d.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;BetterHingeJoint3D&#039;&#039;&#039; – wrapper over &amp;lt;code&amp;gt;Generic6DOFJoint3D&amp;lt;/code&amp;gt; for motorized joints that better simulate joints driven by hydraulics or linear actuators.&lt;br /&gt;
* &amp;lt;code&amp;gt;bucket_attachment.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;Bucket&#039;&#039;&#039; – digs into terrain to collect dirtballs. See [[LUMINSim Documentation#Tools and Attachments|Tools and Attachments]].&lt;br /&gt;
* &amp;lt;code&amp;gt;charge_component.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;ChargeComponent&#039;&#039;&#039; – tracks battery state and handles charging/discharging. See [[LUMINSim Documentation#Power System|Power System]].&lt;br /&gt;
* &amp;lt;code&amp;gt;connector_component.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;Connector&#039;&#039;&#039; – area detector system useful in many contexts, including tool couplers and charge stations.&lt;br /&gt;
* &amp;lt;code&amp;gt;dem_loader.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;DemLoader&#039;&#039;&#039; – loads fixed DEM heightmaps and extends &amp;lt;code&amp;gt;TerrainStatic256&amp;lt;/code&amp;gt;, which is declared via GDExtensions. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
* &amp;lt;code&amp;gt;forks.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;Forks&#039;&#039;&#039; – tool attachment for moving objects. See [[LUMINSim Documentation#Tools and Attachments|Tools and Attachments]].&lt;br /&gt;
* &amp;lt;code&amp;gt;saw_blade_attachment.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;SawBlade&#039;&#039;&#039; – spinning blade for cutting objects. See [[LUMINSim Documentation#Tools and Attachments|Tools and Attachments]].&lt;br /&gt;
* &amp;lt;code&amp;gt;tool_attachment.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;ToolAttachment&#039;&#039;&#039; – base class for all detachable tools. See [[LUMINSim Documentation#Tools and Attachments|Tools and Attachments]].&lt;br /&gt;
* &amp;lt;code&amp;gt;ToolCouplerComponent.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;ToolCoupler&#039;&#039;&#039; – manages attaching tools to a robot via physics joints. See [[LUMINSim Documentation#Tools and Attachments|Tools and Attachments]].&lt;br /&gt;
== Autonomy System ==&lt;br /&gt;
The current autonomous driving logic is implemented by the &amp;lt;code&amp;gt;AutonomyComponent&amp;lt;/code&amp;gt; script. Every robot scene instantiates this node under its root &amp;lt;code&amp;gt;VehicleBody3D&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Currently, this is how it works:&lt;br /&gt;
&lt;br /&gt;
* A child &amp;lt;code&amp;gt;NavigationAgent3D&amp;lt;/code&amp;gt; computes a path when &amp;lt;code&amp;gt;pathfind_to(target_pos)&amp;lt;/code&amp;gt; is called.&lt;br /&gt;
&lt;br /&gt;
* During &amp;lt;code&amp;gt;_physics_process()&amp;lt;/code&amp;gt; the component steers the robot toward the next path point using the &amp;lt;code&amp;gt;get_drive()&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;get_steer()&amp;lt;/code&amp;gt; helpers.&lt;br /&gt;
&lt;br /&gt;
* The helpers are polled by &amp;lt;code&amp;gt;astra_3d.gd&amp;lt;/code&amp;gt; so the component effectively overrides manual controls when active.&lt;br /&gt;
&lt;br /&gt;
* If progress stalls the script nudges the body upward and forward to get free. Once the destination is reached the &amp;lt;code&amp;gt;have_arrived&amp;lt;/code&amp;gt; flag is set.&lt;br /&gt;
&lt;br /&gt;
=== Proposed External API ===&lt;br /&gt;
To enable players to program autonomy from outside the engine, a new &amp;lt;code&amp;gt;AutonomyServer&amp;lt;/code&amp;gt; node could expose a local API via WebSocket, HTTP, or MQTT. The simulator would send each robot&#039;s state to this server, including data like true position, velocity, tool data, and battery level data, and eventually realistic simulated sensor data. An external script could connect to the API and issue commands such as drive, steer, actuate arm, and so on.&lt;br /&gt;
&lt;br /&gt;
This approach decouples vehicle logic from the engine so users can iterate on autonomy in &#039;&#039;&#039;any language&#039;&#039;&#039; without recompiling the project. The &amp;lt;code&amp;gt;AutonomyServer&amp;lt;/code&amp;gt; would relay commands to the relevant nodes (mirroring the current &amp;lt;code&amp;gt;get_drive()&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;get_steer()&amp;lt;/code&amp;gt; methods) while still supporting multiplayer authority checks via &amp;lt;code&amp;gt;GameManager&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Terrain System (C++) ==&lt;br /&gt;
C++ based GDExtensions currently provide the terrain implementation and will be replaced in the future with a more developer-friendly system.&lt;br /&gt;
&lt;br /&gt;
=== Terrain Nodes ===&lt;br /&gt;
The terrain nodes let you represent static or dynamic terrain. They can be nested in other Node3Ds or offset around, but &#039;&#039;&#039;should not be scaled.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Static Terrain ====&lt;br /&gt;
&amp;lt;code&amp;gt;TerrainStatic256&amp;lt;/code&amp;gt; loads heightmaps and generates render and collision meshes. It stores a 256x256 heightmap, normally loaded from an EXR float height image scaled to -10000 meters (black) to +10000 meters (white).&lt;br /&gt;
&lt;br /&gt;
* `fill_from_image(dem:Image, pixel_spacing:float)` takes an image and pixel spacing in meters to create the height map.&lt;br /&gt;
* `add_mesh(shader:Shader,casts_shadows:bool)` creates a mesh for rendering, using the specified shader.&lt;br /&gt;
* `add_static_collider()` creates a StaticBody3D with a CollisionShape3D of our heightmap, so physics interacts with the terrain.&lt;br /&gt;
&lt;br /&gt;
==== Dynamic Terrain ====&lt;br /&gt;
&amp;lt;code&amp;gt;TerrainSim&amp;lt;/code&amp;gt; extends &amp;lt;code&amp;gt;TerrainStatic256&amp;lt;/code&amp;gt; to simulate excavation, landslides, and merging dirtballs back into the heightmap. It stores a dynamic mineable 256x256 heightmap and inherits from &amp;lt;code&amp;gt;TerrainStatic256&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;excavate_point(world:Vector3, dirtball_offset:Vector3, spawn_vel:Vector3)&amp;lt;/code&amp;gt; to excavate terrain into dirtballs. Any locations needing dirtablls will emit the signal `spawn_dirtball` with a spawn position and velocity as Vector3.&lt;br /&gt;
* &amp;lt;code&amp;gt;try_merge(dirtball:Node3D)&amp;lt;/code&amp;gt; to merge dirtballs back down onto the terrain.&lt;br /&gt;
&lt;br /&gt;
=== Terrain Tools ===&lt;br /&gt;
Scripts such as &amp;lt;code&amp;gt;dirt_spawner.gd&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;dirtball.gd&amp;lt;/code&amp;gt; spawn and merge mobile particles with the dynamic terrain.&lt;br /&gt;
&lt;br /&gt;
== Power System ==&lt;br /&gt;
Movable vehicles include a &#039;&#039;&#039;ChargeComponent&#039;&#039;&#039; (see [[LUMINSim Documentation#Classes|Classes]]) that stores amp-hours and battery percentage. Robots consume charge while driving or actuating, and static objects like charge stations or solar panels provide power when connected.&lt;br /&gt;
&lt;br /&gt;
== Tools and Attachments ==&lt;br /&gt;
All interchangeable implements derive from &#039;&#039;&#039;ToolAttachment&#039;&#039;&#039;. Robot arms have &#039;&#039;&#039;ToolCoupler&#039;&#039;&#039; nodes that detect nearby &#039;&#039;&#039;Connector&#039;&#039;&#039; areas and create physics joints to attach or detach tools. Available tools include the Bucket, Forks, and SawBlade (see [[LUMINSim Documentation#Excavation Tools|Excavation Tools]] under [[LUMINSim Documentation#Robot Systems|Robot Systems]]). &amp;lt;code&amp;gt;tool_spawner.gd&amp;lt;/code&amp;gt; respawns tools removed from its bays. To find where each of these classes are declares, see [[LUMINSim Documentation#Classes|Classes]]. &lt;br /&gt;
&lt;br /&gt;
== Robot Systems ==&lt;br /&gt;
=== [[Astra]] Robot ===&lt;br /&gt;
The main scene is &amp;lt;code&amp;gt;astra_3d.tscn&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;astra_3d.gd&amp;lt;/code&amp;gt; handles driving, energy usage, and tool attachment. It works with &amp;lt;code&amp;gt;astra_arm_3d.gd&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;astra_hopper_3d.gd&amp;lt;/code&amp;gt; and their associated &amp;lt;code&amp;gt;.tscn&amp;lt;/code&amp;gt; files for the robot&#039;s arm and hopper.&lt;br /&gt;
&lt;br /&gt;
=== Astronaut Character ===&lt;br /&gt;
&amp;lt;code&amp;gt;astronaut_character_3d.gd&amp;lt;/code&amp;gt; provides walking and camera control for a procedurally animated astronaut. We hope to implement VR for the astronaut in the future.&lt;br /&gt;
&lt;br /&gt;
=== Excavation Tools ===&lt;br /&gt;
Attachments such as the bucket, forks, and saw blade extend &#039;&#039;&#039;ToolAttachment&#039;&#039;&#039; (see [[LUMINSim Documentation#Classes|Classes]]) for various tasks. The files for these attachments are currently in [[LUMINSim Documentation#Astra Robot|Astra]]&#039;s directory, but this is subject to change.&lt;br /&gt;
&lt;br /&gt;
=== [[Excahauler]] Robot ===&lt;br /&gt;
The main scene is &amp;lt;code&amp;gt;excahauler_3d.tscn&amp;lt;/code&amp;gt;. Unlike [[LUMINSim Documentation#Astra Robot|Astra&#039;s implementation]], all functionalities are within a &#039;&#039;single&#039;&#039; &amp;lt;code&amp;gt;.tscn&amp;lt;/code&amp;gt; file and a few associated &amp;lt;code&amp;gt;.gd&amp;lt;/code&amp;gt; files. Currently, only Excahauler&#039;s main arm (boom, stick, and tilt) is implemented, as trying to set up the scoop (fork and dump) joints in an identical way results in uncontrollable, noodle-like joints (See [[LUMINSim Documentation#Major Issues|Major Issues]]).&lt;br /&gt;
&lt;br /&gt;
== Objects ==&lt;br /&gt;
Movable, physics-enabled props used primarily for construction.&lt;br /&gt;
&lt;br /&gt;
* Madsen Cinder Block – a simple RigidBody3D brick spawned by [[LUMINSim Documentation#Static Objects|brick_maker.gd]]. Designed by [[User:Frozenstiff|Elliott Madsen]].&lt;br /&gt;
&lt;br /&gt;
* Truss Modules – sets of 1m and 3m segments with collision shapes for stacking into arches, garages or other structures. These are modeled after [[NASA X-Hab 2025: Modular Robotic Construction#The L-Truss System|the L-Truss design seen in our 2025 X-Hab project]].&lt;br /&gt;
&lt;br /&gt;
== Static Objects ==&lt;br /&gt;
Charge stations and solar panels (see [[LUMINSim Documentation#Power System|Power System]]), tool spawners, and other generally useful environment pieces. These scenes generally work independently of other scenes, and include:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;brick_maker.gd&amp;lt;/code&amp;gt; – creates bricks when filled with loose dirt.&lt;br /&gt;
* &amp;lt;code&amp;gt;tool_spawner.gd&amp;lt;/code&amp;gt; – keeps bays stocked by respawning assigned attachments when they are taken.&lt;br /&gt;
* &amp;lt;code&amp;gt;dirt_spawner.gd&amp;lt;/code&amp;gt; – continuously emits dirtballs for terrain testing, currently toggle-able by pressing &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Networking and Multiplayer ==&lt;br /&gt;
&amp;lt;code&amp;gt;game_manager.gd&amp;lt;/code&amp;gt; manages synchronized player/object data and signals for network updates. &amp;lt;code&amp;gt;multiplayer_menu.gd&amp;lt;/code&amp;gt; lets players host or join games, start sessions, and handle disconnects.&lt;br /&gt;
&lt;br /&gt;
== User Interface ==&lt;br /&gt;
The &amp;lt;code&amp;gt;ui.gd&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;joystick.gd&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;keybinds_menu.gd&amp;lt;/code&amp;gt; scripts provide HUD elements, customizable input bindings, and on-screen controls for mobile users.&lt;br /&gt;
&lt;br /&gt;
=== Command Line Interface ===&lt;br /&gt;
The user interface includes a command line interface (opened by pressing &amp;lt;code&amp;gt;f1&amp;lt;/code&amp;gt; if you are in a local game or are the host) with the following commands:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;goto X Y Z&amp;lt;/code&amp;gt; – Pathfind to the entered coordinates. &#039;&#039;&#039;Not working&#039;&#039;&#039; until a new autonomy system is implemented.&lt;br /&gt;
* &amp;lt;code&amp;gt;respawn&amp;lt;/code&amp;gt; – Teleport back to the starting position.&lt;br /&gt;
* &amp;lt;code&amp;gt;move X Y Z&amp;lt;/code&amp;gt; – Teleport to the given coordinates &#039;&#039;relative&#039;&#039; &#039;&#039;to your current position&#039;&#039;.&lt;br /&gt;
* &amp;lt;code&amp;gt;grav X&amp;lt;/code&amp;gt; – Change the gravity to &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt; m/s&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;tp X Y Z&amp;lt;/code&amp;gt; – Teleport to the given coordinates &#039;&#039;relative to the world origin.&#039;&#039;&lt;br /&gt;
* &amp;lt;code&amp;gt;freecam&amp;lt;/code&amp;gt; – Enter a freecam state.&lt;br /&gt;
* &amp;lt;code&amp;gt;simrate X&amp;lt;/code&amp;gt; – Change the speed of the simulation to &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt; times normal speed.&lt;br /&gt;
* &amp;lt;code&amp;gt;pause&amp;lt;/code&amp;gt; – Pause the simulation. Useful for capturing cinematics (freecam functionality still works, for example).&lt;br /&gt;
&lt;br /&gt;
== Cameras and Controls ==&lt;br /&gt;
&amp;lt;code&amp;gt;movable_camera_3d.tscn&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;freecam.tscn&amp;lt;/code&amp;gt; implement user-controlled cameras.&lt;br /&gt;
&lt;br /&gt;
== Levels ==&lt;br /&gt;
Scenes in &amp;lt;code&amp;gt;demo/levels/&amp;lt;/code&amp;gt; (e.g., &amp;lt;code&amp;gt;main3D.tscn&amp;lt;/code&amp;gt; with script &amp;lt;code&amp;gt;main3D.gd&amp;lt;/code&amp;gt;) instantiate players, objects, and the terrain simulator, driving the overall simulation loop.&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
The repository is under active development. Planned areas of documentation include deeper explanations of the power system, tool workflow, and multiplayer networking. Contributions are welcome!&lt;/div&gt;</summary>
		<author><name>Acmattson3</name></author>
	</entry>
	<entry>
		<id>https://aurorarobotics.sssn.us/index.php?title=LUMINSim_Documentation&amp;diff=815</id>
		<title>LUMINSim Documentation</title>
		<link rel="alternate" type="text/html" href="https://aurorarobotics.sssn.us/index.php?title=LUMINSim_Documentation&amp;diff=815"/>
		<updated>2025-07-08T03:07:58Z</updated>

		<summary type="html">&lt;p&gt;Acmattson3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= LUMINSim Documentation =&lt;br /&gt;
This is an ongoing page as I ([[User:Acmattson3|Andrew Mattson]]) document [[LUMINSim]]&#039;s current systems. This page is a &#039;&#039;major&#039;&#039; work in progress; feel free to add to it!&lt;br /&gt;
&lt;br /&gt;
Going forward, I hope to add in-depth descriptions of the inner workings of each major system, including:&lt;br /&gt;
* Power&lt;br /&gt;
* Tools and tool swapping&lt;br /&gt;
* Terrain&lt;br /&gt;
* Multiplayer&lt;br /&gt;
* Each user-controlled scene (robots and astronaut)&lt;br /&gt;
* The UI (multiplayer menu, settings menu, keybind menu)&lt;br /&gt;
* Each (largely) independent scene and corresponding system(s) (brick maker, dirt spawner, tool spawner, etc.)&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
To learn how to get started with development yourself, [https://github.com/AuroraRoboticsLab/GodotRobot/blob/main/README.md visit the repository&#039;s README] and follow the steps there to get the project set up.&lt;br /&gt;
&lt;br /&gt;
== Known Issues ==&lt;br /&gt;
The following are known issues that continuously plague the simulator.&lt;br /&gt;
&lt;br /&gt;
=== Major Issues ===&lt;br /&gt;
Major issues are detrimental to fundamental functionalities of the simulator. Generally they have no known fix without major redesign of the system itself and adjacent systems.&lt;br /&gt;
&lt;br /&gt;
* With no consistency or known cause, some BetterHingeJoint3D (see [[LUMINSim Documentation#Classes|Classes]]) joints are floppy noodles. If you create a joint and it works at first, it will continue to work, but if it is a floppy noodle at first, it will always be a floppy noodle. Deleting and re-instantiating the joint scene does not seem to work.&lt;br /&gt;
&lt;br /&gt;
=== Minor Issues ===&lt;br /&gt;
Minor issues are just annoying. Generally they have workarounds or can simply be ignored. &lt;br /&gt;
&lt;br /&gt;
* The multiplayer synchronizers throw errors when connecting/disconnecting. No impact on multiplayer functionalities has been observed.&lt;br /&gt;
&lt;br /&gt;
== Repository Structure ==&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;src/&amp;lt;/code&amp;gt;&#039;&#039;&#039; – C++ GDExtension code for terrain and registration. Likely to be deprecated. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Godot project containing levels, assets, and GDScript systems.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;export_presets.cfg&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Information for Godot on how to export the project into platform-native forms. Created automatically by the Godot export menu.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;game_manager.gd&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Handles the majority of the multiplayer logic, especially the sending of data between the clients and the server. See [[LUMINSim Documentation#Networking and Multiplayer|Networking and Multiplayer]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;project.godot&amp;lt;/code&amp;gt;&#039;&#039;&#039; – The main project file. Contains general project configurations and properties. This is the primary reference point for the Godot Engine when developing this project.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/astra&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the drivable [[LUMINSim Documentation#Astra Robot|Astra]] robot.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/astronaut&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the in-game, procedurally-animated astronaut character. See [[LUMINSim Documentation#Astronaut Character|Astronaut Character]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/bin&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the compiled GDExtension binaries. Likely to be deprecated. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/components&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains components or component-like scenes and related files. See [[LUMINSim Documentation#Classes|Classes]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/environment&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files for the skybox (i.e., the stars in the sky).&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/excahauler&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the drivable [[LUMINSim Documentation#Excahauler Robot|Excahauler]] robot.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/graphics&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains many images for icons and textures, especially for the user interface. See [[LUMINSim Documentation#User Interface|User Interface]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/landers&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains directories for different lunar landers. Landers are currently just static models.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/levels&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains the main playable (i.e., non-UI) scenes and related files. See [[LUMINSim Documentation#Levels|Levels]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/objects&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains non-static (i.e., movable RigidBody3D) objects. See [[LUMINSim Documentation#Objects|Objects]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/static_objects&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains static (i.e., unmovable StaticBody3D) objects and their related code. See [[LUMINSim Documentation#Static Objects|Static Objects]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/terrain&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Scenes and files pertaining to the dynamic (i.e., mineable) terrain. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/terrain_fixed&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Scenes and files pertaining to the static (i.e., unchanging) terrain. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/util&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Scenes and files pertaining to UI as well as other useful scripts. See [[LUMINSim Documentation#User Interface|User Interface]] and [[LUMINSim Documentation#Additional Utilities|Additional Utilities]].&lt;br /&gt;
In-depth repository structure documentation (brief descriptions on a per-scene basis) may be created here by anyone.&lt;br /&gt;
&lt;br /&gt;
== Classes ==&lt;br /&gt;
The following scripts (ordered alphabetically, ignoring case conventions) register custom nodes with the keyword &amp;lt;code&amp;gt;class_name&amp;lt;/code&amp;gt;:&lt;br /&gt;
* &amp;lt;code&amp;gt;autonomy_component.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;AutonomyComponent&#039;&#039;&#039; – simple navigation helper for NPC robots. See [[LUMINSim Documentation#Autonomy System|Autonomy System]].&lt;br /&gt;
* &amp;lt;code&amp;gt;better_hinge_joint_3d.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;BetterHingeJoint3D&#039;&#039;&#039; – wrapper over &amp;lt;code&amp;gt;Generic6DOFJoint3D&amp;lt;/code&amp;gt; for motorized joints that better simulate joints driven by hydraulics or linear actuators.&lt;br /&gt;
* &amp;lt;code&amp;gt;bucket_attachment.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;Bucket&#039;&#039;&#039; – digs into terrain to collect dirtballs. See [[LUMINSim Documentation#Tools and Attachments|Tools and Attachments]].&lt;br /&gt;
* &amp;lt;code&amp;gt;charge_component.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;ChargeComponent&#039;&#039;&#039; – tracks battery state and handles charging/discharging. See [[LUMINSim Documentation#Power System|Power System]].&lt;br /&gt;
* &amp;lt;code&amp;gt;connector_component.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;Connector&#039;&#039;&#039; – area detector system useful in many contexts, including tool couplers and charge stations.&lt;br /&gt;
* &amp;lt;code&amp;gt;dem_loader.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;DemLoader&#039;&#039;&#039; – loads fixed DEM heightmaps and extends &amp;lt;code&amp;gt;TerrainStatic256&amp;lt;/code&amp;gt;, which is declared via GDExtensions. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
* &amp;lt;code&amp;gt;forks.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;Forks&#039;&#039;&#039; – tool attachment for moving objects. See [[LUMINSim Documentation#Tools and Attachments|Tools and Attachments]].&lt;br /&gt;
* &amp;lt;code&amp;gt;saw_blade_attachment.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;SawBlade&#039;&#039;&#039; – spinning blade for cutting objects. See [[LUMINSim Documentation#Tools and Attachments|Tools and Attachments]].&lt;br /&gt;
* &amp;lt;code&amp;gt;tool_attachment.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;ToolAttachment&#039;&#039;&#039; – base class for all detachable tools. See [[LUMINSim Documentation#Tools and Attachments|Tools and Attachments]].&lt;br /&gt;
* &amp;lt;code&amp;gt;ToolCouplerComponent.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;ToolCoupler&#039;&#039;&#039; – manages attaching tools to a robot via physics joints. See [[LUMINSim Documentation#Tools and Attachments|Tools and Attachments]].&lt;br /&gt;
== Autonomy System ==&lt;br /&gt;
The current autonomous driving logic is implemented by the &amp;lt;code&amp;gt;AutonomyComponent&amp;lt;/code&amp;gt; script. Every robot scene instantiates this node under its root &amp;lt;code&amp;gt;VehicleBody3D&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Currently, this is how it works:&lt;br /&gt;
&lt;br /&gt;
* A child &amp;lt;code&amp;gt;NavigationAgent3D&amp;lt;/code&amp;gt; computes a path when &amp;lt;code&amp;gt;pathfind_to(target_pos)&amp;lt;/code&amp;gt; is called.&lt;br /&gt;
&lt;br /&gt;
* During &amp;lt;code&amp;gt;_physics_process()&amp;lt;/code&amp;gt; the component steers the robot toward the next path point using the &amp;lt;code&amp;gt;get_drive()&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;get_steer()&amp;lt;/code&amp;gt; helpers.&lt;br /&gt;
&lt;br /&gt;
* The helpers are polled by &amp;lt;code&amp;gt;astra_3d.gd&amp;lt;/code&amp;gt; so the component effectively overrides manual controls when active.&lt;br /&gt;
&lt;br /&gt;
* If progress stalls the script nudges the body upward and forward to get free. Once the destination is reached the &amp;lt;code&amp;gt;have_arrived&amp;lt;/code&amp;gt; flag is set.&lt;br /&gt;
&lt;br /&gt;
=== Proposed External API ===&lt;br /&gt;
To enable players to program autonomy from outside the engine, a new &amp;lt;code&amp;gt;AutonomyServer&amp;lt;/code&amp;gt; node could expose a local API via WebSocket, HTTP, or MQTT. The simulator would send each robot&#039;s state to this server, including data like true position, velocity, tool data, and battery level data, and eventually realistic simulated sensor data. An external script could connect to the API and issue commands such as drive, steer, actuate arm, and so on.&lt;br /&gt;
&lt;br /&gt;
This approach decouples vehicle logic from the engine so users can iterate on autonomy in &#039;&#039;&#039;any language&#039;&#039;&#039; without recompiling the project. The &amp;lt;code&amp;gt;AutonomyServer&amp;lt;/code&amp;gt; would relay commands to the relevant nodes (mirroring the current &amp;lt;code&amp;gt;get_drive()&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;get_steer()&amp;lt;/code&amp;gt; methods) while still supporting multiplayer authority checks via &amp;lt;code&amp;gt;GameManager&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Terrain System (C++) ==&lt;br /&gt;
C++ based GDExtensions currently provide the terrain implementation and will be replaced in the future with a more developer-friendly system.&lt;br /&gt;
&lt;br /&gt;
=== Terrain Nodes ===&lt;br /&gt;
The terrain nodes let you represent static or dynamic terrain. They can be nested in other Node3Ds or offset around, but &#039;&#039;&#039;should not be scaled.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Static Terrain ====&lt;br /&gt;
&amp;lt;code&amp;gt;TerrainStatic256&amp;lt;/code&amp;gt; loads heightmaps and generates render and collision meshes. It stores a 256x256 heightmap, normally loaded from an EXR float height image scaled to -10000 meters (black) to +10000 meters (white).&lt;br /&gt;
&lt;br /&gt;
* `fill_from_image(dem:Image, pixel_spacing:float)` takes an image and pixel spacing in meters to create the height map.&lt;br /&gt;
* `add_mesh(shader:Shader,casts_shadows:bool)` creates a mesh for rendering, using the specified shader.&lt;br /&gt;
* `add_static_collider()` creates a StaticBody3D with a CollisionShape3D of our heightmap, so physics interacts with the terrain.&lt;br /&gt;
&lt;br /&gt;
==== Dynamic Terrain ====&lt;br /&gt;
&amp;lt;code&amp;gt;TerrainSim&amp;lt;/code&amp;gt; extends &amp;lt;code&amp;gt;TerrainStatic256&amp;lt;/code&amp;gt; to simulate excavation, landslides, and merging dirtballs back into the heightmap. It stores a dynamic mineable 256x256 heightmap and inherits from &amp;lt;code&amp;gt;TerrainStatic256&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;excavate_point(world:Vector3, dirtball_offset:Vector3, spawn_vel:Vector3)&amp;lt;/code&amp;gt; to excavate terrain into dirtballs. Any locations needing dirtablls will emit the signal `spawn_dirtball` with a spawn position and velocity as Vector3.&lt;br /&gt;
* &amp;lt;code&amp;gt;try_merge(dirtball:Node3D)&amp;lt;/code&amp;gt; to merge dirtballs back down onto the terrain.&lt;br /&gt;
&lt;br /&gt;
=== Terrain Tools ===&lt;br /&gt;
Scripts such as &amp;lt;code&amp;gt;dirt_spawner.gd&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;dirtball.gd&amp;lt;/code&amp;gt; spawn and merge mobile particles with the dynamic terrain.&lt;br /&gt;
&lt;br /&gt;
== Power System ==&lt;br /&gt;
Movable vehicles include a &#039;&#039;&#039;ChargeComponent&#039;&#039;&#039; that stores amp-hours and battery percentage. Robots consume charge while driving or actuating, and static objects like charge stations or solar panels provide power when connected.&lt;br /&gt;
&lt;br /&gt;
== Tools and Attachments ==&lt;br /&gt;
All interchangeable implements derive from &#039;&#039;&#039;ToolAttachment&#039;&#039;&#039;. Robot arms have &#039;&#039;&#039;ToolCoupler&#039;&#039;&#039; nodes that detect nearby &#039;&#039;&#039;Connector&#039;&#039;&#039; areas and create physics joints to attach or detach tools. Available tools include the Bucket, Forks, and SawBlade (see [[LUMINSim Documentation#Excavation Tools|Excavation Tools]] under [[LUMINSim Documentation#Robot Systems|Robot Systems]]). &amp;lt;code&amp;gt;tool_spawner.gd&amp;lt;/code&amp;gt; respawns tools removed from its bays.&lt;br /&gt;
&lt;br /&gt;
== Robot Systems ==&lt;br /&gt;
=== [[Astra]] Robot ===&lt;br /&gt;
The main scene is &amp;lt;code&amp;gt;astra_3d.tscn&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;astra_3d.gd&amp;lt;/code&amp;gt; handles driving, energy usage, and tool attachment. It works with &amp;lt;code&amp;gt;astra_arm_3d.gd&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;astra_hopper_3d.gd&amp;lt;/code&amp;gt; and their associated &amp;lt;code&amp;gt;.tscn&amp;lt;/code&amp;gt; files for the robot&#039;s arm and hopper.&lt;br /&gt;
&lt;br /&gt;
=== Astronaut Character ===&lt;br /&gt;
&amp;lt;code&amp;gt;astronaut_character_3d.gd&amp;lt;/code&amp;gt; provides walking and camera control for a procedurally animated astronaut. We hope to implement VR for the astronaut in the future.&lt;br /&gt;
&lt;br /&gt;
=== Excavation Tools ===&lt;br /&gt;
Attachments such as the bucket, forks, and saw blade extend &#039;&#039;&#039;ToolAttachment&#039;&#039;&#039; (see [[LUMINSim Documentation#Classes|Classes]]) for various tasks. The files for these attachments are currently in [[LUMINSim Documentation#Astra Robot|Astra]]&#039;s directory, but this is subject to change.&lt;br /&gt;
&lt;br /&gt;
=== [[Excahauler]] Robot ===&lt;br /&gt;
The main scene is &amp;lt;code&amp;gt;excahauler_3d.tscn&amp;lt;/code&amp;gt;. Unlike [[LUMINSim Documentation#Astra Robot|Astra&#039;s implementation]], all functionalities are within a &#039;&#039;single&#039;&#039; &amp;lt;code&amp;gt;.tscn&amp;lt;/code&amp;gt; file and a few associated &amp;lt;code&amp;gt;.gd&amp;lt;/code&amp;gt; files. Currently, only Excahauler&#039;s main arm (boom, stick, and tilt) is implemented, as trying to set up the scoop (fork and dump) joints in an identical way results in uncontrollable, noodle-like joints (See [[LUMINSim Documentation#Major Issues|Major Issues]]).&lt;br /&gt;
&lt;br /&gt;
== Objects ==&lt;br /&gt;
Movable, physics-enabled props used primarily for construction.&lt;br /&gt;
&lt;br /&gt;
* Madsen Cinder Block – a simple RigidBody3D brick spawned by [[LUMINSim Documentation#Static Objects|brick_maker.gd]]. Designed by [[User:Frozenstiff|Elliott Madsen]].&lt;br /&gt;
&lt;br /&gt;
* Truss Modules – sets of 1m and 3m segments with collision shapes for stacking into arches, garages or other structures. These are modeled after [[NASA X-Hab 2025: Modular Robotic Construction#The L-Truss System|the L-Truss design seen in our 2025 X-Hab project]].&lt;br /&gt;
&lt;br /&gt;
== Static Objects ==&lt;br /&gt;
Charge stations and solar panels (see [[LUMINSim Documentation#Power System|Power System]]), tool spawners, and other generally useful environment pieces. These scenes generally work independently of other scenes, and include:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;brick_maker.gd&amp;lt;/code&amp;gt; – creates bricks when filled with loose dirt.&lt;br /&gt;
* &amp;lt;code&amp;gt;tool_spawner.gd&amp;lt;/code&amp;gt; – keeps bays stocked by respawning assigned attachments when they are taken.&lt;br /&gt;
* &amp;lt;code&amp;gt;dirt_spawner.gd&amp;lt;/code&amp;gt; – continuously emits dirtballs for terrain testing, currently toggle-able by pressing &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Networking and Multiplayer ==&lt;br /&gt;
&amp;lt;code&amp;gt;game_manager.gd&amp;lt;/code&amp;gt; manages synchronized player/object data and signals for network updates. &amp;lt;code&amp;gt;multiplayer_menu.gd&amp;lt;/code&amp;gt; lets players host or join games, start sessions, and handle disconnects.&lt;br /&gt;
&lt;br /&gt;
== User Interface ==&lt;br /&gt;
The &amp;lt;code&amp;gt;ui.gd&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;joystick.gd&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;keybinds_menu.gd&amp;lt;/code&amp;gt; scripts provide HUD elements, customizable input bindings, and optional on-screen controls for mobile users.&lt;br /&gt;
&lt;br /&gt;
== Cameras and Controls ==&lt;br /&gt;
&amp;lt;code&amp;gt;movable_camera_3d.gd&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;freecam.gd&amp;lt;/code&amp;gt; implement user-controlled cameras.&lt;br /&gt;
&lt;br /&gt;
== Levels ==&lt;br /&gt;
Scenes in &amp;lt;code&amp;gt;demo/levels/&amp;lt;/code&amp;gt; (e.g., &amp;lt;code&amp;gt;main3D.tscn&amp;lt;/code&amp;gt; with script &amp;lt;code&amp;gt;main3D.gd&amp;lt;/code&amp;gt;) instantiate players, objects, and the terrain simulator, driving the overall game loop.&lt;br /&gt;
&lt;br /&gt;
== Additional Utilities ==&lt;br /&gt;
Miscellaneous helpers include &amp;lt;code&amp;gt;fps_counter.gd&amp;lt;/code&amp;gt; for performance output and &amp;lt;code&amp;gt;freecam.tscn&amp;lt;/code&amp;gt; which can be spawned via the command console for debugging or spectator play.&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
The repository is under active development. Planned areas of documentation include deeper explanations of the power system, tool workflow, and multiplayer networking. Contributions are welcome.&lt;/div&gt;</summary>
		<author><name>Acmattson3</name></author>
	</entry>
	<entry>
		<id>https://aurorarobotics.sssn.us/index.php?title=LAMP_v1&amp;diff=814</id>
		<title>LAMP v1</title>
		<link rel="alternate" type="text/html" href="https://aurorarobotics.sssn.us/index.php?title=LAMP_v1&amp;diff=814"/>
		<updated>2025-07-08T02:56:59Z</updated>

		<summary type="html">&lt;p&gt;Acmattson3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;LAMP v1 (Astra)&amp;lt;/h1&amp;gt;&lt;br /&gt;
[[File:Astra Digging.png|alt=Astra in LUMINSim, digging on a hill.|thumb|Astra in LUMINSim, digging on a hill.]]&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;LAMP v1, also known as Astra&amp;lt;/strong&amp;gt;, is the first proposed candidate to become [[L.A.M.P: Lunar, Autonomous, Modular Platform|LAMP (Lunar, Autonomous, Modular, Platform)]]. Designed by [[User:Frozenstiff|Elliott Madsen]], Astra was developed in [https://www.autodesk.com/products/fusion-360/overview Fusion360] and tested in &amp;lt;strong&amp;gt;[[LUMINSim]]&amp;lt;/strong&amp;gt; to assess its mining, mobility, and transport capabilities on the lunar surface. This testing revealed core flaws requiring near-complete redesign, which (as of July 3rd, 2025) has yet to be completed.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Design Overview&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modular Tool Coupler ===&lt;br /&gt;
&amp;lt;p&amp;gt;Astra features a single arm equipped with a modular tool coupler, allowing it to utilize any tool designed for it. Unlike &amp;lt;strong&amp;gt;[[Excahauler]]&amp;lt;/strong&amp;gt;, Astra does not have a pre-attached bucket, as it&#039;s design prioritizes modularity. Astra&#039;s tool coupler is located on the end of a two-joint arm and has tilt functionality, providing versatility in operating a range of tools.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modular Bed ===&lt;br /&gt;
On Astra&#039;s back is a modular bed coupler. This coupler allows it to carry a large variety of beds, including but not limited to:&lt;br /&gt;
&lt;br /&gt;
* A hopper-style bed (seen in the photo above; for transporting loose material).&lt;br /&gt;
* A flatbed (for general transport of solid objects).&lt;br /&gt;
* A tool bed (for carrying multiple tool types).&lt;br /&gt;
* A communications relay (possibly with an antenna to be lifted by the arm&#039;s tool coupler).&lt;br /&gt;
&lt;br /&gt;
=== Frame ===&lt;br /&gt;
Astra&#039;s frame was designed to be highly modular while also allowing high mobility across lunar terrain, with emphasis on ease of travel and transport.&amp;lt;h2&amp;gt;Design Flaws and Testing&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;During its development and testing in &amp;lt;strong&amp;gt;[[LUMINSim]]&amp;lt;/strong&amp;gt;, several design flaws in Astra were identified:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;The arm&#039;s hinge point on the frame was positioned too far forward, causing the robot to easily tip over, especially during heavy lifting.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;The original built-in hopper design was deemed inefficient. This was replaced with the aforementioned modular bed interface, but was not enough to save the overall design due to the previous issue.&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;The wheelbase generally struggles in lunar agility.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;These insights have guided plans for design improvements in the next [[L.A.M.P: Lunar, Autonomous, Modular Platform|LAMP]] candidate.&amp;lt;h2&amp;gt;Related&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For more information or to contribute to the development of the LAMP project, visit the team&#039;s [https://github.com/AuroraRoboticsLab GitHub page].&amp;lt;/p&amp;gt;&lt;/div&gt;</summary>
		<author><name>Acmattson3</name></author>
	</entry>
	<entry>
		<id>https://aurorarobotics.sssn.us/index.php?title=LUMINSim_Documentation&amp;diff=813</id>
		<title>LUMINSim Documentation</title>
		<link rel="alternate" type="text/html" href="https://aurorarobotics.sssn.us/index.php?title=LUMINSim_Documentation&amp;diff=813"/>
		<updated>2025-07-08T02:56:36Z</updated>

		<summary type="html">&lt;p&gt;Acmattson3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= LUMINSim Documentation =&lt;br /&gt;
This is an ongoing page as I ([[User:Acmattson3|Andrew Mattson]]) document [[LUMINSim]]&#039;s current systems. This page is a &#039;&#039;major&#039;&#039; work in progress; feel free to add to it!&lt;br /&gt;
&lt;br /&gt;
Going forward, I hope to add in-depth descriptions of the inner workings of each major system, including:&lt;br /&gt;
* Power&lt;br /&gt;
* Tools and tool swapping&lt;br /&gt;
* Terrain&lt;br /&gt;
* Multiplayer&lt;br /&gt;
* Each user-controlled scene (robots and astronaut)&lt;br /&gt;
* The UI (multiplayer menu, settings menu, keybind menu)&lt;br /&gt;
* Each (largely) independent scene and corresponding system(s) (brick maker, dirt spawner, tool spawner, etc.)&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
To learn how to get started with development yourself, [https://github.com/AuroraRoboticsLab/GodotRobot/blob/main/README.md visit the repository&#039;s README] and follow the steps there to get the project set up.&lt;br /&gt;
&lt;br /&gt;
== Known Issues ==&lt;br /&gt;
The following are known issues that continuously plague the simulator.&lt;br /&gt;
&lt;br /&gt;
=== Major Issues ===&lt;br /&gt;
Major issues are detrimental to fundamental functionalities of the simulator. Generally they have no known fix without major redesign of the system itself and adjacent systems.&lt;br /&gt;
&lt;br /&gt;
* With no consistency or known cause, some BetterHingeJoint3D (see [[LUMINSim Documentation#Classes|Classes]]) joints are floppy noodles. If you create a joint and it works at first, it will continue to work, but if it is a floppy noodle at first, it will always be a floppy noodle. Deleting and re-instantiating the joint scene does not seem to work.&lt;br /&gt;
&lt;br /&gt;
=== Minor Issues ===&lt;br /&gt;
Minor issues are just annoying. Generally they have workarounds or can simply be ignored. &lt;br /&gt;
&lt;br /&gt;
* The multiplayer synchronizers throw errors when connecting/disconnecting. No impact on multiplayer functionalities has been observed.&lt;br /&gt;
&lt;br /&gt;
== Repository Structure ==&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;src/&amp;lt;/code&amp;gt;&#039;&#039;&#039; – C++ GDExtension code for terrain and registration. Likely to be deprecated. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Godot project containing levels, assets, and GDScript systems.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;export_presets.cfg&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Information for Godot on how to export the project into platform-native forms. Created automatically by the Godot export menu.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;game_manager.gd&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Handles the majority of the multiplayer logic, especially the sending of data between the clients and the server. See [[LUMINSim Documentation#Networking and Multiplayer|Networking and Multiplayer]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;project.godot&amp;lt;/code&amp;gt;&#039;&#039;&#039; – The main project file. Contains general project configurations and properties. This is the primary reference point for the Godot Engine when developing this project.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/astra&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the drivable [[LUMINSim Documentation#Astra Robot|Astra]] robot.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/astronaut&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the in-game, procedurally-animated astronaut character. See [[LUMINSim Documentation#Astronaut Character|Astronaut Character]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/bin&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the compiled GDExtension binaries. Likely to be deprecated. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/components&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains components or component-like scenes and related files. See [[LUMINSim Documentation#Classes|Classes]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/environment&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files for the skybox (i.e., the stars in the sky).&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/excahauler&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the drivable [[LUMINSim Documentation#Excahauler Robot|Excahauler]] robot.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/graphics&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains many images for icons and textures, especially for the user interface. See [[LUMINSim Documentation#User Interface|User Interface]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/landers&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains directories for different lunar landers. Landers are currently just static models.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/levels&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains the main playable (i.e., non-UI) scenes and related files. See [[LUMINSim Documentation#Levels|Levels]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/objects&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains non-static (i.e., movable RigidBody3D) objects. See [[LUMINSim Documentation#Objects|Objects]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/static_objects&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains static (i.e., unmovable StaticBody3D) objects and their related code. See [[LUMINSim Documentation#Static Objects|Static Objects]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/terrain&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Scenes and files pertaining to the dynamic (i.e., mineable) terrain. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/terrain_fixed&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Scenes and files pertaining to the static (i.e., unchanging) terrain. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/util&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Scenes and files pertaining to UI as well as other useful scripts. See [[LUMINSim Documentation#User Interface|User Interface]] and [[LUMINSim Documentation#Additional Utilities|Additional Utilities]].&lt;br /&gt;
In-depth repository structure documentation (brief descriptions on a per-scene basis) may be created here by anyone.&lt;br /&gt;
&lt;br /&gt;
== Classes ==&lt;br /&gt;
The following scripts (ordered alphabetically, ignoring case conventions) register custom nodes with the keyword &amp;lt;code&amp;gt;class_name&amp;lt;/code&amp;gt;:&lt;br /&gt;
* &amp;lt;code&amp;gt;autonomy_component.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;AutonomyComponent&#039;&#039;&#039; – simple navigation helper for NPC robots. See [[LUMINSim Documentation#Autonomy System|Autonomy System]].&lt;br /&gt;
* &amp;lt;code&amp;gt;better_hinge_joint_3d.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;BetterHingeJoint3D&#039;&#039;&#039; – wrapper over &amp;lt;code&amp;gt;Generic6DOFJoint3D&amp;lt;/code&amp;gt; for motorized joints that better simulate joints driven by hydraulics or linear actuators.&lt;br /&gt;
* &amp;lt;code&amp;gt;bucket_attachment.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;Bucket&#039;&#039;&#039; – digs into terrain to collect dirtballs. See [[LUMINSim Documentation#Tools and Attachments|Tools and Attachments]].&lt;br /&gt;
* &amp;lt;code&amp;gt;charge_component.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;ChargeComponent&#039;&#039;&#039; – tracks battery state and handles charging/discharging. See [[LUMINSim Documentation#Power System|Power System]].&lt;br /&gt;
* &amp;lt;code&amp;gt;connector_component.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;Connector&#039;&#039;&#039; – area detector system useful in many contexts, including tool couplers and charge stations.&lt;br /&gt;
* &amp;lt;code&amp;gt;dem_loader.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;DemLoader&#039;&#039;&#039; – loads fixed DEM heightmaps and extends &amp;lt;code&amp;gt;TerrainStatic256&amp;lt;/code&amp;gt;, which is declared via GDExtensions. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
* &amp;lt;code&amp;gt;forks.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;Forks&#039;&#039;&#039; – tool attachment for moving objects. See [[LUMINSim Documentation#Tools and Attachments|Tools and Attachments]].&lt;br /&gt;
* &amp;lt;code&amp;gt;saw_blade_attachment.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;SawBlade&#039;&#039;&#039; – spinning blade for cutting objects. See [[LUMINSim Documentation#Tools and Attachments|Tools and Attachments]].&lt;br /&gt;
* &amp;lt;code&amp;gt;tool_attachment.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;ToolAttachment&#039;&#039;&#039; – base class for all detachable tools. See [[LUMINSim Documentation#Tools and Attachments|Tools and Attachments]].&lt;br /&gt;
* &amp;lt;code&amp;gt;ToolCouplerComponent.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;ToolCoupler&#039;&#039;&#039; – manages attaching tools to a robot via physics joints. See [[LUMINSim Documentation#Tools and Attachments|Tools and Attachments]].&lt;br /&gt;
== Autonomy System ==&lt;br /&gt;
The current autonomous driving logic is implemented by the &amp;lt;code&amp;gt;AutonomyComponent&amp;lt;/code&amp;gt; script. Every robot scene instantiates this node under its root &amp;lt;code&amp;gt;VehicleBody3D&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Currently, this is how it works:&lt;br /&gt;
&lt;br /&gt;
* A child &amp;lt;code&amp;gt;NavigationAgent3D&amp;lt;/code&amp;gt; computes a path when &amp;lt;code&amp;gt;pathfind_to(target_pos)&amp;lt;/code&amp;gt; is called.&lt;br /&gt;
&lt;br /&gt;
* During &amp;lt;code&amp;gt;_physics_process()&amp;lt;/code&amp;gt; the component steers the robot toward the next path point using the &amp;lt;code&amp;gt;get_drive()&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;get_steer()&amp;lt;/code&amp;gt; helpers.&lt;br /&gt;
&lt;br /&gt;
* The helpers are polled by &amp;lt;code&amp;gt;astra_3d.gd&amp;lt;/code&amp;gt; so the component effectively overrides manual controls when active.&lt;br /&gt;
&lt;br /&gt;
* If progress stalls the script nudges the body upward and forward to get free. Once the destination is reached the &amp;lt;code&amp;gt;have_arrived&amp;lt;/code&amp;gt; flag is set.&lt;br /&gt;
&lt;br /&gt;
=== Proposed External API ===&lt;br /&gt;
To enable players to program autonomy from outside the engine, a new &amp;lt;code&amp;gt;AutonomyServer&amp;lt;/code&amp;gt; node could expose a local API via WebSocket, HTTP, or MQTT. The simulator would send each robot&#039;s state to this server, including data like true position, velocity, tool data, and battery level data, and eventually realistic simulated sensor data. An external script could connect to the API and issue commands such as drive, steer, actuate arm, and so on.&lt;br /&gt;
&lt;br /&gt;
This approach decouples vehicle logic from the engine so users can iterate on autonomy in &#039;&#039;&#039;any language&#039;&#039;&#039; without recompiling the project. The &amp;lt;code&amp;gt;AutonomyServer&amp;lt;/code&amp;gt; would relay commands to the relevant nodes (mirroring the current &amp;lt;code&amp;gt;get_drive()&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;get_steer()&amp;lt;/code&amp;gt; methods) while still supporting multiplayer authority checks via &amp;lt;code&amp;gt;GameManager&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Terrain System (C++) ==&lt;br /&gt;
C++ based GDExtensions currently provide the terrain implementation and will be replaced in the future with a more developer-friendly system.&lt;br /&gt;
&lt;br /&gt;
=== Terrain Nodes ===&lt;br /&gt;
The terrain nodes let you represent static or dynamic terrain. They can be nested in other Node3Ds or offset around, but &#039;&#039;&#039;should not be scaled.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Static Terrain ====&lt;br /&gt;
&amp;lt;code&amp;gt;TerrainStatic256&amp;lt;/code&amp;gt; loads heightmaps and generates render and collision meshes. It stores a 256x256 heightmap, normally loaded from an EXR float height image scaled to -10000 meters (black) to +10000 meters (white).&lt;br /&gt;
&lt;br /&gt;
* `fill_from_image(dem:Image, pixel_spacing:float)` takes an image and pixel spacing in meters to create the height map.&lt;br /&gt;
* `add_mesh(shader:Shader,casts_shadows:bool)` creates a mesh for rendering, using the specified shader.&lt;br /&gt;
* `add_static_collider()` creates a StaticBody3D with a CollisionShape3D of our heightmap, so physics interacts with the terrain.&lt;br /&gt;
&lt;br /&gt;
==== Dynamic Terrain ====&lt;br /&gt;
&amp;lt;code&amp;gt;TerrainSim&amp;lt;/code&amp;gt; extends &amp;lt;code&amp;gt;TerrainStatic256&amp;lt;/code&amp;gt; to simulate excavation, landslides, and merging dirtballs back into the heightmap. It stores a dynamic mineable 256x256 heightmap and inherits from &amp;lt;code&amp;gt;TerrainStatic256&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;excavate_point(world:Vector3, dirtball_offset:Vector3, spawn_vel:Vector3)&amp;lt;/code&amp;gt; to excavate terrain into dirtballs. Any locations needing dirtablls will emit the signal `spawn_dirtball` with a spawn position and velocity as Vector3.&lt;br /&gt;
* &amp;lt;code&amp;gt;try_merge(dirtball:Node3D)&amp;lt;/code&amp;gt; to merge dirtballs back down onto the terrain.&lt;br /&gt;
&lt;br /&gt;
=== Terrain Tools ===&lt;br /&gt;
Scripts such as &amp;lt;code&amp;gt;dirt_spawner.gd&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;dirtball.gd&amp;lt;/code&amp;gt; spawn and merge mobile particles with the dynamic terrain.&lt;br /&gt;
&lt;br /&gt;
== Power System ==&lt;br /&gt;
Movable vehicles include a &#039;&#039;&#039;ChargeComponent&#039;&#039;&#039; that stores amp-hours and battery percentage. Robots consume charge while driving or actuating, and static objects like charge stations or solar panels provide power when connected.&lt;br /&gt;
&lt;br /&gt;
== Tools and Attachments ==&lt;br /&gt;
All interchangeable implements derive from &#039;&#039;&#039;ToolAttachment&#039;&#039;&#039;. Robot arms have &#039;&#039;&#039;ToolCoupler&#039;&#039;&#039; nodes that detect nearby &#039;&#039;&#039;Connector&#039;&#039;&#039; areas and create physics joints to attach or detach tools. Available tools include the Bucket, Forks, and SawBlade (see [[LUMINSim Documentation#Excavation Tools|Excavation Tools]] under [[LUMINSim Documentation#Robot Systems|Robot Systems]]). &amp;lt;code&amp;gt;tool_spawner.gd&amp;lt;/code&amp;gt; respawns tools removed from its bays.&lt;br /&gt;
&lt;br /&gt;
== Robot Systems ==&lt;br /&gt;
=== [[Astra]] Robot ===&lt;br /&gt;
The main scene is &amp;lt;code&amp;gt;astra_3d.tscn&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;astra_3d.gd&amp;lt;/code&amp;gt; handles driving, energy usage, and tool attachment. It works with &amp;lt;code&amp;gt;astra_arm_3d.gd&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;astra_hopper_3d.gd&amp;lt;/code&amp;gt; and their associated &amp;lt;code&amp;gt;.tscn&amp;lt;/code&amp;gt; files for the robot&#039;s arm and hopper.&lt;br /&gt;
&lt;br /&gt;
=== Astronaut Character ===&lt;br /&gt;
&amp;lt;code&amp;gt;astronaut_character_3d.gd&amp;lt;/code&amp;gt; provides walking and camera control for a procedurally animated astronaut. We hope to implement VR for the astronaut in the future.&lt;br /&gt;
&lt;br /&gt;
=== Excavation Tools ===&lt;br /&gt;
Attachments such as the bucket, forks, and saw blade extend &#039;&#039;&#039;ToolAttachment&#039;&#039;&#039; (see [[LUMINSim Documentation#Classes|Classes]]) for various tasks. The files for these attachments are currently in [[LUMINSim Documentation#Astra Robot|Astra]]&#039;s directory, but this is subject to change.&lt;br /&gt;
&lt;br /&gt;
=== [[Excahauler]] Robot ===&lt;br /&gt;
The main scene is &amp;lt;code&amp;gt;excahauler_3d.tscn&amp;lt;/code&amp;gt;. Unlike [[LUMINSim Documentation#Astra Robot|Astra&#039;s implementation]], all functionalities are within that &amp;lt;code&amp;gt;.tscn&amp;lt;/code&amp;gt; file and the associated &amp;lt;code&amp;gt;.gd&amp;lt;/code&amp;gt; file. Currently, only Excahauler&#039;s main arm (boom, stick, and tilt) is implemented, as trying to set up the scoop (fork and dump) joints in an identical way results in uncontrollable, noodle-like joints (See [[LUMINSim Documentation#Major Issues|Major Issues]]).&lt;br /&gt;
&lt;br /&gt;
== Objects ==&lt;br /&gt;
Movable, physics-enabled props used primarily for construction.&lt;br /&gt;
&lt;br /&gt;
* Madsen Cinder Block – a simple RigidBody3D brick spawned by [[LUMINSim Documentation#Static Objects|brick_maker.gd]]. Designed by [[User:Frozenstiff|Elliott Madsen]].&lt;br /&gt;
&lt;br /&gt;
* Truss Modules – sets of 1m and 3m segments with collision shapes for stacking into arches, garages or other structures. These are modeled after [[NASA X-Hab 2025: Modular Robotic Construction#The L-Truss System|the L-Truss design seen in our 2025 X-Hab project]].&lt;br /&gt;
&lt;br /&gt;
== Static Objects ==&lt;br /&gt;
Charge stations and solar panels (see [[LUMINSim Documentation#Power System|Power System]]), tool spawners, and other generally useful environment pieces. These scenes generally work independently of other scenes, and include:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;brick_maker.gd&amp;lt;/code&amp;gt; – creates bricks when filled with loose dirt.&lt;br /&gt;
* &amp;lt;code&amp;gt;tool_spawner.gd&amp;lt;/code&amp;gt; – keeps bays stocked by respawning assigned attachments when they are taken.&lt;br /&gt;
* &amp;lt;code&amp;gt;dirt_spawner.gd&amp;lt;/code&amp;gt; – continuously emits dirtballs for terrain testing, currently toggle-able by pressing &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Networking and Multiplayer ==&lt;br /&gt;
&amp;lt;code&amp;gt;game_manager.gd&amp;lt;/code&amp;gt; manages synchronized player/object data and signals for network updates. &amp;lt;code&amp;gt;multiplayer_menu.gd&amp;lt;/code&amp;gt; lets players host or join games, start sessions, and handle disconnects.&lt;br /&gt;
&lt;br /&gt;
== User Interface ==&lt;br /&gt;
The &amp;lt;code&amp;gt;ui.gd&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;joystick.gd&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;keybinds_menu.gd&amp;lt;/code&amp;gt; scripts provide HUD elements, customizable input bindings, and optional on-screen controls for mobile users.&lt;br /&gt;
&lt;br /&gt;
== Cameras and Controls ==&lt;br /&gt;
&amp;lt;code&amp;gt;movable_camera_3d.gd&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;freecam.gd&amp;lt;/code&amp;gt; implement user-controlled cameras.&lt;br /&gt;
&lt;br /&gt;
== Levels ==&lt;br /&gt;
Scenes in &amp;lt;code&amp;gt;demo/levels/&amp;lt;/code&amp;gt; (e.g., &amp;lt;code&amp;gt;main3D.tscn&amp;lt;/code&amp;gt; with script &amp;lt;code&amp;gt;main3D.gd&amp;lt;/code&amp;gt;) instantiate players, objects, and the terrain simulator, driving the overall game loop.&lt;br /&gt;
&lt;br /&gt;
== Additional Utilities ==&lt;br /&gt;
Miscellaneous helpers include &amp;lt;code&amp;gt;fps_counter.gd&amp;lt;/code&amp;gt; for performance output and &amp;lt;code&amp;gt;freecam.tscn&amp;lt;/code&amp;gt; which can be spawned via the command console for debugging or spectator play.&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
The repository is under active development. Planned areas of documentation include deeper explanations of the power system, tool workflow, and multiplayer networking. Contributions are welcome.&lt;/div&gt;</summary>
		<author><name>Acmattson3</name></author>
	</entry>
	<entry>
		<id>https://aurorarobotics.sssn.us/index.php?title=LUMINSim_Documentation&amp;diff=812</id>
		<title>LUMINSim Documentation</title>
		<link rel="alternate" type="text/html" href="https://aurorarobotics.sssn.us/index.php?title=LUMINSim_Documentation&amp;diff=812"/>
		<updated>2025-07-08T02:53:22Z</updated>

		<summary type="html">&lt;p&gt;Acmattson3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= LUMINSim Documentation =&lt;br /&gt;
This is an ongoing page as I ([[User:Acmattson3|Andrew Mattson]]) document [[LUMINSim]]&#039;s current systems. This page is a &#039;&#039;major&#039;&#039; work in progress; feel free to add to it!&lt;br /&gt;
&lt;br /&gt;
Going forward, I hope to add in-depth descriptions of the inner workings of each major system, including:&lt;br /&gt;
* Power&lt;br /&gt;
* Tools and tool swapping&lt;br /&gt;
* Terrain&lt;br /&gt;
* Multiplayer&lt;br /&gt;
* Each user-controlled scene (robots and astronaut)&lt;br /&gt;
* The UI (multiplayer menu, settings menu, keybind menu)&lt;br /&gt;
* Each (largely) independent scene and corresponding system(s) (brick maker, dirt spawner, tool spawner, etc.)&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
To learn how to get started with development yourself, [https://github.com/AuroraRoboticsLab/GodotRobot/blob/main/README.md visit the repository&#039;s README] and follow the steps there to get the project set up.&lt;br /&gt;
&lt;br /&gt;
== Known Issues ==&lt;br /&gt;
The following are known issues that continuously plague the simulator.&lt;br /&gt;
&lt;br /&gt;
=== Major Issues ===&lt;br /&gt;
Major issues are detrimental to fundamental functionalities of the simulator. Generally they have no known fix without major redesign of the system itself and adjacent systems.&lt;br /&gt;
&lt;br /&gt;
* With no consistency or known cause, some BetterHingeJoint3D (see [[LUMINSim Documentation#Classes|Classes]]) joints are floppy noodles. If you create a joint and it works at first, it will continue to work, but if it is a floppy noodle at first, it will always be a floppy noodle. Deleting and re-instantiating the joint scene does not seem to work.&lt;br /&gt;
&lt;br /&gt;
=== Minor Issues ===&lt;br /&gt;
Minor issues are just annoying. Generally they have workarounds or can simply be ignored. &lt;br /&gt;
&lt;br /&gt;
* The multiplayer synchronizers throw errors when connecting/disconnecting. No impact on multiplayer functionalities has been observed.&lt;br /&gt;
&lt;br /&gt;
== Repository Structure ==&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;src/&amp;lt;/code&amp;gt;&#039;&#039;&#039; – C++ GDExtension code for terrain and registration. Likely to be deprecated. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Godot project containing levels, assets, and GDScript systems.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;export_presets.cfg&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Information for Godot on how to export the project into platform-native forms. Created automatically by the Godot export menu.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;game_manager.gd&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Handles the majority of the multiplayer logic, especially the sending of data between the clients and the server. See [[LUMINSim Documentation#Networking and Multiplayer|Networking and Multiplayer]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;project.godot&amp;lt;/code&amp;gt;&#039;&#039;&#039; – The main project file. Contains general project configurations and properties. This is the primary reference point for the Godot Engine when developing this project.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/astra&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the drivable [[LUMINSim Documentation#Astra Robot|Astra]] robot.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/astronaut&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the in-game, procedurally-animated astronaut character. See [[LUMINSim Documentation#Astronaut Character|Astronaut Character]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/bin&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the compiled GDExtension binaries. Likely to be deprecated. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/components&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains components or component-like scenes and related files. See [[LUMINSim Documentation#Classes|Classes]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/environment&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files for the skybox (i.e., the stars in the sky).&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/excahauler&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the drivable [[LUMINSim Documentation#Excahauler Robot|Excahauler]] robot.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/graphics&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains many images for icons and textures, especially for the user interface. See [[LUMINSim Documentation#User Interface|User Interface]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/landers&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains directories for different lunar landers. Landers are currently just static models.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/levels&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains the main playable (i.e., non-UI) scenes and related files. See [[LUMINSim Documentation#Levels|Levels]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/objects&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains non-static (i.e., movable RigidBody3D) objects. See [[LUMINSim Documentation#Objects|Objects]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/static_objects&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains static (i.e., unmovable StaticBody3D) objects and their related code. See [[LUMINSim Documentation#Static Objects|Static Objects]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/terrain&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Scenes and files pertaining to the dynamic (i.e., mineable) terrain. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/terrain_fixed&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Scenes and files pertaining to the static (i.e., unchanging) terrain. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/util&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Scenes and files pertaining to UI as well as other useful scripts. See [[LUMINSim Documentation#User Interface|User Interface]] and [[LUMINSim Documentation#Additional Utilities|Additional Utilities]].&lt;br /&gt;
In-depth repository structure documentation (brief descriptions on a per-scene basis) may be created here by anyone.&lt;br /&gt;
&lt;br /&gt;
== Classes ==&lt;br /&gt;
The following scripts (ordered alphabetically, ignoring case conventions) register custom nodes with the keyword &amp;lt;code&amp;gt;class_name&amp;lt;/code&amp;gt;:&lt;br /&gt;
* &amp;lt;code&amp;gt;autonomy_component.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;AutonomyComponent&#039;&#039;&#039; – simple navigation helper for NPC robots. See [[LUMINSim Documentation#Autonomy System|Autonomy System]].&lt;br /&gt;
* &amp;lt;code&amp;gt;better_hinge_joint_3d.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;BetterHingeJoint3D&#039;&#039;&#039; – wrapper over &amp;lt;code&amp;gt;Generic6DOFJoint3D&amp;lt;/code&amp;gt; for motorized joints that better simulate joints driven by hydraulics or linear actuators.&lt;br /&gt;
* &amp;lt;code&amp;gt;bucket_attachment.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;Bucket&#039;&#039;&#039; – digs into terrain to collect dirtballs. See [[LUMINSim Documentation#Tools and Attachments|Tools and Attachments]].&lt;br /&gt;
* &amp;lt;code&amp;gt;charge_component.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;ChargeComponent&#039;&#039;&#039; – tracks battery state and handles charging/discharging. See [[LUMINSim Documentation#Power System|Power System]].&lt;br /&gt;
* &amp;lt;code&amp;gt;connector_component.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;Connector&#039;&#039;&#039; – area detector system useful in many contexts, including tool couplers and charge stations.&lt;br /&gt;
* &amp;lt;code&amp;gt;dem_loader.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;DemLoader&#039;&#039;&#039; – loads fixed DEM heightmaps and extends &amp;lt;code&amp;gt;TerrainStatic256&amp;lt;/code&amp;gt;, which is declared via GDExtensions. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
* &amp;lt;code&amp;gt;forks.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;Forks&#039;&#039;&#039; – tool attachment for moving objects. See [[LUMINSim Documentation#Tools and Attachments|Tools and Attachments]].&lt;br /&gt;
* &amp;lt;code&amp;gt;saw_blade_attachment.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;SawBlade&#039;&#039;&#039; – spinning blade for cutting objects. See [[LUMINSim Documentation#Tools and Attachments|Tools and Attachments]].&lt;br /&gt;
* &amp;lt;code&amp;gt;tool_attachment.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;ToolAttachment&#039;&#039;&#039; – base class for all detachable tools. See [[LUMINSim Documentation#Tools and Attachments|Tools and Attachments]].&lt;br /&gt;
* &amp;lt;code&amp;gt;ToolCouplerComponent.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;ToolCoupler&#039;&#039;&#039; – manages attaching tools to a robot via physics joints. See [[LUMINSim Documentation#Tools and Attachments|Tools and Attachments]].&lt;br /&gt;
== Autonomy System ==&lt;br /&gt;
The current autonomous driving logic is implemented by the &amp;lt;code&amp;gt;AutonomyComponent&amp;lt;/code&amp;gt; script. Every robot scene instantiates this node under its root &amp;lt;code&amp;gt;VehicleBody3D&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Currently, this is how it works:&lt;br /&gt;
&lt;br /&gt;
* A child &amp;lt;code&amp;gt;NavigationAgent3D&amp;lt;/code&amp;gt; computes a path when &amp;lt;code&amp;gt;pathfind_to(target_pos)&amp;lt;/code&amp;gt; is called.&lt;br /&gt;
&lt;br /&gt;
* During &amp;lt;code&amp;gt;_physics_process()&amp;lt;/code&amp;gt; the component steers the robot toward the next path point using the &amp;lt;code&amp;gt;get_drive()&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;get_steer()&amp;lt;/code&amp;gt; helpers.&lt;br /&gt;
&lt;br /&gt;
* The helpers are polled by &amp;lt;code&amp;gt;astra_3d.gd&amp;lt;/code&amp;gt; so the component effectively overrides manual controls when active.&lt;br /&gt;
&lt;br /&gt;
* If progress stalls the script nudges the body upward and forward to get free. Once the destination is reached the &amp;lt;code&amp;gt;have_arrived&amp;lt;/code&amp;gt; flag is set.&lt;br /&gt;
&lt;br /&gt;
=== Proposed External API ===&lt;br /&gt;
To enable players to program autonomy from outside the engine, a new &amp;lt;code&amp;gt;AutonomyServer&amp;lt;/code&amp;gt; node could expose a local API via WebSocket, HTTP, or MQTT. The simulator would send each robot&#039;s state to this server, including data like true position, velocity, tool data, and battery level data, and eventually realistic simulated sensor data. An external script could connect to the API and issue commands such as drive, steer, actuate arm, and so on.&lt;br /&gt;
&lt;br /&gt;
This approach decouples vehicle logic from the engine so users can iterate on autonomy in &#039;&#039;&#039;any language&#039;&#039;&#039; without recompiling the project. The &amp;lt;code&amp;gt;AutonomyServer&amp;lt;/code&amp;gt; would relay commands to the relevant nodes (mirroring the current &amp;lt;code&amp;gt;get_drive()&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;get_steer()&amp;lt;/code&amp;gt; methods) while still supporting multiplayer authority checks via &amp;lt;code&amp;gt;GameManager&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Terrain System (C++) ==&lt;br /&gt;
C++ based GDExtensions currently provide the terrain implementation and will be replaced in the future with a more developer-friendly system.&lt;br /&gt;
&lt;br /&gt;
=== Terrain Nodes ===&lt;br /&gt;
The terrain nodes let you represent static or dynamic terrain. They can be nested in other Node3Ds or offset around, but &#039;&#039;&#039;should not be scaled.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Static Terrain ====&lt;br /&gt;
&amp;lt;code&amp;gt;TerrainStatic256&amp;lt;/code&amp;gt; loads heightmaps and generates render and collision meshes. It stores a 256x256 heightmap, normally loaded from an EXR float height image scaled to -10000 meters (black) to +10000 meters (white).&lt;br /&gt;
&lt;br /&gt;
* `fill_from_image(dem:Image, pixel_spacing:float)` takes an image and pixel spacing in meters to create the height map.&lt;br /&gt;
* `add_mesh(shader:Shader,casts_shadows:bool)` creates a mesh for rendering, using the specified shader.&lt;br /&gt;
* `add_static_collider()` creates a StaticBody3D with a CollisionShape3D of our heightmap, so physics interacts with the terrain.&lt;br /&gt;
&lt;br /&gt;
==== Dynamic Terrain ====&lt;br /&gt;
&amp;lt;code&amp;gt;TerrainSim&amp;lt;/code&amp;gt; extends &amp;lt;code&amp;gt;TerrainStatic256&amp;lt;/code&amp;gt; to simulate excavation, landslides, and merging dirtballs back into the heightmap. It stores a dynamic mineable 256x256 heightmap and inherits from &amp;lt;code&amp;gt;TerrainStatic256&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;excavate_point(world:Vector3, dirtball_offset:Vector3, spawn_vel:Vector3)&amp;lt;/code&amp;gt; to excavate terrain into dirtballs. Any locations needing dirtablls will emit the signal `spawn_dirtball` with a spawn position and velocity as Vector3.&lt;br /&gt;
* &amp;lt;code&amp;gt;try_merge(dirtball:Node3D)&amp;lt;/code&amp;gt; to merge dirtballs back down onto the terrain.&lt;br /&gt;
&lt;br /&gt;
=== Terrain Tools ===&lt;br /&gt;
Scripts such as &amp;lt;code&amp;gt;dirt_spawner.gd&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;dirtball.gd&amp;lt;/code&amp;gt; spawn and merge mobile particles with the dynamic terrain.&lt;br /&gt;
&lt;br /&gt;
== Power System ==&lt;br /&gt;
Movable vehicles include a &#039;&#039;&#039;ChargeComponent&#039;&#039;&#039; that stores amp-hours and battery percentage. Robots consume charge while driving or actuating, and static objects like charge stations or solar panels provide power when connected.&lt;br /&gt;
&lt;br /&gt;
== Tools and Attachments ==&lt;br /&gt;
All interchangeable implements derive from &#039;&#039;&#039;ToolAttachment&#039;&#039;&#039;. Robot arms have &#039;&#039;&#039;ToolCoupler&#039;&#039;&#039; nodes that detect nearby &#039;&#039;&#039;Connector&#039;&#039;&#039; areas and create physics joints to attach or detach tools. Available tools include the Bucket, Forks, and SawBlade (see [[LUMINSim Documentation#Excavation Tools|Excavation Tools]] under [[LUMINSim Documentation#Robot Systems|Robot Systems]]). &amp;lt;code&amp;gt;tool_spawner.gd&amp;lt;/code&amp;gt; respawns tools removed from its bays.&lt;br /&gt;
&lt;br /&gt;
== Robot Systems ==&lt;br /&gt;
=== [[Astra]] Robot ===&lt;br /&gt;
The main scene is &amp;lt;code&amp;gt;astra_3d.tscn&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;astra_3d.gd&amp;lt;/code&amp;gt; handles driving, energy usage, and tool attachment. It works with &amp;lt;code&amp;gt;astra_arm_3d.gd&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;astra_hopper_3d.gd&amp;lt;/code&amp;gt; and their associated &amp;lt;code&amp;gt;.tscn&amp;lt;/code&amp;gt; files for the robot&#039;s arm and hopper.&lt;br /&gt;
&lt;br /&gt;
=== Astronaut Character ===&lt;br /&gt;
&amp;lt;code&amp;gt;astronaut_character_3d.gd&amp;lt;/code&amp;gt; provides walking and camera control for a procedurally animated astronaut. We hope to implement VR for the astronaut in the future.&lt;br /&gt;
&lt;br /&gt;
=== Excavation Tools ===&lt;br /&gt;
Attachments such as the bucket, forks, and saw blade extend &#039;&#039;&#039;ToolAttachment&#039;&#039;&#039; (see [[LUMINSim Documentation#Classes|Classes]]) for various tasks. The files for these attachments are currently in [[LUMINSim Documentation#Astra Robot|Astra]]&#039;s directory, but this is subject to change.&lt;br /&gt;
&lt;br /&gt;
=== [[Excahauler]] Robot ===&lt;br /&gt;
The main scene is &amp;lt;code&amp;gt;excahauler_3d.tscn&amp;lt;/code&amp;gt;. Unlike [[LUMINSim Documentation#Astra Robot|Astra&#039;s implementation]], all functionalities are within that &amp;lt;code&amp;gt;.tscn&amp;lt;/code&amp;gt; file and the associated &amp;lt;code&amp;gt;.gd&amp;lt;/code&amp;gt; file. Currently, only Excahauler&#039;s main arm (boom, stick, and tilt) is implemented, as trying to set up the scoop (fork and dump) joints in an identical way results in uncontrollable, noodle-like joints (See [[LUMINSim Documentation#Major Issues|Major Issues]]).&lt;br /&gt;
&lt;br /&gt;
== Objects ==&lt;br /&gt;
WIP.&lt;br /&gt;
&lt;br /&gt;
== Static Objects ==&lt;br /&gt;
Charge stations and solar panels (see [[LUMINSim Documentation#Power System|Power System]]), tool spawners, and other generally useful environment pieces. These scenes generally work independently of other scenes, and include:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;brick_maker.gd&amp;lt;/code&amp;gt; – creates bricks when filled with loose dirt.&lt;br /&gt;
* &amp;lt;code&amp;gt;tool_spawner.gd&amp;lt;/code&amp;gt; – keeps bays stocked by respawning assigned attachments when they are taken.&lt;br /&gt;
* &amp;lt;code&amp;gt;dirt_spawner.gd&amp;lt;/code&amp;gt; – continuously emits dirtballs for terrain testing, currently toggle-able by pressing &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Networking and Multiplayer ==&lt;br /&gt;
&amp;lt;code&amp;gt;game_manager.gd&amp;lt;/code&amp;gt; manages synchronized player/object data and signals for network updates. &amp;lt;code&amp;gt;multiplayer_menu.gd&amp;lt;/code&amp;gt; lets players host or join games, start sessions, and handle disconnects.&lt;br /&gt;
&lt;br /&gt;
== User Interface ==&lt;br /&gt;
The &amp;lt;code&amp;gt;ui.gd&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;joystick.gd&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;keybinds_menu.gd&amp;lt;/code&amp;gt; scripts provide HUD elements, customizable input bindings, and optional on-screen controls for mobile users.&lt;br /&gt;
&lt;br /&gt;
== Cameras and Controls ==&lt;br /&gt;
&amp;lt;code&amp;gt;movable_camera_3d.gd&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;freecam.gd&amp;lt;/code&amp;gt; implement user-controlled cameras.&lt;br /&gt;
&lt;br /&gt;
== Levels ==&lt;br /&gt;
Scenes in &amp;lt;code&amp;gt;demo/levels/&amp;lt;/code&amp;gt; (e.g., &amp;lt;code&amp;gt;main3D.tscn&amp;lt;/code&amp;gt; with script &amp;lt;code&amp;gt;main3D.gd&amp;lt;/code&amp;gt;) instantiate players, objects, and the terrain simulator, driving the overall game loop.&lt;br /&gt;
&lt;br /&gt;
== Additional Utilities ==&lt;br /&gt;
Miscellaneous helpers include &amp;lt;code&amp;gt;fps_counter.gd&amp;lt;/code&amp;gt; for performance output and &amp;lt;code&amp;gt;freecam.tscn&amp;lt;/code&amp;gt; which can be spawned via the command console for debugging or spectator play.&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
The repository is under active development. Planned areas of documentation include deeper explanations of the power system, tool workflow, and multiplayer networking. Contributions are welcome.&lt;/div&gt;</summary>
		<author><name>Acmattson3</name></author>
	</entry>
	<entry>
		<id>https://aurorarobotics.sssn.us/index.php?title=LUMINSim_Documentation&amp;diff=811</id>
		<title>LUMINSim Documentation</title>
		<link rel="alternate" type="text/html" href="https://aurorarobotics.sssn.us/index.php?title=LUMINSim_Documentation&amp;diff=811"/>
		<updated>2025-07-08T02:44:20Z</updated>

		<summary type="html">&lt;p&gt;Acmattson3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= LUMINSim Documentation =&lt;br /&gt;
This is an ongoing page as I ([[User:Acmattson3|Andrew Mattson]]) document [[LUMINSim]]&#039;s current systems. This page is a &#039;&#039;major&#039;&#039; work in progress; feel free to add to it!&lt;br /&gt;
&lt;br /&gt;
Going forward, I hope to add in-depth descriptions of the inner workings of each major system, including:&lt;br /&gt;
* Power&lt;br /&gt;
* Tools and tool swapping&lt;br /&gt;
* Terrain&lt;br /&gt;
* Multiplayer&lt;br /&gt;
* Each user-controlled scene (robots and astronaut)&lt;br /&gt;
* The UI (multiplayer menu, settings menu, keybind menu)&lt;br /&gt;
* Each (largely) independent scene and corresponding system(s) (brick maker, dirt spawner, tool spawner, etc.)&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
To learn how to get started with development yourself, [https://github.com/AuroraRoboticsLab/GodotRobot/blob/main/README.md visit the repository&#039;s README] and follow the steps there to get the project set up.&lt;br /&gt;
&lt;br /&gt;
== Known Issues ==&lt;br /&gt;
The following are known issues that continuously plague the simulator.&lt;br /&gt;
&lt;br /&gt;
=== Major Issues ===&lt;br /&gt;
Major issues are detrimental to fundamental functionalities of the simulator. Generally they have no known fix without major redesign of the system itself and adjacent systems.&lt;br /&gt;
&lt;br /&gt;
* With no consistency or known cause, some BetterHingeJoint3D (see [[LUMINSim Documentation#Classes|Classes]]) joints are floppy noodles. If you create a joint and it works at first, it will continue to work, but if it is a floppy noodle at first, it will always be a floppy noodle. Deleting and re-instantiating the joint scene does not seem to work.&lt;br /&gt;
&lt;br /&gt;
=== Minor Issues ===&lt;br /&gt;
Minor issues are just annoying. Generally they have workarounds or can simply be ignored. &lt;br /&gt;
&lt;br /&gt;
* The multiplayer synchronizers throw errors when connecting/disconnecting. No impact on multiplayer functionalities has been observed.&lt;br /&gt;
&lt;br /&gt;
== Repository Structure ==&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;src/&amp;lt;/code&amp;gt;&#039;&#039;&#039; – C++ GDExtension code for terrain and registration. Likely to be deprecated. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Godot project containing levels, assets, and GDScript systems.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;export_presets.cfg&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Information for Godot on how to export the project into platform-native forms. Created automatically by the Godot export menu.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;game_manager.gd&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Handles the majority of the multiplayer logic, especially the sending of data between the clients and the server. See [[LUMINSim Documentation#Networking and Multiplayer|Networking and Multiplayer]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;project.godot&amp;lt;/code&amp;gt;&#039;&#039;&#039; – The main project file. Contains general project configurations and properties. This is the primary reference point for the Godot Engine when developing this project.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/astra&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the drivable [[LUMINSim Documentation#Astra Robot|Astra]] robot.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/astronaut&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the in-game, procedurally-animated astronaut character. See [[LUMINSim Documentation#Astronaut Character|Astronaut Character]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/bin&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the compiled GDExtension binaries. Likely to be deprecated. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/components&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains components or component-like scenes and related files. See [[LUMINSim Documentation#Classes|Classes]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/environment&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files for the skybox (i.e., the stars in the sky).&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/excahauler&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the drivable [[LUMINSim Documentation#Excahauler Robot|Excahauler]] robot.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/graphics&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains many images for icons and textures, especially for the user interface. See [[LUMINSim Documentation#User Interface|User Interface]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/landers&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains directories for different lunar landers. Landers are currently just static models.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/levels&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains the main playable (i.e., non-UI) scenes and related files. See [[LUMINSim Documentation#Levels|Levels]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/objects&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains non-static (i.e., movable RigidBody3D) objects. See [[LUMINSim Documentation#Objects|Objects]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/static_objects&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains static (i.e., unmovable StaticBody3D) objects and their related code. See [[LUMINSim Documentation#Static Objects|Static Objects]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/terrain&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Scenes and files pertaining to the dynamic (i.e., mineable) terrain. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/terrain_fixed&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Scenes and files pertaining to the static (i.e., unchanging) terrain. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/util&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Scenes and files pertaining to UI as well as other useful scripts. See [[LUMINSim Documentation#User Interface|User Interface]] and [[LUMINSim Documentation#Additional Utilities|Additional Utilities]].&lt;br /&gt;
In-depth repository structure documentation (brief descriptions on a per-scene basis) may be created here by anyone.&lt;br /&gt;
&lt;br /&gt;
== Classes ==&lt;br /&gt;
The following scripts (ordered alphabetically, ignoring case conventions) register custom nodes with the keyword &amp;lt;code&amp;gt;class_name&amp;lt;/code&amp;gt;:&lt;br /&gt;
* &amp;lt;code&amp;gt;autonomy_component.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;AutonomyComponent&#039;&#039;&#039; – simple navigation helper for NPC robots. See [[LUMINSim Documentation#Autonomy System|Autonomy System]].&lt;br /&gt;
* &amp;lt;code&amp;gt;better_hinge_joint_3d.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;BetterHingeJoint3D&#039;&#039;&#039; – wrapper over &amp;lt;code&amp;gt;Generic6DOFJoint3D&amp;lt;/code&amp;gt; for motorized joints that better simulate joints driven by hydraulics or linear actuators.&lt;br /&gt;
* &amp;lt;code&amp;gt;bucket_attachment.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;Bucket&#039;&#039;&#039; – digs into terrain to collect dirtballs. See [[LUMINSim Documentation#Tools and Attachments|Tools and Attachments]].&lt;br /&gt;
* &amp;lt;code&amp;gt;charge_component.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;ChargeComponent&#039;&#039;&#039; – tracks battery state and handles charging/discharging. See [[LUMINSim Documentation#Power System|Power System]].&lt;br /&gt;
* &amp;lt;code&amp;gt;connector_component.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;Connector&#039;&#039;&#039; – area detector system useful in many contexts, including tool couplers and charge stations.&lt;br /&gt;
* &amp;lt;code&amp;gt;dem_loader.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;DemLoader&#039;&#039;&#039; – loads fixed DEM heightmaps and extends &amp;lt;code&amp;gt;TerrainStatic256&amp;lt;/code&amp;gt;, which is declared via GDExtensions. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
* &amp;lt;code&amp;gt;forks.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;Forks&#039;&#039;&#039; – tool attachment for moving objects. See [[LUMINSim Documentation#Tools and Attachments|Tools and Attachments]].&lt;br /&gt;
* &amp;lt;code&amp;gt;saw_blade_attachment.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;SawBlade&#039;&#039;&#039; – spinning blade for cutting objects. See [[LUMINSim Documentation#Tools and Attachments|Tools and Attachments]].&lt;br /&gt;
* &amp;lt;code&amp;gt;tool_attachment.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;ToolAttachment&#039;&#039;&#039; – base class for all detachable tools. See [[LUMINSim Documentation#Tools and Attachments|Tools and Attachments]].&lt;br /&gt;
* &amp;lt;code&amp;gt;ToolCouplerComponent.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;ToolCoupler&#039;&#039;&#039; – manages attaching tools to a robot via physics joints. See [[LUMINSim Documentation#Tools and Attachments|Tools and Attachments]].&lt;br /&gt;
== Autonomy System ==&lt;br /&gt;
The current autonomous driving logic is implemented by the &amp;lt;code&amp;gt;AutonomyComponent&amp;lt;/code&amp;gt; script. Every robot scene instantiates this node under its root &amp;lt;code&amp;gt;VehicleBody3D&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Currently, this is how it works:&lt;br /&gt;
&lt;br /&gt;
* A child &amp;lt;code&amp;gt;NavigationAgent3D&amp;lt;/code&amp;gt; computes a path when &amp;lt;code&amp;gt;pathfind_to(target_pos)&amp;lt;/code&amp;gt; is called.&lt;br /&gt;
&lt;br /&gt;
* During &amp;lt;code&amp;gt;_physics_process()&amp;lt;/code&amp;gt; the component steers the robot toward the next path point using the &amp;lt;code&amp;gt;get_drive()&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;get_steer()&amp;lt;/code&amp;gt; helpers.&lt;br /&gt;
&lt;br /&gt;
* The helpers are polled by &amp;lt;code&amp;gt;astra_3d.gd&amp;lt;/code&amp;gt; so the component effectively overrides manual controls when active.&lt;br /&gt;
&lt;br /&gt;
* If progress stalls the script nudges the body upward and forward to get free. Once the destination is reached the &amp;lt;code&amp;gt;have_arrived&amp;lt;/code&amp;gt; flag is set.&lt;br /&gt;
&lt;br /&gt;
=== Proposed External API ===&lt;br /&gt;
To enable players to program autonomy from outside the engine, a new &amp;lt;code&amp;gt;AutonomyServer&amp;lt;/code&amp;gt; node could expose a local API via WebSocket, HTTP, or MQTT. The simulator would send each robot&#039;s state to this server, including data like true position, velocity, tool data, and battery level data, and eventually realistic simulated sensor data. An external script could connect to the API and issue commands such as drive, steer, actuate arm, and so on.&lt;br /&gt;
&lt;br /&gt;
This approach decouples vehicle logic from the engine so users can iterate on autonomy in &#039;&#039;&#039;any language&#039;&#039;&#039; without recompiling the project. The &amp;lt;code&amp;gt;AutonomyServer&amp;lt;/code&amp;gt; would relay commands to the relevant nodes (mirroring the current &amp;lt;code&amp;gt;get_drive()&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;get_steer()&amp;lt;/code&amp;gt; methods) while still supporting multiplayer authority checks via &amp;lt;code&amp;gt;GameManager&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Terrain System (C++) ==&lt;br /&gt;
C++ based GDExtensions currently provide the terrain implementation and may be replaced in the future with a more developer-friendly system.&lt;br /&gt;
&lt;br /&gt;
=== Static Terrain ===&lt;br /&gt;
&amp;lt;code&amp;gt;TerrainStatic256&amp;lt;/code&amp;gt; loads heightmaps and generates render and collision meshes.&lt;br /&gt;
&lt;br /&gt;
=== Dynamic Terrain ===&lt;br /&gt;
&amp;lt;code&amp;gt;TerrainSim&amp;lt;/code&amp;gt; extends &amp;lt;code&amp;gt;TerrainStatic256&amp;lt;/code&amp;gt; to simulate excavation, landslides, and merging dirtballs back into the heightmap.&lt;br /&gt;
&lt;br /&gt;
=== Terrain Tools ===&lt;br /&gt;
Scripts such as &amp;lt;code&amp;gt;dirt_spawner.gd&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;dirtball.gd&amp;lt;/code&amp;gt; spawn and merge mobile particles with the dynamic terrain.&lt;br /&gt;
&lt;br /&gt;
== Power System ==&lt;br /&gt;
Movable vehicles include a &#039;&#039;&#039;ChargeComponent&#039;&#039;&#039; that stores amp-hours and battery percentage. Robots consume charge while driving or actuating, and static objects like charge stations or solar panels provide power when connected.&lt;br /&gt;
&lt;br /&gt;
== Tools and Attachments ==&lt;br /&gt;
All interchangeable implements derive from &#039;&#039;&#039;ToolAttachment&#039;&#039;&#039;. Robot arms have &#039;&#039;&#039;ToolCoupler&#039;&#039;&#039; nodes that detect nearby &#039;&#039;&#039;Connector&#039;&#039;&#039; areas and create physics joints to attach or detach tools. Available tools include the Bucket, Forks, and SawBlade (see [[LUMINSim Documentation#Excavation Tools|Excavation Tools]] under [[LUMINSim Documentation#Robot Systems|Robot Systems]]). &amp;lt;code&amp;gt;tool_spawner.gd&amp;lt;/code&amp;gt; respawns tools removed from its bays.&lt;br /&gt;
&lt;br /&gt;
== Robot Systems ==&lt;br /&gt;
=== [[Astra]] Robot ===&lt;br /&gt;
The main scene is &amp;lt;code&amp;gt;astra_3d.tscn&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;astra_3d.gd&amp;lt;/code&amp;gt; handles driving, energy usage, and tool attachment. It works with &amp;lt;code&amp;gt;astra_arm_3d.gd&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;astra_hopper_3d.gd&amp;lt;/code&amp;gt; and their associated &amp;lt;code&amp;gt;.tscn&amp;lt;/code&amp;gt; files for the robot&#039;s arm and hopper.&lt;br /&gt;
&lt;br /&gt;
=== Astronaut Character ===&lt;br /&gt;
&amp;lt;code&amp;gt;astronaut_character_3d.gd&amp;lt;/code&amp;gt; provides walking and camera control for a procedurally animated astronaut. We hope to implement VR for the astronaut in the future.&lt;br /&gt;
&lt;br /&gt;
=== Excavation Tools ===&lt;br /&gt;
Attachments such as the bucket, forks, and saw blade extend &#039;&#039;&#039;ToolAttachment&#039;&#039;&#039; (see [[LUMINSim Documentation#Classes|Classes]]) for various tasks. The files for these attachments are currently in [[LUMINSim Documentation#Astra Robot|Astra]]&#039;s directory, but this is subject to change.&lt;br /&gt;
&lt;br /&gt;
=== [[Excahauler]] Robot ===&lt;br /&gt;
The main scene is &amp;lt;code&amp;gt;excahauler_3d.tscn&amp;lt;/code&amp;gt;. Unlike [[LUMINSim Documentation#Astra Robot|Astra&#039;s implementation]], all functionalities are within that &amp;lt;code&amp;gt;.tscn&amp;lt;/code&amp;gt; file and the associated &amp;lt;code&amp;gt;.gd&amp;lt;/code&amp;gt; file. Currently, only Excahauler&#039;s main arm (boom, stick, and tilt) is implemented, as trying to set up the scoop (fork and dump) joints in an identical way results in uncontrollable, noodle-like joints (See [[LUMINSim Documentation#Major Issues|Major Issues]]).&lt;br /&gt;
&lt;br /&gt;
== Objects ==&lt;br /&gt;
WIP.&lt;br /&gt;
&lt;br /&gt;
== Static Objects ==&lt;br /&gt;
Charge stations and solar panels (see [[LUMINSim Documentation#Power System|Power System]]), tool spawners, and other generally useful environment pieces. These scenes generally work independently of other scenes, and include:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;brick_maker.gd&amp;lt;/code&amp;gt; – creates bricks when filled with loose dirt.&lt;br /&gt;
* &amp;lt;code&amp;gt;tool_spawner.gd&amp;lt;/code&amp;gt; – keeps bays stocked by respawning assigned attachments when they are taken.&lt;br /&gt;
* &amp;lt;code&amp;gt;dirt_spawner.gd&amp;lt;/code&amp;gt; – continuously emits dirtballs for terrain testing, currently toggle-able by pressing &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Networking and Multiplayer ==&lt;br /&gt;
&amp;lt;code&amp;gt;game_manager.gd&amp;lt;/code&amp;gt; manages synchronized player/object data and signals for network updates. &amp;lt;code&amp;gt;multiplayer_menu.gd&amp;lt;/code&amp;gt; lets players host or join games, start sessions, and handle disconnects.&lt;br /&gt;
&lt;br /&gt;
== User Interface ==&lt;br /&gt;
The &amp;lt;code&amp;gt;ui.gd&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;joystick.gd&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;keybinds_menu.gd&amp;lt;/code&amp;gt; scripts provide HUD elements, customizable input bindings, and optional on-screen controls for mobile users.&lt;br /&gt;
&lt;br /&gt;
== Cameras and Controls ==&lt;br /&gt;
&amp;lt;code&amp;gt;movable_camera_3d.gd&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;freecam.gd&amp;lt;/code&amp;gt; implement user-controlled cameras.&lt;br /&gt;
&lt;br /&gt;
== Levels ==&lt;br /&gt;
Scenes in &amp;lt;code&amp;gt;demo/levels/&amp;lt;/code&amp;gt; (e.g., &amp;lt;code&amp;gt;main3D.tscn&amp;lt;/code&amp;gt; with script &amp;lt;code&amp;gt;main3D.gd&amp;lt;/code&amp;gt;) instantiate players, objects, and the terrain simulator, driving the overall game loop.&lt;br /&gt;
&lt;br /&gt;
== Additional Utilities ==&lt;br /&gt;
Miscellaneous helpers include &amp;lt;code&amp;gt;fps_counter.gd&amp;lt;/code&amp;gt; for performance output and &amp;lt;code&amp;gt;freecam.tscn&amp;lt;/code&amp;gt; which can be spawned via the command console for debugging or spectator play.&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
The repository is under active development. Planned areas of documentation include deeper explanations of the power system, tool workflow, and multiplayer networking. Contributions are welcome.&lt;/div&gt;</summary>
		<author><name>Acmattson3</name></author>
	</entry>
	<entry>
		<id>https://aurorarobotics.sssn.us/index.php?title=LUMINSim_Documentation&amp;diff=810</id>
		<title>LUMINSim Documentation</title>
		<link rel="alternate" type="text/html" href="https://aurorarobotics.sssn.us/index.php?title=LUMINSim_Documentation&amp;diff=810"/>
		<updated>2025-07-08T02:28:24Z</updated>

		<summary type="html">&lt;p&gt;Acmattson3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= LUMINSim Documentation =&lt;br /&gt;
This is an ongoing page as I ([[User:Acmattson3|Andrew Mattson]]) document [[LUMINSim]]&#039;s current systems. This page is a &#039;&#039;major&#039;&#039; work in progress; feel free to add to it!&lt;br /&gt;
&lt;br /&gt;
Going forward, I hope to add in-depth descriptions of the inner workings of each major system, including:&lt;br /&gt;
* Power&lt;br /&gt;
* Tools and tool swapping&lt;br /&gt;
* Terrain&lt;br /&gt;
* Multiplayer&lt;br /&gt;
* Each user-controlled scene (robots and astronaut)&lt;br /&gt;
* The UI (multiplayer menu, settings menu, keybind menu)&lt;br /&gt;
* Each (largely) independent scene and corresponding system(s) (brick maker, dirt spawner, tool spawner, etc.)&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
To learn how to get started with development yourself, [https://github.com/AuroraRoboticsLab/GodotRobot/blob/main/README.md visit the repository&#039;s README] and follow the steps there to get the project set up.&lt;br /&gt;
&lt;br /&gt;
== Known Issues ==&lt;br /&gt;
The following are known issues that continuously plague the simulator.&lt;br /&gt;
&lt;br /&gt;
=== Major Issues ===&lt;br /&gt;
Major issues are detrimental to fundamental functionalities of the simulator. Generally they have no known fix without major redesign of the system itself and adjacent systems.&lt;br /&gt;
&lt;br /&gt;
* With no consistency or known cause, some BetterHingeJoint3D (see [[LUMINSim Documentation#Classes|Classes]]) joints are floppy noodles. If you create a joint and it works at first, it will continue to work, but if it is a floppy noodle at first, it will always be a floppy noodle. Deleting and re-instantiating the joint scene does not seem to work.&lt;br /&gt;
&lt;br /&gt;
=== Minor Issues ===&lt;br /&gt;
Minor issues are just annoying. Generally they have workarounds or can simply be ignored. &lt;br /&gt;
&lt;br /&gt;
* The multiplayer synchronizers throw errors when connecting/disconnecting. No impact on multiplayer functionalities has been observed.&lt;br /&gt;
&lt;br /&gt;
== Repository Structure ==&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;src/&amp;lt;/code&amp;gt;&#039;&#039;&#039; – C++ GDExtension code for terrain and registration. Likely to be deprecated. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Godot project containing levels, assets, and GDScript systems.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;export_presets.cfg&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Information for Godot on how to export the project into platform-native forms. Created automatically by the Godot export menu.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;game_manager.gd&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Handles the majority of the multiplayer logic, especially the sending of data between the clients and the server. See [[LUMINSim Documentation#Networking and Multiplayer|Networking and Multiplayer]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;project.godot&amp;lt;/code&amp;gt;&#039;&#039;&#039; – The main project file. Contains general project configurations and properties. This is the primary reference point for the Godot Engine when developing this project.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/astra&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the drivable [[LUMINSim Documentation#Astra Robot|Astra]] robot.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/astronaut&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the in-game, procedurally-animated astronaut character. See [[LUMINSim Documentation#Astronaut Character|Astronaut Character]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/bin&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the compiled GDExtension binaries. Likely to be deprecated. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/components&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains components or component-like scenes and related files. See [[LUMINSim Documentation#Classes|Classes]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/environment&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files for the skybox (i.e., the stars in the sky).&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/excahauler&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the drivable [[LUMINSim Documentation#Excahauler Robot|Excahauler]] robot.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/graphics&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains many images for icons and textures, especially for the user interface. See [[LUMINSim Documentation#User Interface|User Interface]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/landers&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains directories for different lunar landers. Landers are currently just static models.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/levels&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains the main playable (i.e., non-UI) scenes and related files. See [[LUMINSim Documentation#Levels|Levels]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/objects&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains non-static (i.e., movable RigidBody3D) objects. See [[LUMINSim Documentation#Objects|Objects]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/static_objects&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains static (i.e., unmovable StaticBody3D) objects and their related code. See [[LUMINSim Documentation#Static Objects|Static Objects]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/terrain&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Scenes and files pertaining to the dynamic (i.e., mineable) terrain. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/terrain_fixed&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Scenes and files pertaining to the static (i.e., unchanging) terrain. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/util&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Scenes and files pertaining to UI as well as other useful scripts. See [[LUMINSim Documentation#User Interface|User Interface]] and [[LUMINSim Documentation#Additional Utilities|Additional Utilities]].&lt;br /&gt;
In-depth repository structure documentation (brief descriptions on a per-scene basis) may be created here by anyone.&lt;br /&gt;
&lt;br /&gt;
== Classes ==&lt;br /&gt;
The following scripts register custom nodes with the keyword &amp;lt;code&amp;gt;class_name&amp;lt;/code&amp;gt;:&lt;br /&gt;
* &amp;lt;code&amp;gt;ToolCouplerComponent.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;ToolCoupler&#039;&#039;&#039; – manages attaching tools to a robot via physics joints.&lt;br /&gt;
* &amp;lt;code&amp;gt;connector_component.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;Connector&#039;&#039;&#039; – area detector used by tool couplers and charge stations.&lt;br /&gt;
* &amp;lt;code&amp;gt;autonomy_component.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;AutonomyComponent&#039;&#039;&#039; – simple navigation helper for NPC robots. See [[LUMINSim Documentation#Autonomy System|Autonomy System]].&lt;br /&gt;
* &amp;lt;code&amp;gt;charge_component.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;ChargeComponent&#039;&#039;&#039; – tracks battery state and handles charging/discharging.&lt;br /&gt;
* &amp;lt;code&amp;gt;better_hinge_joint_3d.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;BetterHingeJoint3D&#039;&#039;&#039; – wrapper over &amp;lt;code&amp;gt;Generic6DOFJoint3D&amp;lt;/code&amp;gt; for motorized joints.&lt;br /&gt;
* &amp;lt;code&amp;gt;tool_attachment.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;ToolAttachment&#039;&#039;&#039; – base class for all detachable tools.&lt;br /&gt;
* &amp;lt;code&amp;gt;forks.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;Forks&#039;&#039;&#039; – tool attachment for moving objects.&lt;br /&gt;
* &amp;lt;code&amp;gt;bucket_attachment.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;Bucket&#039;&#039;&#039; – digs into terrain to collect dirtballs.&lt;br /&gt;
* &amp;lt;code&amp;gt;saw_blade_attachment.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;SawBlade&#039;&#039;&#039; – spinning blade for cutting objects.&lt;br /&gt;
* &amp;lt;code&amp;gt;dem_loader.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;DemLoader&#039;&#039;&#039; – loads fixed DEM heightmaps and extends &amp;lt;code&amp;gt;TerrainStatic256&amp;lt;/code&amp;gt;, which is declared via GDExtensions. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
These classes are referenced throughout the systems described below.&lt;br /&gt;
&lt;br /&gt;
== Autonomy System ==&lt;br /&gt;
The current autonomous driving logic is implemented by the &amp;lt;code&amp;gt;AutonomyComponent&amp;lt;/code&amp;gt; script. Every robot scene instantiates this node under its root &amp;lt;code&amp;gt;VehicleBody3D&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Currently, this is how it works:&lt;br /&gt;
&lt;br /&gt;
* A child &amp;lt;code&amp;gt;NavigationAgent3D&amp;lt;/code&amp;gt; computes a path when &amp;lt;code&amp;gt;pathfind_to(target_pos)&amp;lt;/code&amp;gt; is called.&lt;br /&gt;
&lt;br /&gt;
* During &amp;lt;code&amp;gt;_physics_process()&amp;lt;/code&amp;gt; the component steers the robot toward the next path point using the &amp;lt;code&amp;gt;get_drive()&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;get_steer()&amp;lt;/code&amp;gt; helpers.&lt;br /&gt;
&lt;br /&gt;
* The helpers are polled by &amp;lt;code&amp;gt;astra_3d.gd&amp;lt;/code&amp;gt; so the component effectively overrides manual controls when active.&lt;br /&gt;
&lt;br /&gt;
* If progress stalls the script nudges the body upward and forward to get free. Once the destination is reached the &amp;lt;code&amp;gt;have_arrived&amp;lt;/code&amp;gt; flag is set.&lt;br /&gt;
&lt;br /&gt;
=== Proposed External API ===&lt;br /&gt;
To enable players to program autonomy from outside the engine, a new &amp;lt;code&amp;gt;AutonomyServer&amp;lt;/code&amp;gt; node could expose a local API via WebSocket, HTTP, or MQTT. The simulator would send each robot&#039;s state to this server, including data like true position, velocity, tool data, and battery level data, and eventually realistic simulated sensor data. An external script could connect to the API and issue commands such as drive, steer, actuate arm, and so on.&lt;br /&gt;
&lt;br /&gt;
This approach decouples vehicle logic from the engine so users can iterate on autonomy in &#039;&#039;&#039;any language&#039;&#039;&#039; without recompiling the project. The &amp;lt;code&amp;gt;AutonomyServer&amp;lt;/code&amp;gt; would relay commands to the relevant nodes (mirroring the current &amp;lt;code&amp;gt;get_drive()&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;get_steer()&amp;lt;/code&amp;gt; methods) while still supporting multiplayer authority checks via &amp;lt;code&amp;gt;GameManager&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Terrain System (C++) ==&lt;br /&gt;
C++ based GDExtensions currently provide the terrain implementation and may be replaced in the future with a more developer-friendly system.&lt;br /&gt;
&lt;br /&gt;
=== Static Terrain ===&lt;br /&gt;
&amp;lt;code&amp;gt;TerrainStatic256&amp;lt;/code&amp;gt; loads heightmaps and generates render and collision meshes.&lt;br /&gt;
&lt;br /&gt;
=== Dynamic Terrain ===&lt;br /&gt;
&amp;lt;code&amp;gt;TerrainSim&amp;lt;/code&amp;gt; extends &amp;lt;code&amp;gt;TerrainStatic256&amp;lt;/code&amp;gt; to simulate excavation, landslides, and merging dirtballs back into the heightmap.&lt;br /&gt;
&lt;br /&gt;
=== Terrain Tools ===&lt;br /&gt;
Scripts such as &amp;lt;code&amp;gt;dirt_spawner.gd&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;dirtball.gd&amp;lt;/code&amp;gt; spawn and merge mobile particles with the dynamic terrain.&lt;br /&gt;
&lt;br /&gt;
== Power System ==&lt;br /&gt;
Movable vehicles include a &#039;&#039;&#039;ChargeComponent&#039;&#039;&#039; that stores amp-hours and battery percentage. Robots consume charge while driving or actuating, and static objects like charge stations or solar panels provide power when connected.&lt;br /&gt;
&lt;br /&gt;
== Tools and Attachments ==&lt;br /&gt;
All interchangeable implements derive from &#039;&#039;&#039;ToolAttachment&#039;&#039;&#039;. Robot arms have &#039;&#039;&#039;ToolCoupler&#039;&#039;&#039; nodes that detect nearby &#039;&#039;&#039;Connector&#039;&#039;&#039; areas and create physics joints to attach or detach tools. Available tools include the Bucket, Forks, and SawBlade. &amp;lt;code&amp;gt;tool_spawner.gd&amp;lt;/code&amp;gt; respawns tools removed from its bays.&lt;br /&gt;
&lt;br /&gt;
== Robot Systems ==&lt;br /&gt;
=== [[Astra]] Robot ===&lt;br /&gt;
The main scene is &amp;lt;code&amp;gt;astra_3d.tscn&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;astra_3d.gd&amp;lt;/code&amp;gt; handles driving, energy usage, and tool attachment. It works with &amp;lt;code&amp;gt;astra_arm_3d.gd&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;astra_hopper_3d.gd&amp;lt;/code&amp;gt; and their associated &amp;lt;code&amp;gt;.tscn&amp;lt;/code&amp;gt; files for the robot&#039;s arm and hopper.&lt;br /&gt;
&lt;br /&gt;
=== Astronaut Character ===&lt;br /&gt;
&amp;lt;code&amp;gt;astronaut_character_3d.gd&amp;lt;/code&amp;gt; provides walking and camera control for a procedurally animated astronaut.&lt;br /&gt;
&lt;br /&gt;
=== Excavation Tools ===&lt;br /&gt;
Attachments such as the bucket, forks, and saw blade extend &#039;&#039;&#039;ToolAttachment&#039;&#039;&#039; for various tasks.&lt;br /&gt;
&lt;br /&gt;
=== [[Excahauler]] Robot ===&lt;br /&gt;
The main scene is &amp;lt;code&amp;gt;excahauler_3d.tscn&amp;lt;/code&amp;gt;. Unlike [[LUMINSim Documentation#Astra Robot|Astra&#039;s implementation]], all functionalities are within that &amp;lt;code&amp;gt;.tscn&amp;lt;/code&amp;gt; file and the associated &amp;lt;code&amp;gt;.gd&amp;lt;/code&amp;gt; file. Currently, only Excahauler&#039;s main arm (boom, stick, and tilt) is implemented, as trying to set up the scoop (fork and dump) joints in an identical way results in uncontrollable, noodle-like joints.&lt;br /&gt;
&lt;br /&gt;
== Objects ==&lt;br /&gt;
WIP.&lt;br /&gt;
&lt;br /&gt;
== Static Objects ==&lt;br /&gt;
Charge stations, solar panels, tool spawners, and other environment pieces provide energy or spawn tools.&lt;br /&gt;
&lt;br /&gt;
== Networking and Multiplayer ==&lt;br /&gt;
&amp;lt;code&amp;gt;game_manager.gd&amp;lt;/code&amp;gt; manages synchronized player/object data and signals for network updates. &amp;lt;code&amp;gt;multiplayer_menu.gd&amp;lt;/code&amp;gt; lets players host or join games, start sessions, and handle disconnects.&lt;br /&gt;
&lt;br /&gt;
== User Interface ==&lt;br /&gt;
The &amp;lt;code&amp;gt;ui.gd&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;joystick.gd&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;keybinds_menu.gd&amp;lt;/code&amp;gt; scripts provide HUD elements, customizable input bindings, and optional on-screen controls for mobile users.&lt;br /&gt;
&lt;br /&gt;
== Cameras and Controls ==&lt;br /&gt;
&amp;lt;code&amp;gt;movable_camera_3d.gd&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;freecam.gd&amp;lt;/code&amp;gt; implement user-controlled cameras, both first- and third-person.&lt;br /&gt;
&lt;br /&gt;
== Levels ==&lt;br /&gt;
Scenes in &amp;lt;code&amp;gt;demo/levels/&amp;lt;/code&amp;gt; (e.g., &amp;lt;code&amp;gt;main3D.tscn&amp;lt;/code&amp;gt; with script &amp;lt;code&amp;gt;main3D.gd&amp;lt;/code&amp;gt;) instantiate players, objects, and the terrain simulator, driving the overall game loop.&lt;br /&gt;
&lt;br /&gt;
== Independent Scenes ==&lt;br /&gt;
Several standalone scenes provide gameplay utilities:&lt;br /&gt;
* &amp;lt;code&amp;gt;brick_maker.gd&amp;lt;/code&amp;gt; – creates bricks when filled with loose dirt.&lt;br /&gt;
* &amp;lt;code&amp;gt;tool_spawner.gd&amp;lt;/code&amp;gt; – keeps bays stocked by respawning attachments.&lt;br /&gt;
* &amp;lt;code&amp;gt;dirt_spawner.gd&amp;lt;/code&amp;gt; – continuously emits dirtballs for terrain testing.&lt;br /&gt;
&lt;br /&gt;
== Additional Utilities ==&lt;br /&gt;
Miscellaneous helpers include &amp;lt;code&amp;gt;fps_counter.gd&amp;lt;/code&amp;gt; for performance output and &amp;lt;code&amp;gt;freecam.tscn&amp;lt;/code&amp;gt; which can be spawned via the command console for debugging or spectator play.&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
The repository is under active development. Planned areas of documentation include deeper explanations of the power system, tool workflow, and multiplayer networking. Contributions are welcome.&lt;/div&gt;</summary>
		<author><name>Acmattson3</name></author>
	</entry>
	<entry>
		<id>https://aurorarobotics.sssn.us/index.php?title=LUMINSim_Documentation&amp;diff=809</id>
		<title>LUMINSim Documentation</title>
		<link rel="alternate" type="text/html" href="https://aurorarobotics.sssn.us/index.php?title=LUMINSim_Documentation&amp;diff=809"/>
		<updated>2025-07-08T01:59:38Z</updated>

		<summary type="html">&lt;p&gt;Acmattson3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= LUMINSim Documentation =&lt;br /&gt;
This is an ongoing page as I ([[User:Acmattson3|Andrew Mattson]]) document [[LUMINSim]]&#039;s current systems. This page is a &#039;&#039;major&#039;&#039; work in progress; feel free to add to it!&lt;br /&gt;
&lt;br /&gt;
Going forward, I hope to add:&lt;br /&gt;
* A list of the non-default classes/nodes this project declares.&lt;br /&gt;
* In-depth descriptions of the inner workings of each major system, including:&lt;br /&gt;
** Power&lt;br /&gt;
** Tools and tool swapping&lt;br /&gt;
** Terrain&lt;br /&gt;
** Multiplayer&lt;br /&gt;
** Each user-controlled scene (robots and astronaut)&lt;br /&gt;
** The UI (multiplayer menu, settings menu, keybind menu)&lt;br /&gt;
** Each (largely) independent scene and corresponding system(s) (brick maker, dirt spawner, tool spawner, etc.)&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
To learn how to get started with development yourself, [https://github.com/AuroraRoboticsLab/GodotRobot/blob/main/README.md visit the repository&#039;s README] and follow the steps there to get the project set up.&lt;br /&gt;
&lt;br /&gt;
== Repository Structure ==&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;src/&amp;lt;/code&amp;gt;&#039;&#039;&#039; – C++ GDExtension code for terrain and registration. Likely to be deprecated. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Godot project containing levels, assets, and GDScript systems.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;export_presets.cfg&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Information for Godot on how to export the project into platform-native forms. Created automatically by the Godot export menu.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;game_manager.gd&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Handles the majority of the multiplayer logic, especially the sending of data between the clients and the server. See [[LUMINSim Documentation#Networking and Multiplayer|Networking and Multiplayer]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;project.godot&amp;lt;/code&amp;gt;&#039;&#039;&#039; – The main project file. Contains general project configurations and properties. This is the primary reference point for the Godot Engine when developing this project.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/astra&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the drivable [[LUMINSim Documentation#Astra Robot|Astra]] robot.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/astronaut&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the in-game, procedurally-animated astronaut character. See [[LUMINSim Documentation#Astronaut Character|Astronaut Character]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/bin&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the compiled GDExtension binaries. Likely to be deprecated. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/components&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains components or component-like scenes and related files. See [[LUMINSim Documentation#Classes|Classes]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/environment&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files for the skybox (i.e., the stars in the sky).&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/excahauler&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the drivable [[LUMINSim Documentation#Excahauler Robot|Excahauler]] robot.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/graphics&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains many images for icons and textures, especially for the user interface. See [[LUMINSim Documentation#User Interface|User Interface]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/landers&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains directories for different lunar landers. Landers are currently just static models.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/levels&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains the main playable (i.e., non-UI) scenes and related files. See [[LUMINSim Documentation#Levels|Levels]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/objects&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains non-static (i.e., movable RigidBody3D) objects. See [[LUMINSim Documentation#Objects|Objects]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/static_objects&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains static (i.e., unmovable StaticBody3D) objects and their related code. See [[LUMINSim Documentation#Static Objects|Static Objects]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/terrain&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Scenes and files pertaining to the dynamic (i.e., mineable) terrain. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/terrain_fixed&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Scenes and files pertaining to the static (i.e., unchanging) terrain. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/util&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Scenes and files pertaining to UI as well as other useful scripts. See [[LUMINSim Documentation#User Interface|User Interface]] and [[LUMINSim Documentation#Additional Utilities|Additional Utilities]].&lt;br /&gt;
In-depth repository structure documentation (brief descriptions on a per-scene basis) may be created here by anyone.&lt;br /&gt;
&lt;br /&gt;
== Classes ==&lt;br /&gt;
The following scripts register custom nodes with `class_name`:&lt;br /&gt;
* &amp;lt;code&amp;gt;ToolCouplerComponent.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;ToolCoupler&#039;&#039;&#039; – manages attaching tools to a robot via physics joints.&lt;br /&gt;
* &amp;lt;code&amp;gt;connector_component.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;Connector&#039;&#039;&#039; – area detector used by tool couplers and charge stations.&lt;br /&gt;
* &amp;lt;code&amp;gt;autonomy_component.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;AutonomyComponent&#039;&#039;&#039; – simple navigation helper for NPC robots.&lt;br /&gt;
* &amp;lt;code&amp;gt;charge_component.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;ChargeComponent&#039;&#039;&#039; – tracks battery state and handles charging/discharging.&lt;br /&gt;
* &amp;lt;code&amp;gt;better_hinge_joint_3d.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;BetterHingeJoint3D&#039;&#039;&#039; – wrapper over &amp;lt;code&amp;gt;Generic6DOFJoint3D&amp;lt;/code&amp;gt; for motorized joints.&lt;br /&gt;
* &amp;lt;code&amp;gt;tool_attachment.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;ToolAttachment&#039;&#039;&#039; – base class for all detachable tools.&lt;br /&gt;
* &amp;lt;code&amp;gt;forks.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;Forks&#039;&#039;&#039; – tool attachment for moving objects.&lt;br /&gt;
* &amp;lt;code&amp;gt;bucket_attachment.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;Bucket&#039;&#039;&#039; – digs into terrain to collect dirtballs.&lt;br /&gt;
* &amp;lt;code&amp;gt;saw_blade_attachment.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;SawBlade&#039;&#039;&#039; – spinning blade for cutting objects.&lt;br /&gt;
* &amp;lt;code&amp;gt;dem_loader.gd&amp;lt;/code&amp;gt; → &#039;&#039;&#039;DemLoader&#039;&#039;&#039; – loads fixed DEM heightmaps and extends &amp;lt;code&amp;gt;TerrainStatic256&amp;lt;/code&amp;gt;.&lt;br /&gt;
These classes are referenced throughout the systems described below.&lt;br /&gt;
&lt;br /&gt;
== Terrain System (C++) ==&lt;br /&gt;
C++ based GDExtensions currently provide the terrain implementation and may be replaced in the future with a more developer-friendly system.&lt;br /&gt;
&lt;br /&gt;
=== Static Terrain ===&lt;br /&gt;
&amp;lt;code&amp;gt;TerrainStatic256&amp;lt;/code&amp;gt; loads heightmaps and generates render and collision meshes.&lt;br /&gt;
&lt;br /&gt;
=== Dynamic Terrain ===&lt;br /&gt;
&amp;lt;code&amp;gt;TerrainSim&amp;lt;/code&amp;gt; extends &amp;lt;code&amp;gt;TerrainStatic256&amp;lt;/code&amp;gt; to simulate excavation, landslides, and merging dirtballs back into the heightmap.&lt;br /&gt;
&lt;br /&gt;
=== Terrain Tools ===&lt;br /&gt;
Scripts such as &amp;lt;code&amp;gt;dirt_spawner.gd&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;dirtball.gd&amp;lt;/code&amp;gt; spawn and merge mobile particles with the dynamic terrain.&lt;br /&gt;
&lt;br /&gt;
== Power System ==&lt;br /&gt;
Movable vehicles include a &#039;&#039;&#039;ChargeComponent&#039;&#039;&#039; that stores amp-hours and battery percentage. Robots consume charge while driving or actuating, and static objects like charge stations or solar panels provide power when connected.&lt;br /&gt;
&lt;br /&gt;
== Tools and Attachments ==&lt;br /&gt;
All interchangeable implements derive from &#039;&#039;&#039;ToolAttachment&#039;&#039;&#039;. Robot arms have &#039;&#039;&#039;ToolCoupler&#039;&#039;&#039; nodes that detect nearby &#039;&#039;&#039;Connector&#039;&#039;&#039; areas and create physics joints to attach or detach tools. Available tools include the Bucket, Forks, and SawBlade. &amp;lt;code&amp;gt;tool_spawner.gd&amp;lt;/code&amp;gt; respawns tools removed from its bays.&lt;br /&gt;
&lt;br /&gt;
== Robot Systems ==&lt;br /&gt;
=== Astra Robot ===&lt;br /&gt;
The main rover scene is &amp;lt;code&amp;gt;astra_3d.tscn&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;astra_3d.gd&amp;lt;/code&amp;gt; handles driving, energy usage, and tool attachment. It works with &amp;lt;code&amp;gt;astra_arm_3d.gd&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;astra_hopper_3d.gd&amp;lt;/code&amp;gt; for the arm and hopper.&lt;br /&gt;
&lt;br /&gt;
=== Arm and Hopper ===&lt;br /&gt;
Separate nodes controlled by &amp;lt;code&amp;gt;astra_arm_3d.gd&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;astra_hopper_3d.gd&amp;lt;/code&amp;gt; implement joint movement.&lt;br /&gt;
&lt;br /&gt;
=== Astronaut Character ===&lt;br /&gt;
&amp;lt;code&amp;gt;astronaut_character_3d.gd&amp;lt;/code&amp;gt; provides walking and camera control for a procedurally animated astronaut.&lt;br /&gt;
&lt;br /&gt;
=== Excavation Tools ===&lt;br /&gt;
Attachments such as the bucket, forks, and saw blade extend &#039;&#039;&#039;ToolAttachment&#039;&#039;&#039; for various tasks.&lt;br /&gt;
&lt;br /&gt;
=== Excahauler Robot ===&lt;br /&gt;
Work in progress.&lt;br /&gt;
&lt;br /&gt;
== Objects ==&lt;br /&gt;
WIP.&lt;br /&gt;
&lt;br /&gt;
== Static Objects ==&lt;br /&gt;
Charge stations, solar panels, tool spawners, and other environment pieces provide energy or spawn tools.&lt;br /&gt;
&lt;br /&gt;
== Networking and Multiplayer ==&lt;br /&gt;
&amp;lt;code&amp;gt;game_manager.gd&amp;lt;/code&amp;gt; manages synchronized player/object data and signals for network updates. &amp;lt;code&amp;gt;multiplayer_menu.gd&amp;lt;/code&amp;gt; lets players host or join games, start sessions, and handle disconnects.&lt;br /&gt;
&lt;br /&gt;
== User Interface ==&lt;br /&gt;
The &amp;lt;code&amp;gt;ui.gd&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;joystick.gd&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;keybinds_menu.gd&amp;lt;/code&amp;gt; scripts provide HUD elements, customizable input bindings, and optional on-screen controls for mobile users.&lt;br /&gt;
&lt;br /&gt;
== Cameras and Controls ==&lt;br /&gt;
&amp;lt;code&amp;gt;movable_camera_3d.gd&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;freecam.gd&amp;lt;/code&amp;gt; implement user-controlled cameras, both first- and third-person.&lt;br /&gt;
&lt;br /&gt;
== Levels ==&lt;br /&gt;
Scenes in &amp;lt;code&amp;gt;demo/levels/&amp;lt;/code&amp;gt; (e.g., &amp;lt;code&amp;gt;main3D.tscn&amp;lt;/code&amp;gt; with script &amp;lt;code&amp;gt;main3D.gd&amp;lt;/code&amp;gt;) instantiate players, objects, and the terrain simulator, driving the overall game loop.&lt;br /&gt;
&lt;br /&gt;
== Independent Scenes ==&lt;br /&gt;
Several standalone scenes provide gameplay utilities:&lt;br /&gt;
* &amp;lt;code&amp;gt;brick_maker.gd&amp;lt;/code&amp;gt; – creates bricks when filled with loose dirt.&lt;br /&gt;
* &amp;lt;code&amp;gt;tool_spawner.gd&amp;lt;/code&amp;gt; – keeps bays stocked by respawning attachments.&lt;br /&gt;
* &amp;lt;code&amp;gt;dirt_spawner.gd&amp;lt;/code&amp;gt; – continuously emits dirtballs for terrain testing.&lt;br /&gt;
&lt;br /&gt;
== Additional Utilities ==&lt;br /&gt;
Miscellaneous helpers include &amp;lt;code&amp;gt;fps_counter.gd&amp;lt;/code&amp;gt; for performance output and &amp;lt;code&amp;gt;freecam.tscn&amp;lt;/code&amp;gt; which can be spawned via the command console for debugging or spectator play.&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
The repository is under active development. Planned areas of documentation include deeper explanations of the power system, tool workflow, and multiplayer networking. Contributions are welcome.&lt;/div&gt;</summary>
		<author><name>Acmattson3</name></author>
	</entry>
	<entry>
		<id>https://aurorarobotics.sssn.us/index.php?title=NASA_X-Hab_2025:_Modular_Robotic_Construction&amp;diff=808</id>
		<title>NASA X-Hab 2025: Modular Robotic Construction</title>
		<link rel="alternate" type="text/html" href="https://aurorarobotics.sssn.us/index.php?title=NASA_X-Hab_2025:_Modular_Robotic_Construction&amp;diff=808"/>
		<updated>2025-07-07T22:13:34Z</updated>

		<summary type="html">&lt;p&gt;Acmattson3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;This is a stub. You can help by expanding it.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Overview&amp;lt;/h2&amp;gt;&lt;br /&gt;
[[File:Nasa xhab.jpg|thumb|NASA X-Hab Logo]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;In 2024, [https://spacegrant.org/wp-content/uploads/2024/03/M2M-X-Hab-Challenge-Solicitation-2025.pdf NASA&#039;s M2M X-Hab Academic Innovation Challenge for 2025] was released, for which [[Main Page|the Aurora Robotics Lab]] at the University of Alaska Fairbanks was accepted and funded through NASA’s 2024–2025 Moon to Mars X-Hab Academic Innovation Challenge. Our goal was to explore modular robotic construction techniques for lunar infrastructure, especially focusing on micrometeoroid-resistant arch structures made from modular steel trusses and covered in lunar regolith, with a clear path to fully autonomous robotic construction.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The project culminated in the development of the [[Excahauler|Excahauler robotic platform]] with a custom-built arm and end-effector, capable of aligning and assembling scaled modular truss components. Despite limitations in time and resources, the team demonstrated capabilities including truss manipulation, partial structural testing, and scale backfilling with regolith simulant (snow).&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;This wiki page is a very abridged version of our [https://docs.google.com/document/d/1N_494oalexJXKeGfjDocUZKAdBZPZ5RYqvyGjyIhMkg/edit?tab=t.0 full final report] which should soon be added to [https://ntrs.nasa.gov/ NASA&#039;s NTRS database].&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Project Vision and Mission&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Long-Term Vision:&amp;lt;/strong&amp;gt; Transform the solar system using robotic construction with local materials.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Short-Term Vision:&amp;lt;/strong&amp;gt; Develop robotic infrastructure construction technologies for the Artemis Base Camp.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Mission:&amp;lt;/strong&amp;gt; Design and demonstrate robotic tools and modular structures capable of assembling scalable micrometeoroid-resistant lunar shelters.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;The L-Truss System&amp;lt;/h2&amp;gt;&lt;br /&gt;
[[File:L-Truss.jpg|alt=The final full-steel L-Truss design.|thumb|The final full-steel L-Truss design.]]&lt;br /&gt;
&amp;lt;p&amp;gt;The primary structural innovation was the development of the &amp;lt;strong&amp;gt;L-Truss&amp;lt;/strong&amp;gt;: A modular trapezoidal truss segment. These trusses connect via push-fit endplates and spring-loaded capture pins to form straight or curved assemblies, including arches and retaining walls. The final full-steel design used plasma-cut end plates with a 3D printed door latch-style connection. However, full robotic connection could not be demonstrated with this design, so we made some last minute changes. The final prototype design included:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Hybrid steel construction with 3D printed carbon-fiber polycarbonate alignment funnels.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Spring-loaded pin latching mechanisms for tool-free robotic assembly.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Optional upright members for regolith support and buckling resistance.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Final tested form: 1.5m long, ~3kg, with a base angle of 22.5°.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;A scale 3D printable version is publicly available: [https://www.printables.com/model/1305834-trapezoidal-l-truss-clip-together-construction-mod L-Truss Model]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Structure Requirements&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Accommodate 2.6m x 2.6m vehicles within the constructed arch structure. (I.0)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Truss segments must remain under 2.0 meters for transport and robotic handling. (I.1.1)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Regolith shielding: Support ≥0.2m regolith equivalent for radiation/thermal protection. (O.0)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Minimum compressive load capacity of 300 kgf with ≥2.0 safety factor. (I.1.2, I.2.1)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Robot-compatible assembly path: all actions must have potential for automation. (E.0, E.2)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Concept of Operations&amp;lt;/h2&amp;gt;&lt;br /&gt;
[[File:Arch Assembly Graphic.png|alt=A graphical representation of the truss section assembly process. |thumb|A graphical representation of the truss section assembly process. This is to be done in parallel with other truss sections (i.e., ones behind the one visible) to create a full truss structure.]]&lt;br /&gt;
&amp;lt;h3&amp;gt;Lunar Deployment Plan&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Site Preparation:&amp;lt;/strong&amp;gt; The Excahauler prepares a foundation using excavation tools.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Truss Deployment:&amp;lt;/strong&amp;gt; Trusses are unloaded from a logistics lander and staged for assembly.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Structural Assembly:&amp;lt;/strong&amp;gt; Robots assemble the arch structure according to the graphic on the right.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Backfilling:&amp;lt;/strong&amp;gt; Lunar regolith is put over the structure via ballistic throwing or traditional scooping.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Use Phase:&amp;lt;/strong&amp;gt; Covered arches serve as shielding for sensitive lunar equipment or crew.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Ground Demonstration Activities&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;1:10 scale arch model tested with regolith simulant (basalt dust).&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Full-scale hybrid trusses fabricated and manipulated via teleoperation.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Robotic assembly verified using [[Excahauler]] and custom-built 2500:1 reducer gearbox arm.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Project Phases&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;System Definition Review (SDR):&amp;lt;/strong&amp;gt; October 4, 2024&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Preliminary Design Review (PDR):&amp;lt;/strong&amp;gt; November 15, 2024&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Critical Design Review (CDR):&amp;lt;/strong&amp;gt; January 24, 2025&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Progress Checkpoint Review (PCR):&amp;lt;/strong&amp;gt; April 18, 2025&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Final Report:&amp;lt;/strong&amp;gt; May 23, 2025&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Robot System: [[Excahauler]]&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Originally designed for the [[Project Archives|2022 NASA Break the Ice Challenge]].&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Outfitted with a custom modular manipulator arm with 3D printed stepped planetary gearboxes.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Used in successful teleoperated tests to transport and align L-Truss segments.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Software and Simulation&amp;lt;/h2&amp;gt;&lt;br /&gt;
[[File:X-Hab LUNATIC Software Stack.png|alt=The modified LUNATIC software stack for the X-Hab 2025 project; adds support for the truss manipulator arm.|thumb|The modified LUNATIC software stack for the X-Hab 2025 project; adds support for the truss manipulator arm.]]&lt;br /&gt;
&amp;lt;p&amp;gt;The team developed and tested robotic workflows using the following tools:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;[[LUMINSim|Godot-based simulator:]]&amp;lt;/strong&amp;gt; Visualized structure assembly and layout.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;[https://github.com/auroraRoboticsLab/MiningRobot?tab=readme-ov-file#lunatic Custom autonomy stack (LUNATIC):]&amp;lt;/strong&amp;gt; Handles teleoperation, control, and vision.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;[https://docs.ros.org/en/humble/index.html ROS2] / [https://moveit.picknik.ai/main/index.html MoveIt]:&amp;lt;/strong&amp;gt; Inverse kinematics modeled, full integration for automation incomplete.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Testing and Validation&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;FEM analysis showed safety factor &amp;gt;2.6 under 500N compressive loads.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Hybrid trusses withstood &amp;gt;500N axial loads; failure occurred at 230N in bending.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;1/10 scale arch supported &amp;gt;12kg in Earth gravity, equivalent to 36+ tonnes in Mars gravity at full scale.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Educational Integration&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Project integrated into UAF&#039;s CS 493 (Fall) and CS 454 (Spring), providing hands-on systems engineering experience to undergraduates and graduate students in mechanical and computer science disciplines.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Outreach Activities&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;UAF Party in the Park:&amp;lt;/strong&amp;gt; Public engagement event with live robot demos.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;FTC Robotics Tours:&amp;lt;/strong&amp;gt; Guided tour for K–12 robotics students.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;UAF Engineering Open House:&amp;lt;/strong&amp;gt; Structural demo and recruiting opportunity.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Lessons Learned&amp;lt;/h2&amp;gt;We were not able to complete our promised deliverables to full satisfaction due to time constraints and lack of defined leadership structure. We learned important lessons about:&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Structure:&amp;lt;/strong&amp;gt; Even small teams benefit from defined leadership and task ownership.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Planning:&amp;lt;/strong&amp;gt; Conservative scoping ensures project deliverables can be met.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Fabrication:&amp;lt;/strong&amp;gt; Early design-for-manufacturing saves time and enables iteration.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Future Work&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Complete full-scale robotic arch assembly.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Fully integrate MoveIt into robotic control stack for autonomous alignment.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Refine end-effector precision and truss fabrication for large-scale repeatability.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Additional Information&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Project Lead: [[User:Acmattson3|Andrew Mattson]], UAF CS BS/MS student&lt;br /&gt;
* Faculty Advisor: [[User:Lawlor|Dr. Orion Lawlor]] (oslawlor@alaska.edu)&lt;br /&gt;
* Team Members:&lt;br /&gt;
** [[User:Frozenstiff|Elliott Madsen]] (ME BS)&lt;br /&gt;
** Delano Horner (ME BS)&lt;br /&gt;
** Daniel Schliesing (ME BS)&lt;br /&gt;
** Kory Lamme (ME BS)&lt;/div&gt;</summary>
		<author><name>Acmattson3</name></author>
	</entry>
	<entry>
		<id>https://aurorarobotics.sssn.us/index.php?title=File:X-Hab_LUNATIC_Software_Stack.png&amp;diff=807</id>
		<title>File:X-Hab LUNATIC Software Stack.png</title>
		<link rel="alternate" type="text/html" href="https://aurorarobotics.sssn.us/index.php?title=File:X-Hab_LUNATIC_Software_Stack.png&amp;diff=807"/>
		<updated>2025-07-07T22:12:56Z</updated>

		<summary type="html">&lt;p&gt;Acmattson3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The modified LUNATIC software stack for the 2025 X-Hab project.&lt;/div&gt;</summary>
		<author><name>Acmattson3</name></author>
	</entry>
	<entry>
		<id>https://aurorarobotics.sssn.us/index.php?title=LUNATIC&amp;diff=806</id>
		<title>LUNATIC</title>
		<link rel="alternate" type="text/html" href="https://aurorarobotics.sssn.us/index.php?title=LUNATIC&amp;diff=806"/>
		<updated>2025-07-07T22:09:04Z</updated>

		<summary type="html">&lt;p&gt;Acmattson3: Added software stack diagram.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== LUNATIC Software Stack ==&lt;br /&gt;
Visit the [https://github.com/auroraRoboticsLab/MiningRobot MiningRobot GitHub repository] for more detailed information.&lt;br /&gt;
[[File:Autonomy stack full.png|alt=The full LUNATIC autonomy stack diagram.|thumb|The full LUNATIC autonomy stack diagram.]]&lt;br /&gt;
The &#039;&#039;&#039;&amp;quot;Logically UNcoupled Architecture Technology for Intra-robot Communication&amp;quot; or LUNATIC&#039;&#039;&#039; (pronounced lun-AT-ic, like automatic) is our robot control system, built as a loosely coupled set of microservices. LUNATIC is currently the software responsible for controlling the [[Excahauler]] robot.&lt;br /&gt;
The &amp;lt;code&amp;gt;autonomy/&amp;lt;/code&amp;gt; directory (in the project [https://github.com/auroraRoboticsLab/MiningRobot Github repository]) contains our robot control stack, written in &#039;&#039;&#039;C++&#039;&#039;&#039; for Linux and running happily on x86 and ARM based robots including the Raspberry Pi or NVIDIA Jetson. See [https://github.com/AuroraRoboticsLab/MiningRobot/blob/master/autonomy/README.txt the README in that directory] for build directions.&lt;br /&gt;
&lt;br /&gt;
Using microservices means you can compile, run, and test a single service independently, unlike our previous single monolithic executable the [https://github.com/AuroraRoboticsLab/MiningRobot/blob/master/autonomy/backend/main.cpp backend].&lt;br /&gt;
&lt;br /&gt;
Due to the nature of a robotics control stack, being able to efficiently exchange quickly changing data between modules is crucial. We do this using the new MMAP-based shared file data exchange system, the details of which can be found in the [https://github.com/AuroraRoboticsLab/MiningRobot/blob/master/autonomy/include/aurora/data_exchange.h data_exchange.h] header.&lt;br /&gt;
&lt;br /&gt;
The data being exchanged is listed in the [https://github.com/AuroraRoboticsLab/MiningRobot/blob/master/autonomy/include/aurora/lunatic.h lunatic.h] header for the microservices, and [https://github.com/AuroraRoboticsLab/MiningRobot/blob/master/autonomy/nanoslot/include/nanoslot/nanoslot_exchange.h nanoslot_exchange.h] for the Arduino data.&lt;br /&gt;
&lt;br /&gt;
== Control Software Stack ==&lt;br /&gt;
A basic manual control setup has autonomy/frontend running on the &amp;quot;pilot&amp;quot; machine, and sending commands to the autonomy/backend running onboard the robot. These commands are sent via UDP broadcast, so they should work anywhere on the same subnet. The backend talks to the Arduinos directly via USB--each Arduino has a &amp;quot;nanoslot ID&amp;quot; that lets nanoboot connect the appropriate slot program to communicate with it. To control the robot, all you need is a backend and the slot programs: put the backend into &amp;quot;backend driver&amp;quot; state, and use WASD to drive the robot.&lt;br /&gt;
For autonomous robot operations, we rely on a huge variety of microservices, such as the localizer (where is the robot?), path planner (how do we get to the target?), andretti (how do we drive along the path?), vision (what obstacles can we see?), and several other debug tools.&lt;br /&gt;
&lt;br /&gt;
This architecture has been incrementally built up since 2013 by a variety of UAF students for the [[Project Archives|NASA Robotic Mining Contest]]. Unless otherwise noted, everything here is public domain.&lt;br /&gt;
&lt;br /&gt;
== Get Involved ==&lt;br /&gt;
For details on how build and run this software, see [https://github.com/AuroraRoboticsLab/MiningRobot/blob/master/autonomy/README.txt autonomy/README]. Send a pull request or [[User:Lawlor|contact me (Dr. Orion Lawlor)]] if you have comments or suggestions!&lt;/div&gt;</summary>
		<author><name>Acmattson3</name></author>
	</entry>
	<entry>
		<id>https://aurorarobotics.sssn.us/index.php?title=File:Autonomy_stack_full.png&amp;diff=805</id>
		<title>File:Autonomy stack full.png</title>
		<link rel="alternate" type="text/html" href="https://aurorarobotics.sssn.us/index.php?title=File:Autonomy_stack_full.png&amp;diff=805"/>
		<updated>2025-07-07T22:07:11Z</updated>

		<summary type="html">&lt;p&gt;Acmattson3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The full LUNATIC autonomy stack diagram&lt;/div&gt;</summary>
		<author><name>Acmattson3</name></author>
	</entry>
	<entry>
		<id>https://aurorarobotics.sssn.us/index.php?title=Excahauler&amp;diff=804</id>
		<title>Excahauler</title>
		<link rel="alternate" type="text/html" href="https://aurorarobotics.sssn.us/index.php?title=Excahauler&amp;diff=804"/>
		<updated>2025-07-07T22:02:22Z</updated>

		<summary type="html">&lt;p&gt;Acmattson3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;Excahauler Mining Robot&amp;lt;/h1&amp;gt;&lt;br /&gt;
[[File:Team-with-excahauler.jpg|alt=The Aurora Robotics Team alongside the Excahauler robot at UAF&#039;s 2024 Party in the Park.|thumb|The Aurora Robotics Team alongside the Excahauler robot at UAF&#039;s 2024 Party in the Park.]]&lt;br /&gt;
&amp;lt;p&amp;gt;The &amp;lt;strong&amp;gt;Excahauler&amp;lt;/strong&amp;gt; is an autonomous mining robot built for [[Project Archives|NASA&#039;s Break the Ice Challenge]] using a combination of welded steel and 3D printed parts. Designed to handle excavation and mining tasks in challenging environments, featuring robust construction and adaptable components. [https://www.youtube.com/watch?v=pq0jfVteUY0&amp;amp;ab_channel=OrionLawlor Here is a YouTube video] of Excahauler in action mining a block of concrete.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Components&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Frame&amp;lt;/h3&amp;gt;&lt;br /&gt;
[[File:Excahauler sideview.png|alt=A sideview of the Excahauler robot.|thumb|A sideview of the Excahauler robot.]]&lt;br /&gt;
&amp;lt;p&amp;gt;The base of the robot consists of a welded steel frame made from 1-inch (25mm) steel box tubing. The front wheels attach directly to the frame for stability, while the middle and rear wheels are mounted on a rocker system to adapt to uneven terrain. The electronics box, front fork, and arm boom are also bolted directly onto the frame.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Robot Arm&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The robot arm has two main links:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Boom:&amp;lt;/strong&amp;gt; Connects to the frame, providing front-to-back motion. It is aligned with an inertial measurement unit mounted on an angled bar.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Stick:&amp;lt;/strong&amp;gt; The stick, following excavator naming conventions, has an Intel RealSense D455 depth camera mounted on top and a small electronics box for motor controllers.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Tool Coupler&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The tool coupler allows for quick tool changes using a two-pin system similar to an excavator&#039;s quick-change setup. It includes a locking mechanism to secure tools in place, allowing the robot to switch between different excavation tools efficiently.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Excavation Tools&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The robot can use various excavation tools, with the primary tool being a rock grinder. This tool spins a drum to mill material directly into the front scoop. The large ammo can on the robot houses the batteries, motor controller, and space for cooling oil.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Front Scoop&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The front scoop has a volume of 50 liters, allowing it to carry a payload of approximately 50 kg of broken-up material. It features a fork linear actuator for raising and lowering relative to the frame and a dump actuator for tilting the scoop to unload material.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Software&amp;lt;/h2&amp;gt;&lt;br /&gt;
[[File:Excahauler Frame.jpg|alt=Excahauler&#039;s bare frame, with a colored axis label at the center. |thumb|Excahauler&#039;s bare frame, with a colored axis label at the center. Red is X, yellow is Y, and blue is Z.]]&lt;br /&gt;
&amp;lt;p&amp;gt;Excahauler uses the [[LUNATIC]] software stack, as seen on [https://github.com/auroraRoboticsLab/MiningRobot its GitHub repository].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The robot follows a right-handed coordinate system:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;+Y is forward&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;+X is to the robot&#039;s right&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;+Z is up&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Some components use rotated coordinate systems to align with the mounted sensors.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Development&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The Excahauler is an ongoing project aimed at advancing autonomous mining technologies. The robot&#039;s design and functionality continue to be refined based on testing and research. Its design is a major influence toward [[L.A.M.P: Lunar, Autonomous, Modular Platform|LAMP]] candidate designs.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Further Information&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;For more details on the robot&#039;s design and development, visit the project&#039;s [https://github.com/auroraroboticslab/excahauler GitHub page].&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For questions or suggestions, please contact lawlor@alaska.edu.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;Note: Unless specified otherwise, the source code files are released to the public domain.&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;&lt;/div&gt;</summary>
		<author><name>Acmattson3</name></author>
	</entry>
	<entry>
		<id>https://aurorarobotics.sssn.us/index.php?title=LUNATIC&amp;diff=803</id>
		<title>LUNATIC</title>
		<link rel="alternate" type="text/html" href="https://aurorarobotics.sssn.us/index.php?title=LUNATIC&amp;diff=803"/>
		<updated>2025-07-07T22:01:39Z</updated>

		<summary type="html">&lt;p&gt;Acmattson3: Created page with &amp;quot;== LUNATIC Software Stack == Visit the [https://github.com/auroraRoboticsLab/MiningRobot MiningRobot GitHub repository] for more detailed information.  The &amp;#039;&amp;#039;&amp;#039;&amp;quot;Logically UNcoupled Architecture Technology for Intra-robot Communication&amp;quot; or LUNATIC&amp;#039;&amp;#039;&amp;#039; (pronounced lun-AT-ic, like automatic) is our robot control system, built as a loosely coupled set of microservices. LUNATIC is currently the software responsible for controlling the Excahauler robot. The &amp;lt;code&amp;gt;autonomy/&amp;lt;/...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== LUNATIC Software Stack ==&lt;br /&gt;
Visit the [https://github.com/auroraRoboticsLab/MiningRobot MiningRobot GitHub repository] for more detailed information.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;&amp;quot;Logically UNcoupled Architecture Technology for Intra-robot Communication&amp;quot; or LUNATIC&#039;&#039;&#039; (pronounced lun-AT-ic, like automatic) is our robot control system, built as a loosely coupled set of microservices. LUNATIC is currently the software responsible for controlling the [[Excahauler]] robot.&lt;br /&gt;
The &amp;lt;code&amp;gt;autonomy/&amp;lt;/code&amp;gt; directory (in the project [https://github.com/auroraRoboticsLab/MiningRobot Github repository]) contains our robot control stack, written in &#039;&#039;&#039;C++&#039;&#039;&#039; for Linux and running happily on x86 and ARM based robots including the Raspberry Pi or NVIDIA Jetson. See [https://github.com/AuroraRoboticsLab/MiningRobot/blob/master/autonomy/README.txt the README in that directory] for build directions.&lt;br /&gt;
&lt;br /&gt;
Using microservices means you can compile, run, and test a single service independently, unlike our previous single monolithic executable the [https://github.com/AuroraRoboticsLab/MiningRobot/blob/master/autonomy/backend/main.cpp backend].&lt;br /&gt;
&lt;br /&gt;
Due to the nature of a robotics control stack, being able to efficiently exchange quickly changing data between modules is crucial. We do this using the new MMAP-based shared file data exchange system, the details of which can be found in the [https://github.com/AuroraRoboticsLab/MiningRobot/blob/master/autonomy/include/aurora/data_exchange.h data_exchange.h] header.&lt;br /&gt;
&lt;br /&gt;
The data being exchanged is listed in the [https://github.com/AuroraRoboticsLab/MiningRobot/blob/master/autonomy/include/aurora/lunatic.h lunatic.h] header for the microservices, and [https://github.com/AuroraRoboticsLab/MiningRobot/blob/master/autonomy/nanoslot/include/nanoslot/nanoslot_exchange.h nanoslot_exchange.h] for the Arduino data.&lt;br /&gt;
&lt;br /&gt;
== Control Software Stack ==&lt;br /&gt;
A basic manual control setup has autonomy/frontend running on the &amp;quot;pilot&amp;quot; machine, and sending commands to the autonomy/backend running onboard the robot. These commands are sent via UDP broadcast, so they should work anywhere on the same subnet. The backend talks to the Arduinos directly via USB--each Arduino has a &amp;quot;nanoslot ID&amp;quot; that lets nanoboot connect the appropriate slot program to communicate with it. To control the robot, all you need is a backend and the slot programs: put the backend into &amp;quot;backend driver&amp;quot; state, and use WASD to drive the robot.&lt;br /&gt;
For autonomous robot operations, we rely on a huge variety of microservices, such as the localizer (where is the robot?), path planner (how do we get to the target?), andretti (how do we drive along the path?), vision (what obstacles can we see?), and several other debug tools.&lt;br /&gt;
&lt;br /&gt;
This architecture has been incrementally built up since 2013 by a variety of UAF students for the [[Project Archives|NASA Robotic Mining Contest]]. Unless otherwise noted, everything here is public domain.&lt;br /&gt;
&lt;br /&gt;
== Get Involved ==&lt;br /&gt;
For details on how build and run this software, see [https://github.com/AuroraRoboticsLab/MiningRobot/blob/master/autonomy/README.txt autonomy/README]. Send a pull request or [[User:Lawlor|contact me (Dr. Orion Lawlor)]] if you have comments or suggestions!&lt;/div&gt;</summary>
		<author><name>Acmattson3</name></author>
	</entry>
	<entry>
		<id>https://aurorarobotics.sssn.us/index.php?title=LUMINSim&amp;diff=802</id>
		<title>LUMINSim</title>
		<link rel="alternate" type="text/html" href="https://aurorarobotics.sssn.us/index.php?title=LUMINSim&amp;diff=802"/>
		<updated>2025-07-07T21:50:06Z</updated>

		<summary type="html">&lt;p&gt;Acmattson3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;LUMINSim (AKA GodotRobot)&amp;lt;/h1&amp;gt;&lt;br /&gt;
[[File:Astronaut Cinematic.png|alt=The LUMINSim astronaut standing on the edge of Shackleton crater.|thumb|The LUMINSim astronaut standing on the edge of Shackleton crater.]]&lt;br /&gt;
&amp;lt;p&amp;gt;&#039;&#039;&#039;Developers:&#039;&#039;&#039; Visit [[LUMINSim Documentation]] for more detailed information about LUMINSim&#039;s inner workings and how to get started with development.&amp;lt;/p&amp;gt;&lt;br /&gt;
[[File:Astra Digging.png|alt=The Astra robot digging in LUMINSim.|thumb|The Astra robot digging in LUMINSim.]]&lt;br /&gt;
&amp;lt;h2&amp;gt;Overview&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;LUMINSim&amp;lt;/strong&amp;gt; (Lunar Mining and Infrastructure Network Simulator) is an [https://github.com/auroraroboticslab/godotrobot/ open source] lunar robotic simulator developed by Aurora Robotics using [https://godotengine.org/ Godot 4.4]. It currently serves as a tool for testing and refining robots and their operations in a simulated lunar environment. We aim to make LUMINSim a commercially available product (see [[LUMINSim#Current Status and Development|Current Status and Development]]) to assist us in research and testing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;LUMINSim allows us to test new [[L.A.M.P: Lunar, Autonomous, Modular Platform|LAMP]] candidates. [[Astra]] was the first [[L.A.M.P: Lunar, Autonomous, Modular Platform|LAMP]] candidate, but LUMINSim helped us identify fundamental flaws in its design.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Features&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Playable characters:&lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;The [[L.A.M.P: Lunar, Autonomous, Modular Platform|&amp;lt;strong&amp;gt;LAMP&amp;amp;nbsp;v1&amp;lt;/strong&amp;gt; (Astra)]] rover&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;[[Excahauler]]&amp;lt;/strong&amp;gt; (in progress; no fork/dump yet)&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Procedurally animated &amp;lt;strong&amp;gt;astronaut&amp;lt;/strong&amp;gt; character&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Deformable lunar terrain&amp;lt;/strong&amp;gt; based on NASA height‑map data, with excavation and dirtball re‑merging.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Modular tool attachments&amp;lt;/strong&amp;gt; (bucket, forks, saw blade) connected via a ToolCoupler.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Power system&amp;lt;/strong&amp;gt; featuring rechargeable batteries, charging stations, and solar panels.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Multiplayer networking&amp;lt;/strong&amp;gt; with host/join menus and synchronized objects.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;User interface with rebindable controls, on‑screen joystick support, and FPS display.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Utility scenes such as a brick maker, tool spawner, and dirt spawner.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;First‑person, third‑person, and spectator free‑camera modes.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;h2&amp;gt;Current Status and Development&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;LUMINSim is currently in its alpha stage. Ongoing development is aimed at developing LUMINSim into a commercial product available on Steam and on the web. The current idea is to have players join to develop their own lunar zones and compete in challenges that assist us in our research. LUMINSim will also continue to serve as a testbed for validating new [[L.A.M.P: Lunar, Autonomous, Modular Platform|LAMP]] candidates and other lunar technologies, especially as users test each candidate&#039;s limits.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For more information on the status of LUMINSim&#039;s development, see the [[LUMINSim Documentation|LUMINSim Documentation page]].&amp;lt;/p&amp;gt;&lt;/div&gt;</summary>
		<author><name>Acmattson3</name></author>
	</entry>
	<entry>
		<id>https://aurorarobotics.sssn.us/index.php?title=LUMINSim&amp;diff=801</id>
		<title>LUMINSim</title>
		<link rel="alternate" type="text/html" href="https://aurorarobotics.sssn.us/index.php?title=LUMINSim&amp;diff=801"/>
		<updated>2025-07-07T21:44:47Z</updated>

		<summary type="html">&lt;p&gt;Acmattson3: Updated features list.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;LUMINSim (AKA GodotRobot)&amp;lt;/h1&amp;gt;&lt;br /&gt;
[[File:Astronaut Cinematic.png|alt=The LUMINSim astronaut standing on the edge of Shackleton crater.|thumb|The LUMINSim astronaut standing on the edge of Shackleton crater.]]&lt;br /&gt;
&amp;lt;p&amp;gt;&#039;&#039;&#039;Developers:&#039;&#039;&#039; Visit [[LUMINSim Documentation]] for more detailed information about LUMINSim&#039;s inner workings and how to get started with development.&amp;lt;/p&amp;gt;&lt;br /&gt;
[[File:Astra Digging.png|alt=The Astra robot digging in LUMINSim.|thumb|The Astra robot digging in LUMINSim.]]&lt;br /&gt;
&amp;lt;h2&amp;gt;Overview&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;LUMINSim&amp;lt;/strong&amp;gt; (Lunar Mining and Infrastructure Network Simulator) is an [https://github.com/auroraroboticslab/godotrobot/ open source] lunar robotic simulator developed by Aurora Robotics using [https://godotengine.org/ Godot 4.4]. It currently serves as a tool for testing and refining robots and their operations in a simulated lunar environment. We aim to make LUMINSim a commercially available product (see [[LUMINSim#Current Status and Development|Current Status and Development]]) to assist us in research and testing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;LUMINSim allows us to test new [[L.A.M.P: Lunar, Autonomous, Modular Platform|LAMP]] candidates. [[Astra]] was the first [[L.A.M.P: Lunar, Autonomous, Modular Platform|LAMP]] candidate, but LUMINSim helped us identify fundamental flaws in its design.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Features&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Playable characters:&lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;The [[L.A.M.P: Lunar, Autonomous, Modular Platform|&amp;lt;strong&amp;gt;LAMP&amp;amp;nbsp;v1&amp;lt;/strong&amp;gt; (Astra)]] rover&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Early &amp;lt;strong&amp;gt;[[Excahauler]]&amp;lt;/strong&amp;gt; prototype&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Procedurally animated &amp;lt;strong&amp;gt;astronaut&amp;lt;/strong&amp;gt; character&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Deformable lunar terrain&amp;lt;/strong&amp;gt; based on NASA height‑map data, with excavation and dirtball re‑merging.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Modular tool attachments&amp;lt;/strong&amp;gt; (bucket, forks, saw blade) connected via a ToolCoupler.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Power system&amp;lt;/strong&amp;gt; featuring rechargeable batteries, charging stations, and solar panels.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Multiplayer networking&amp;lt;/strong&amp;gt; with host/join menus and synchronized objects.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;User interface with rebindable controls, on‑screen joystick support, and FPS display.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Utility scenes such as a brick maker, tool spawner, and dirt spawner.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;First‑person, third‑person, and spectator free‑camera modes.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;h2&amp;gt;Current Status and Development&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;LUMINSim is currently in its alpha stage. Ongoing development is aimed at developing LUMINSim into a commercial product available on Steam and on the web. The current idea is to have players join to develop their own lunar zones and compete in challenges that assist us in our research. LUMINSim will also continue to serve as a testbed for validating new [[L.A.M.P: Lunar, Autonomous, Modular Platform|LAMP]] candidates and other lunar technologies, especially as users test each candidate&#039;s limits.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For more information on the status of LUMINSim&#039;s development, see the [[LUMINSim Documentation|LUMINSim Documentation page]].&amp;lt;/p&amp;gt;&lt;/div&gt;</summary>
		<author><name>Acmattson3</name></author>
	</entry>
	<entry>
		<id>https://aurorarobotics.sssn.us/index.php?title=LUMINSim&amp;diff=800</id>
		<title>LUMINSim</title>
		<link rel="alternate" type="text/html" href="https://aurorarobotics.sssn.us/index.php?title=LUMINSim&amp;diff=800"/>
		<updated>2025-07-07T21:43:54Z</updated>

		<summary type="html">&lt;p&gt;Acmattson3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;LUMINSim (AKA GodotRobot)&amp;lt;/h1&amp;gt;&lt;br /&gt;
[[File:Astronaut Cinematic.png|alt=The LUMINSim astronaut standing on the edge of Shackleton crater.|thumb|The LUMINSim astronaut standing on the edge of Shackleton crater.]]&lt;br /&gt;
&amp;lt;p&amp;gt;&#039;&#039;&#039;Developers:&#039;&#039;&#039; Visit [[LUMINSim Documentation]] for more detailed information about LUMINSim&#039;s inner workings and how to get started with development.&amp;lt;/p&amp;gt;&lt;br /&gt;
[[File:Astra Digging.png|alt=The Astra robot digging in LUMINSim.|thumb|The Astra robot digging in LUMINSim.]]&lt;br /&gt;
&amp;lt;h2&amp;gt;Overview&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;LUMINSim&amp;lt;/strong&amp;gt; (Lunar Mining and Infrastructure Network Simulator) is an [https://github.com/auroraroboticslab/godotrobot/ open source] lunar robotic simulator developed by Aurora Robotics using [https://godotengine.org/ Godot 4.4]. It currently serves as a tool for testing and refining robots and their operations in a simulated lunar environment. We aim to make LUMINSim a commercially available product (see [[LUMINSim#Current Status and Development|Current Status and Development]]) to assist us in research and testing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;LUMINSim allows us to test new [[L.A.M.P: Lunar, Autonomous, Modular Platform|LAMP]] candidates. [[Astra]] was the first [[L.A.M.P: Lunar, Autonomous, Modular Platform|LAMP]] candidate, but LUMINSim helped us identify fundamental flaws in its design.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Features&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Playable characters:&lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;The &amp;lt;strong&amp;gt;LAMP&amp;amp;nbsp;v1&amp;lt;/strong&amp;gt; (Astra) rover&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Early &amp;lt;strong&amp;gt;Excahauler&amp;lt;/strong&amp;gt; prototype&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Procedurally animated &amp;lt;strong&amp;gt;astronaut&amp;lt;/strong&amp;gt; character&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Deformable lunar terrain&amp;lt;/strong&amp;gt; based on NASA height‑map data, with excavation and dirtball re‑merging.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Modular tool attachments&amp;lt;/strong&amp;gt; (bucket, forks, saw blade) connected via a ToolCoupler.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Power system&amp;lt;/strong&amp;gt; featuring rechargeable batteries, charging stations, and solar panels.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Multiplayer networking&amp;lt;/strong&amp;gt; with host/join menus and synchronized objects.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;User interface with rebindable controls, on‑screen joystick support, and FPS display.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Utility scenes such as a brick maker, tool spawner, and dirt spawner.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;First‑person, third‑person, and spectator free‑camera modes.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The simulator currently features the [[LAMP v1|Astra]] and [[Excahauler]] robots and an astronaut character, deformable terrain, modular robotic tool attachments (including a bucket, forks, and a sawblade), a power system, and equipment like a cinderblock maker, tool attachment spawner, and robot charging station.&amp;lt;h2&amp;gt;Current Status and Development&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;LUMINSim is currently in its alpha stage. Ongoing development is aimed at developing LUMINSim into a commercial product available on Steam and on the web. The current idea is to have players join to develop their own lunar zones and compete in challenges that assist us in our research. LUMINSim will also continue to serve as a testbed for validating new [[L.A.M.P: Lunar, Autonomous, Modular Platform|LAMP]] candidates and other lunar technologies, especially as users test each candidate&#039;s limits.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For more information on the status of LUMINSim&#039;s development, see the [[LUMINSim Documentation|LUMINSim Documentation page]].&amp;lt;/p&amp;gt;&lt;/div&gt;</summary>
		<author><name>Acmattson3</name></author>
	</entry>
	<entry>
		<id>https://aurorarobotics.sssn.us/index.php?title=LUMINSim&amp;diff=799</id>
		<title>LUMINSim</title>
		<link rel="alternate" type="text/html" href="https://aurorarobotics.sssn.us/index.php?title=LUMINSim&amp;diff=799"/>
		<updated>2025-07-05T22:16:32Z</updated>

		<summary type="html">&lt;p&gt;Acmattson3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;LUMINSim (AKA GodotRobot)&amp;lt;/h1&amp;gt;&lt;br /&gt;
[[File:Astronaut Cinematic.png|alt=The LUMINSim astronaut standing on the edge of Shackleton crater.|thumb|The LUMINSim astronaut standing on the edge of Shackleton crater.]]&lt;br /&gt;
&amp;lt;p&amp;gt;&#039;&#039;&#039;Developers:&#039;&#039;&#039; Visit [[LUMINSim Documentation]] for more detailed information about LUMINSim&#039;s inner workings and how to get started with development.&amp;lt;/p&amp;gt;&lt;br /&gt;
[[File:Astra Digging.png|alt=The Astra robot digging in LUMINSim.|thumb|The Astra robot digging in LUMINSim.]]&lt;br /&gt;
&amp;lt;h2&amp;gt;Overview&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;LUMINSim&amp;lt;/strong&amp;gt; (Lunar Mining and Infrastructure Network Simulator) is an [https://github.com/auroraroboticslab/godotrobot/ open source] lunar robotic simulator developed by Aurora Robotics using [https://godotengine.org/ Godot 4.4]. It currently serves as a tool for testing and refining robots and their operations in a simulated lunar environment. We aim to make LUMINSim a commercially available product (see [[LUMINSim#Current Status and Development|Current Status and Development]]) to assist us in research and testing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;LUMINSim allows us to test new [[L.A.M.P: Lunar, Autonomous, Modular Platform|LAMP]] candidates. [[Astra]] was the first [[L.A.M.P: Lunar, Autonomous, Modular Platform|LAMP]] candidate, but LUMINSim helped us identify fundamental flaws in its design.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Features&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The simulator currently features the [[LAMP v1|Astra]] and [[Excahauler]] robots and an astronaut character, deformable terrain, modular robotic tool attachments (including a bucket, forks, and a sawblade), a power system, and equipment like a cinderblock maker, tool attachment spawner, and robot charging station.&amp;lt;h2&amp;gt;Current Status and Development&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;LUMINSim is currently in its alpha stage. Ongoing development is aimed at developing LUMINSim into a commercial product available on Steam and on the web. The current idea is to have players join to develop their own lunar zones and compete in challenges that assist us in our research. LUMINSim will also continue to serve as a testbed for validating new [[L.A.M.P: Lunar, Autonomous, Modular Platform|LAMP]] candidates and other lunar technologies, especially as users test each candidate&#039;s limits.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For more information on the status of LUMINSim&#039;s development, see the [[LUMINSim Documentation|LUMINSim Documentation page]].&amp;lt;/p&amp;gt;&lt;/div&gt;</summary>
		<author><name>Acmattson3</name></author>
	</entry>
	<entry>
		<id>https://aurorarobotics.sssn.us/index.php?title=LUMINSim_Documentation&amp;diff=798</id>
		<title>LUMINSim Documentation</title>
		<link rel="alternate" type="text/html" href="https://aurorarobotics.sssn.us/index.php?title=LUMINSim_Documentation&amp;diff=798"/>
		<updated>2025-07-05T22:09:57Z</updated>

		<summary type="html">&lt;p&gt;Acmattson3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= LUMINSim Documentation =&lt;br /&gt;
This is an ongoing page as I ([[User:Acmattson3|Andrew Mattson]]) document [[LUMINSim]]&#039;s current systems. This page is a &#039;&#039;major&#039;&#039; work in progress; feel free to add to it!&lt;br /&gt;
&lt;br /&gt;
Going forward, I hope to add:&lt;br /&gt;
&lt;br /&gt;
* A list of the non-default classes/nodes this project declares.&lt;br /&gt;
* In-depth descriptions of the inner workings of each major system, including:&lt;br /&gt;
** Power&lt;br /&gt;
** Tools and tool swapping&lt;br /&gt;
** Terrain&lt;br /&gt;
** Multiplayer&lt;br /&gt;
** Each user-controlled scene (robots and astronaut)&lt;br /&gt;
** The UI (multiplayer menu, settings menu, keybind menu)&lt;br /&gt;
** Each (largely) independent scene and corresponding system(s) (brick maker, dirt spawner, tool spawner, etc.)&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
To learn how to get started with development yourself, [https://github.com/AuroraRoboticsLab/GodotRobot/blob/main/README.md visit the repository&#039;s README] and follow the steps there to get the project set up. &lt;br /&gt;
&lt;br /&gt;
== Repository Structure ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;src/&amp;lt;/code&amp;gt;&#039;&#039;&#039; – C++ GDExtension code for terrain and registration. Likely to be deprecated. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Godot project containing levels, assets, and GDScript systems.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;export_presets.cfg&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Information for Godot on how to export the project into platform-native forms. Created automatically by the Godot export menu.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;game_manager.gd&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Handles the majority of the multiplayer logic, especially the sending of data between the clients and the server. See [[LUMINSim Documentation#Networking and Multiplayer|Networking and Multiplayer]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;project.godot&amp;lt;/code&amp;gt;&#039;&#039;&#039; – The main project file. Contains general project configurations and properties. This is the primary reference point for the Godot Engine when developing this project.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/astra&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the drivable [[LAMP v1|Astra]] robot. See [[LUMINSim Documentation#Astra Robot|Astra Robot]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/astronaut&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the in-game, procedurally-animated astronaut character. See [[LUMINSim Documentation#Astronaut Character|Astronaut Character]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/bin&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the compiled GDExtension binaries. Likely to be deprecated. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/components&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains components or component-like scenes and related files. See Components.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/environment&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files for the skybox (i.e., the stars in the sky). &lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/excahauler&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the drivable [[Excahauler]] robot. See [[LUMINSim Documentation#Excahauler Robot|Excahauler Robot]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/graphics&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains many images for icons and textures, especially for the user interface. See [[LUMINSim Documentation#User Interface|User Interface]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/landers&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains directories for different lunar landers. Landers are currently just static models.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/excahauler&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the drivable [[Excahauler]] robot. See [[LUMINSim Documentation#Excahauler Robot|Excahauler Robot]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/levels&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains the main playable (i.e., non-UI) scenes and related files. See [[LUMINSim Documentation#Levels|Levels]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/objects&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains non-static (i.e., movable RigidBody3D) objects. See [[LUMINSim Documentation#Objects|Objects]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/static_objects&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains static (i.e., unmovable StaticBody3D) objects and their related code. See [[LUMINSim Documentation#Static Objects|Static Objects]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/terrain&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Scenes and files pertaining to the &#039;&#039;dynamic&#039;&#039; (i.e., mineable) terrain. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/terrain_fixed&amp;lt;/code&amp;gt;&#039;&#039;&#039; –  Scenes and files pertaining to the &#039;&#039;static&#039;&#039; (i.e., unchanging) terrain. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/util&amp;lt;/code&amp;gt;&#039;&#039;&#039; –  Scenes and files pertaining to UI as well as other useful scripts. See [[LUMINSim Documentation#User Interface|User Interface]] and [[LUMINSim Documentation#Additional Utilities|Additional Utilities]].&lt;br /&gt;
In-depth repository structure documentation (brief descriptions on a per-scene basis) may be created here by anyone.&lt;br /&gt;
&lt;br /&gt;
== Terrain System (C++) ==&lt;br /&gt;
C++ based GDExtensions are likely to be replaced with a more developer-friendly system, likely one that downloads terrain from a separate server that handles all terrain logic.&lt;br /&gt;
&lt;br /&gt;
=== Static Terrain ===&lt;br /&gt;
&amp;lt;code&amp;gt;TerrainStatic256&amp;lt;/code&amp;gt; loads heightmaps, creates render and collision geometry.&lt;br /&gt;
&lt;br /&gt;
=== Dynamic Terrain ===&lt;br /&gt;
&amp;lt;code&amp;gt;TerrainSim&amp;lt;/code&amp;gt; simulates excavation, landslides, and merging dirtballs back into the heightmap.&lt;br /&gt;
&lt;br /&gt;
== Terrain Tools ==&lt;br /&gt;
Scripts such as &amp;lt;code&amp;gt;dirt_spawner.gd&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;dirtball.gd&amp;lt;/code&amp;gt; spawn and merge mobile particles with the dynamic terrain.&lt;br /&gt;
&lt;br /&gt;
== Robot Systems ==&lt;br /&gt;
&lt;br /&gt;
=== Astra Robot ===&lt;br /&gt;
The primary scene file is &amp;lt;code&amp;gt;astra_3d.tscn&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;astra_3d.gd&amp;lt;/code&amp;gt; handles driving and energy usage, as well as tool attachment. Works with &amp;lt;code&amp;gt;astra_arm_3d.gd&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;astra_hopper_3d.gd&amp;lt;/code&amp;gt; for arm/hopper actuation. See [[LUMINSim Documentation#Arm and Hopper|Arm and Hopper]].&lt;br /&gt;
&lt;br /&gt;
=== Arm and Hopper ===&lt;br /&gt;
Separate nodes controlled by &amp;lt;code&amp;gt;astra_arm_3d.gd&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;astra_hopper_3d.gd&amp;lt;/code&amp;gt; for the arm and hopper implement joint movement. &lt;br /&gt;
&lt;br /&gt;
=== Astronaut Character ===&lt;br /&gt;
&amp;lt;code&amp;gt;astronaut_character_3d.gd&amp;lt;/code&amp;gt; provides walking and camera control for a procedurally (i.e., code-driven) animated astronaut player avatar.&lt;br /&gt;
&lt;br /&gt;
=== Excavation Tools ===&lt;br /&gt;
Attachments such as the bucket, forks, and saw blade extend the node class &amp;lt;code&amp;gt;ToolAttachment&amp;lt;/code&amp;gt; for various tasks.&lt;br /&gt;
&lt;br /&gt;
=== Excahauler Robot ===&lt;br /&gt;
WIP.&lt;br /&gt;
&lt;br /&gt;
== Objects ==&lt;br /&gt;
WIP.&lt;br /&gt;
&lt;br /&gt;
== Static Objects ==&lt;br /&gt;
Charge stations, solar panels, tool spawners, and other environment pieces provide energy or spawn tools.&lt;br /&gt;
&lt;br /&gt;
== Networking and Multiplayer ==&lt;br /&gt;
&amp;lt;code&amp;gt;GameManager.gd&amp;lt;/code&amp;gt; manages synchronized player/object data and signals for network updates.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;multiplayer_menu.gd&amp;lt;/code&amp;gt; lets players host or join games, start sessions, and handle disconnects.&lt;br /&gt;
&lt;br /&gt;
== User Interface ==&lt;br /&gt;
WIP.&lt;br /&gt;
&lt;br /&gt;
== Cameras and Controls ==&lt;br /&gt;
&amp;lt;code&amp;gt;movable_camera_3d.gd&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;freecam.gd&amp;lt;/code&amp;gt; implement user-controlled cameras, both first- and third‑person.&lt;br /&gt;
&lt;br /&gt;
The user interface (&amp;lt;code&amp;gt;ui.gd&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;joystick.gd&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;keybinds_menu.gd&amp;lt;/code&amp;gt;) provides HUD elements, customizable input bindings, and optional on-screen controls for mobile users.&lt;br /&gt;
&lt;br /&gt;
== Levels ==&lt;br /&gt;
Scenes in &amp;lt;code&amp;gt;demo/levels/&amp;lt;/code&amp;gt; (e.g., &amp;lt;code&amp;gt;main3D.tscn&amp;lt;/code&amp;gt; with script &amp;lt;code&amp;gt;main3D.gd&amp;lt;/code&amp;gt;) instantiate players, objects, and the terrain simulator, driving the overall game loop.&lt;br /&gt;
&lt;br /&gt;
== Additional Utilities ==&lt;br /&gt;
Miscellaneous scripts such as &amp;lt;code&amp;gt;fps_counter.gd&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;multiplayer_menu.gd&amp;lt;/code&amp;gt; assist with debugging and multiplayer session management.&lt;/div&gt;</summary>
		<author><name>Acmattson3</name></author>
	</entry>
	<entry>
		<id>https://aurorarobotics.sssn.us/index.php?title=LUMINSim&amp;diff=797</id>
		<title>LUMINSim</title>
		<link rel="alternate" type="text/html" href="https://aurorarobotics.sssn.us/index.php?title=LUMINSim&amp;diff=797"/>
		<updated>2025-07-05T00:03:31Z</updated>

		<summary type="html">&lt;p&gt;Acmattson3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;LUMINSim (AKA GodotRobot)&amp;lt;/h1&amp;gt;&lt;br /&gt;
[[File:Astronaut Cinematic.png|alt=The LUMINSim astronaut standing on the edge of Shackleton crater.|thumb|The LUMINSim astronaut standing on the edge of Shackleton crater.]]&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;LUMINSim&amp;lt;/strong&amp;gt; (Lunar Mining and Infrastructure Network Simulator) is an [https://github.com/auroraroboticslab/godotrobot/ open source] lunar robotic simulator developed by Aurora Robotics using [https://godotengine.org/ Godot 4.4]. It serves as a tool for testing and refining robots and their operations in a simulated lunar environment, directly supporting the overarching &amp;lt;strong&amp;gt;[[LUMIN]]&amp;lt;/strong&amp;gt; control system. The simulation focuses on the challenges of mining, construction, and other infrastructure tasks essential for future lunar exploration.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&#039;&#039;&#039;Developers:&#039;&#039;&#039; Visit [[LUMINSim Documentation]] for more detailed information about LUMINSim&#039;s inner workings.&amp;lt;/p&amp;gt;&lt;br /&gt;
[[File:Astra Digging.png|alt=The Astra robot digging in LUMINSim.|thumb|The Astra robot digging in LUMINSim.]]&lt;br /&gt;
&amp;lt;h2&amp;gt;Overview&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;LUMINSim aims to be a detailed simulation environment for lunar mining operations. As part of the broader [[LUMIN]] system, it allows the team to model various robotic designs, navigation algorithms, and task execution methods under realistic lunar conditions. The simulator currently features the &amp;lt;strong&amp;gt;[[LAMP v1|Astra]]&amp;lt;/strong&amp;gt; robot, the first prototype designed for lunar construction and mining.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The insights gained from LUMINSim&#039;s testing of Astra led to the development of a new, more versatile robot called &amp;lt;strong&amp;gt;[[LAMP]] (Lunar, Autonomous, Modular, Platform)&amp;lt;/strong&amp;gt;. Astra’s limitations and inadequacies identified in LUMINSim directly informed the modular design philosophy of LAMP, highlighting the simulator&#039;s crucial role in advancing lunar robotic platforms.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Features&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Key features of LUMINSim include:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Terrain Simulation:&amp;lt;/strong&amp;gt; Realistic lunar terrain with adjustable parameters. The terrain colliders match the mesh, providing an accurate physical environment for robotic interactions. Terrain texture and lighting are enhanced for greater visual fidelity and accuracy.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Autonomous Robot Control:&amp;lt;/strong&amp;gt; Users can control mining robots, including the Astra prototype, in both autonomous and manual modes. Features include an in-game console for issuing commands, camera controls, and freecam mode for navigation and inspection.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Robot Design Testing:&amp;lt;/strong&amp;gt; One of LUMINSim&#039;s primary purposes is to test and validate new robotic designs. Astra, the current robot in the simulator, serves as a learning tool that guided the development of LAMP by exposing design flaws and providing insight into necessary features for lunar operations.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Multi-Platform Support:&amp;lt;/strong&amp;gt; Supports multiple platforms, including desktop and Android, providing a versatile simulation environment for different users and use cases.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Immersive Astronaut Simulation:&amp;lt;/strong&amp;gt; Allows users to control an astronaut avatar within the simulation.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Modular Design:&amp;lt;/strong&amp;gt; The modular approach supports the addition of new features, robots, terrains, and missions, aligning with LAMP&#039;s design philosophy and the adaptive nature of the LUMIN control system.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Console Commands and UI Controls:&amp;lt;/strong&amp;gt; Includes various user commands and UI elements, such as speed readouts and simulation rate adjustments to enhance the simulation experience.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Current Status and Development&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;LUMINSim is currently in its alpha stage, with ongoing development aimed at refining robot behavior, terrain interactions, and autonomous capabilities. The latest updates focus on improving terrain generation, enhancing the control of the Astra robot, and introducing new elements such as mountable lights, speed controls, and navigation systems.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Although Astra is the only robot currently in the simulator, its design serves as a foundation for the ongoing development of LAMP. LUMINSim continues to be an essential testbed for validating new designs and technologies before their implementation in actual lunar operations.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Related Projects&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;[[LAMP]] (Lunar, Autonomous, Modular, Platform) - The next-generation robot designed based on the lessons learned from testing Astra in LUMINSim.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;[[LUMIN]] (Lunar Mining and Infrastructure Network) - The overarching control software that manages various lunar operations, using LUMINSim as its primary simulation environment for testing and development.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;How to Get Involved&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The Aurora Robotics Team welcomes collaboration with students and researchers interested in lunar robotics, simulation, and autonomous systems. For more details on LUMINSim or to contribute to its development, please visit our [https://github.com/auroraroboticslab/godotrobot/ GitHub repository].&amp;lt;/p&amp;gt;&lt;/div&gt;</summary>
		<author><name>Acmattson3</name></author>
	</entry>
	<entry>
		<id>https://aurorarobotics.sssn.us/index.php?title=LUMINSim_Documentation&amp;diff=796</id>
		<title>LUMINSim Documentation</title>
		<link rel="alternate" type="text/html" href="https://aurorarobotics.sssn.us/index.php?title=LUMINSim_Documentation&amp;diff=796"/>
		<updated>2025-07-04T23:53:02Z</updated>

		<summary type="html">&lt;p&gt;Acmattson3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= LUMINSim Documentation =&lt;br /&gt;
This is an ongoing page as I ([[User:Acmattson3|Andrew Mattson]]) document [[LUMINSim]]&#039;s current systems. This page is a &#039;&#039;major&#039;&#039; work in progress; feel free to add to it!&lt;br /&gt;
&lt;br /&gt;
Going forward, I hope to add:&lt;br /&gt;
&lt;br /&gt;
* A list of the non-default classes/nodes this project declares.&lt;br /&gt;
* In-depth descriptions of the inner workings of each major system, including:&lt;br /&gt;
** Power&lt;br /&gt;
** Tools and tool swapping&lt;br /&gt;
** Terrain&lt;br /&gt;
** Multiplayer&lt;br /&gt;
** Each user-controlled scene (robots and astronaut)&lt;br /&gt;
** The UI (multiplayer menu, settings menu, keybind menu)&lt;br /&gt;
** Each (largely) independent scene and corresponding system(s) (brick maker, dirt spawner, tool spawner, etc.)&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
To learn how to get started with development yourself, [https://github.com/AuroraRoboticsLab/GodotRobot/blob/main/README.md visit the repository&#039;s README] and follow the steps there.&lt;br /&gt;
&lt;br /&gt;
== Repository Structure ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;src/&amp;lt;/code&amp;gt;&#039;&#039;&#039; – C++ GDExtension code for terrain and registration. Likely to be deprecated. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Godot project containing levels, assets, and GDScript systems.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;export_presets.cfg&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Information for Godot on how to export the project into platform-native forms. Created automatically by the Godot export menu.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;game_manager.gd&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Handles the majority of the multiplayer logic, especially the sending of data between the clients and the server. See [[LUMINSim Documentation#Networking and Multiplayer|Networking and Multiplayer]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;project.godot&amp;lt;/code&amp;gt;&#039;&#039;&#039; – The main project file. Contains general project configurations and properties. This is the primary reference point for the Godot Engine when developing this project.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/astra&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the drivable [[LAMP v1|Astra]] robot. See [[LUMINSim Documentation#Astra Robot|Astra Robot]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/astronaut&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the in-game, procedurally-animated astronaut character. See [[LUMINSim Documentation#Astronaut Character|Astronaut Character]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/bin&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the compiled GDExtension binaries. Likely to be deprecated. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/components&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains components or component-like scenes and related files. See Components.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/environment&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files for the skybox (i.e., the stars in the sky). &lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/excahauler&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the drivable [[Excahauler]] robot. See [[LUMINSim Documentation#Excahauler Robot|Excahauler Robot]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/graphics&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains many images for icons and textures, especially for the user interface. See [[LUMINSim Documentation#User Interface|User Interface]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/landers&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains directories for different lunar landers. Landers are currently just static models.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/excahauler&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the drivable [[Excahauler]] robot. See [[LUMINSim Documentation#Excahauler Robot|Excahauler Robot]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/levels&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains the main playable (i.e., non-UI) scenes and related files. See [[LUMINSim Documentation#Levels|Levels]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/objects&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains non-static (i.e., movable RigidBody3D) objects. See [[LUMINSim Documentation#Objects|Objects]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/static_objects&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains static (i.e., unmovable StaticBody3D) objects and their related code. See [[LUMINSim Documentation#Static Objects|Static Objects]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/terrain&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Scenes and files pertaining to the &#039;&#039;dynamic&#039;&#039; (i.e., mineable) terrain. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/terrain_fixed&amp;lt;/code&amp;gt;&#039;&#039;&#039; –  Scenes and files pertaining to the &#039;&#039;static&#039;&#039; (i.e., unchanging) terrain. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/util&amp;lt;/code&amp;gt;&#039;&#039;&#039; –  Scenes and files pertaining to UI as well as other useful scripts. See [[LUMINSim Documentation#User Interface|User Interface]] and [[LUMINSim Documentation#Additional Utilities|Additional Utilities]].&lt;br /&gt;
In-depth repository structure documentation (brief descriptions on a per-scene basis) may be created here by anyone.&lt;br /&gt;
&lt;br /&gt;
== Terrain System (C++) ==&lt;br /&gt;
C++ based GDExtensions are likely to be replaced with a more developer-friendly system, likely one that downloads terrain from a separate server that handles all terrain logic.&lt;br /&gt;
&lt;br /&gt;
=== Static Terrain ===&lt;br /&gt;
&amp;lt;code&amp;gt;TerrainStatic256&amp;lt;/code&amp;gt; loads heightmaps, creates render and collision geometry.&lt;br /&gt;
&lt;br /&gt;
=== Dynamic Terrain ===&lt;br /&gt;
&amp;lt;code&amp;gt;TerrainSim&amp;lt;/code&amp;gt; simulates excavation, landslides, and merging dirtballs back into the heightmap.&lt;br /&gt;
&lt;br /&gt;
== Terrain Tools ==&lt;br /&gt;
Scripts such as &amp;lt;code&amp;gt;dirt_spawner.gd&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;dirtball.gd&amp;lt;/code&amp;gt; spawn and merge mobile particles with the dynamic terrain.&lt;br /&gt;
&lt;br /&gt;
== Robot Systems ==&lt;br /&gt;
&lt;br /&gt;
=== Astra Robot ===&lt;br /&gt;
The primary scene file is &amp;lt;code&amp;gt;astra_3d.tscn&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;astra_3d.gd&amp;lt;/code&amp;gt; handles driving and energy usage, as well as tool attachment. Works with &amp;lt;code&amp;gt;astra_arm_3d.gd&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;astra_hopper_3d.gd&amp;lt;/code&amp;gt; for arm/hopper actuation. See [[LUMINSim Documentation#Arm and Hopper|Arm and Hopper]].&lt;br /&gt;
&lt;br /&gt;
=== Arm and Hopper ===&lt;br /&gt;
Separate nodes controlled by &amp;lt;code&amp;gt;astra_arm_3d.gd&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;astra_hopper_3d.gd&amp;lt;/code&amp;gt; for the arm and hopper implement joint movement. &lt;br /&gt;
&lt;br /&gt;
=== Astronaut Character ===&lt;br /&gt;
&amp;lt;code&amp;gt;astronaut_character_3d.gd&amp;lt;/code&amp;gt; provides walking and camera control for a procedurally (i.e., code-driven) animated astronaut player avatar.&lt;br /&gt;
&lt;br /&gt;
=== Excavation Tools ===&lt;br /&gt;
Attachments such as the bucket, forks, and saw blade extend the node class &amp;lt;code&amp;gt;ToolAttachment&amp;lt;/code&amp;gt; for various tasks.&lt;br /&gt;
&lt;br /&gt;
=== Excahauler Robot ===&lt;br /&gt;
WIP.&lt;br /&gt;
&lt;br /&gt;
== Objects ==&lt;br /&gt;
WIP.&lt;br /&gt;
&lt;br /&gt;
== Static Objects ==&lt;br /&gt;
Charge stations, solar panels, tool spawners, and other environment pieces provide energy or spawn tools.&lt;br /&gt;
&lt;br /&gt;
== Networking and Multiplayer ==&lt;br /&gt;
&amp;lt;code&amp;gt;GameManager.gd&amp;lt;/code&amp;gt; manages synchronized player/object data and signals for network updates.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;multiplayer_menu.gd&amp;lt;/code&amp;gt; lets players host or join games, start sessions, and handle disconnects.&lt;br /&gt;
&lt;br /&gt;
== User Interface ==&lt;br /&gt;
WIP.&lt;br /&gt;
&lt;br /&gt;
== Cameras and Controls ==&lt;br /&gt;
&amp;lt;code&amp;gt;movable_camera_3d.gd&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;freecam.gd&amp;lt;/code&amp;gt; implement user-controlled cameras, both first- and third‑person.&lt;br /&gt;
&lt;br /&gt;
The user interface (&amp;lt;code&amp;gt;ui.gd&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;joystick.gd&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;keybinds_menu.gd&amp;lt;/code&amp;gt;) provides HUD elements, customizable input bindings, and optional on-screen controls for mobile users.&lt;br /&gt;
&lt;br /&gt;
== Levels ==&lt;br /&gt;
Scenes in &amp;lt;code&amp;gt;demo/levels/&amp;lt;/code&amp;gt; (e.g., &amp;lt;code&amp;gt;main3D.tscn&amp;lt;/code&amp;gt; with script &amp;lt;code&amp;gt;main3D.gd&amp;lt;/code&amp;gt;) instantiate players, objects, and the terrain simulator, driving the overall game loop.&lt;br /&gt;
&lt;br /&gt;
== Additional Utilities ==&lt;br /&gt;
Miscellaneous scripts such as &amp;lt;code&amp;gt;fps_counter.gd&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;multiplayer_menu.gd&amp;lt;/code&amp;gt; assist with debugging and multiplayer session management.&lt;/div&gt;</summary>
		<author><name>Acmattson3</name></author>
	</entry>
	<entry>
		<id>https://aurorarobotics.sssn.us/index.php?title=LUMINSim_Documentation&amp;diff=795</id>
		<title>LUMINSim Documentation</title>
		<link rel="alternate" type="text/html" href="https://aurorarobotics.sssn.us/index.php?title=LUMINSim_Documentation&amp;diff=795"/>
		<updated>2025-07-04T23:34:00Z</updated>

		<summary type="html">&lt;p&gt;Acmattson3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== LUMINSim Documentation ==&lt;br /&gt;
This is an ongoing page as I document [[LUMINSim]]&#039;s current systems. Feel free to add to it!&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
To learn how to get started with development yourself, [https://github.com/AuroraRoboticsLab/GodotRobot/blob/main/README.md visit the repository&#039;s README] and follow the steps there.&lt;br /&gt;
&lt;br /&gt;
== Repository Structure ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;src/&amp;lt;/code&amp;gt;&#039;&#039;&#039; – C++ GDExtension code for terrain and registration. Likely to be deprecated. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Godot project containing levels, assets, and GDScript systems.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;export_presets.cfg&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Information for Godot on how to export the project into platform-native forms. Created automatically by the Godot export menu.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;game_manager.gd&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Handles the majority of the multiplayer logic, especially the sending of data between the clients and the server. See [[LUMINSim Documentation#Networking and Multiplayer|Networking and Multiplayer]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/astra&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the drivable [[LAMP v1|Astra]] robot. See [[LUMINSim Documentation#Astra Robot|Astra Robot]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/astronaut&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the in-game, procedurally-animated astronaut character. See [[LUMINSim Documentation#Astronaut Character|Astronaut Character]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/bin&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the compiled GDExtension binaries. Likely to be deprecated. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/components&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains components or component-like scenes and related files. See Components.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/environment&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files for the skybox (i.e., the stars in the sky). &lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/excahauler&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the drivable [[Excahauler]] robot. See [[LUMINSim Documentation#Excahauler Robot|Excahauler Robot]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/graphics&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains many images for icons and textures, especially for the user interface. See [[LUMINSim Documentation#User Interface|User Interface]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/landers&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains directories for different (currently, static models of) lunar landers.&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/excahauler&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Files pertaining to the drivable [[Excahauler]] robot. See [[LUMINSim Documentation#Excahauler Robot|Excahauler Robot]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/levels&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains the main playable (i.e., non-UI) scenes and related files. See [[LUMINSim Documentation#Levels|Levels]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/objects&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains non-static (i.e., movable RigidBody3D) objects. See [[LUMINSim Documentation#Objects|Objects]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/static_objects&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Contains static (i.e., unmovable StaticBody3D) objects and their related code. See [[LUMINSim Documentation#Static Objects|Static Objects]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/terrain&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Scenes and files pertaining to the &#039;&#039;dynamic&#039;&#039; (i.e., mineable) terrain. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/terrain_fixed&amp;lt;/code&amp;gt;&#039;&#039;&#039; –  Scenes and files pertaining to the &#039;&#039;static&#039;&#039; (i.e., unchanging) terrain. See [[LUMINSim Documentation#Terrain System (C++)|Terrain System (C++)]].&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/util&amp;lt;/code&amp;gt;&#039;&#039;&#039; –  Scenes and files pertaining to UI. See [[LUMINSim Documentation#User Interface|User Interface]].&lt;br /&gt;
&lt;br /&gt;
== Terrain System (C++) ==&lt;br /&gt;
C++ based GDExtensions are likely to be replaced with a more developer-friendly system, likely one that downloads terrain from a separate server that handles all terrain logic.&lt;br /&gt;
&lt;br /&gt;
=== Static Terrain ===&lt;br /&gt;
&amp;lt;code&amp;gt;TerrainStatic256&amp;lt;/code&amp;gt; loads heightmaps, creates render and collision geometry&lt;br /&gt;
&lt;br /&gt;
=== Dynamic Terrain ===&lt;br /&gt;
&amp;lt;code&amp;gt;TerrainSim&amp;lt;/code&amp;gt; simulates excavation, landslides, and merging dirtballs back into the heightmap&lt;br /&gt;
&lt;br /&gt;
== Terrain Tools ==&lt;br /&gt;
Scripts such as &amp;lt;code&amp;gt;dirt_spawner.gd&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;dirtball.gd&amp;lt;/code&amp;gt; spawn and merge mobile particles with the dynamic terrain&lt;br /&gt;
&lt;br /&gt;
== Robot Systems ==&lt;br /&gt;
&lt;br /&gt;
=== Astra Robot ===&lt;br /&gt;
&amp;lt;code&amp;gt;astra_3d.gd&amp;lt;/code&amp;gt; handles driving, energy usage, and tool attachments for the primary rover&lt;br /&gt;
&lt;br /&gt;
=== Arm and Hopper ===&lt;br /&gt;
Separate nodes for the arm and hopper implement joint movement and excavation logic&lt;br /&gt;
&lt;br /&gt;
=== Astronaut Character ===&lt;br /&gt;
&amp;lt;code&amp;gt;astronaut_character_3d.gd&amp;lt;/code&amp;gt; provides walking and camera control for a player avatar&lt;br /&gt;
&lt;br /&gt;
=== Excavation Tools ===&lt;br /&gt;
Attachments such as the bucket, forks, and saw blade extend &amp;lt;code&amp;gt;ToolAttachment&amp;lt;/code&amp;gt; for various tasks&lt;br /&gt;
&lt;br /&gt;
=== Excahauler Robot ===&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
== Objects ==&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
== Static Objects ==&lt;br /&gt;
Charge stations, solar panels, tool spawners, and other environment pieces provide energy or spawn tools&lt;br /&gt;
&lt;br /&gt;
== Networking and Multiplayer ==&lt;br /&gt;
&amp;lt;code&amp;gt;GameManager.gd&amp;lt;/code&amp;gt; manages synchronized player/object data and signals for network updates&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;multiplayer_menu.gd&amp;lt;/code&amp;gt; lets players host or join games, start sessions, and handle disconnects&lt;br /&gt;
&lt;br /&gt;
== User Interface ==&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
== Cameras and Controls ==&lt;br /&gt;
&amp;lt;code&amp;gt;movable_camera_3d.gd&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;freecam.gd&amp;lt;/code&amp;gt; implement user-controlled cameras, both first- and third‑person&lt;br /&gt;
&lt;br /&gt;
The user interface (&amp;lt;code&amp;gt;ui.gd&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;joystick.gd&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;keybinds_menu.gd&amp;lt;/code&amp;gt;) provides HUD elements, customizable input bindings, and optional on-screen controls for mobile users&lt;br /&gt;
&lt;br /&gt;
== Levels ==&lt;br /&gt;
Scenes in &amp;lt;code&amp;gt;demo/levels/&amp;lt;/code&amp;gt; (e.g., &amp;lt;code&amp;gt;main3D.tscn&amp;lt;/code&amp;gt; with script &amp;lt;code&amp;gt;main3D.gd&amp;lt;/code&amp;gt;) instantiate players, objects, and the terrain simulator, driving the overall game loop&lt;br /&gt;
&lt;br /&gt;
== Additional Utilities ==&lt;br /&gt;
Miscellaneous scripts such as &amp;lt;code&amp;gt;fps_counter.gd&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;multiplayer_menu.gd&amp;lt;/code&amp;gt; assist with debugging and session management&lt;br /&gt;
&lt;br /&gt;
== Building the Extension ==&lt;br /&gt;
The &amp;lt;code&amp;gt;SConstruct&amp;lt;/code&amp;gt; file compiles all &amp;lt;code&amp;gt;.cpp&amp;lt;/code&amp;gt; sources into a shared library used by the Godot projec&lt;/div&gt;</summary>
		<author><name>Acmattson3</name></author>
	</entry>
	<entry>
		<id>https://aurorarobotics.sssn.us/index.php?title=LUMINSim_Documentation&amp;diff=794</id>
		<title>LUMINSim Documentation</title>
		<link rel="alternate" type="text/html" href="https://aurorarobotics.sssn.us/index.php?title=LUMINSim_Documentation&amp;diff=794"/>
		<updated>2025-07-04T23:05:46Z</updated>

		<summary type="html">&lt;p&gt;Acmattson3: AI template (to be updated)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== LUMINSim Documentation ==&lt;br /&gt;
This is an ongoing page as I document [[LUMINSim]]&#039;s current systems. Feel free to add to it!&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
To learn how to get started with development yourself, [https://github.com/AuroraRoboticsLab/GodotRobot/blob/main/README.md visit the repository&#039;s README] and follow the steps there.&lt;br /&gt;
&lt;br /&gt;
== Repository Structure ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;src/&amp;lt;/code&amp;gt;&#039;&#039;&#039; – C++ GDExtension code for terrain and registration&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;demo/&amp;lt;/code&amp;gt;&#039;&#039;&#039; – Godot project containing levels, assets, and GDScript systems&lt;br /&gt;
&lt;br /&gt;
== Terrain System (C++) ==&lt;br /&gt;
&lt;br /&gt;
=== Static Terrain ===&lt;br /&gt;
&amp;lt;code&amp;gt;TerrainStatic256&amp;lt;/code&amp;gt; loads heightmaps, creates render and collision geometry&lt;br /&gt;
&lt;br /&gt;
=== Dynamic Terrain ===&lt;br /&gt;
&amp;lt;code&amp;gt;TerrainSim&amp;lt;/code&amp;gt; simulates excavation, landslides, and merging dirtballs back into the heightmap&lt;br /&gt;
&lt;br /&gt;
== Terrain Tools ==&lt;br /&gt;
Scripts such as &amp;lt;code&amp;gt;dirt_spawner.gd&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;dirtball.gd&amp;lt;/code&amp;gt; spawn and merge mobile particles with the dynamic terrain&lt;br /&gt;
&lt;br /&gt;
== Robot Systems ==&lt;br /&gt;
&lt;br /&gt;
=== Astra Rover ===&lt;br /&gt;
&amp;lt;code&amp;gt;astra_3d.gd&amp;lt;/code&amp;gt; handles driving, energy usage, and tool attachments for the primary rover&lt;br /&gt;
&lt;br /&gt;
=== Arm and Hopper ===&lt;br /&gt;
Separate nodes for the arm and hopper implement joint movement and excavation logic&lt;br /&gt;
&lt;br /&gt;
=== Astronaut Character ===&lt;br /&gt;
&amp;lt;code&amp;gt;astronaut_character_3d.gd&amp;lt;/code&amp;gt; provides walking and camera control for a player avatar&lt;br /&gt;
&lt;br /&gt;
=== Excavation Tools ===&lt;br /&gt;
Attachments such as the bucket, forks, and saw blade extend &amp;lt;code&amp;gt;ToolAttachment&amp;lt;/code&amp;gt; for various tasks&lt;br /&gt;
&lt;br /&gt;
== Static Objects ==&lt;br /&gt;
Charge stations, solar panels, tool spawners, and other environment pieces provide energy or spawn tools&lt;br /&gt;
&lt;br /&gt;
== Networking and Multiplayer ==&lt;br /&gt;
&amp;lt;code&amp;gt;GameManager.gd&amp;lt;/code&amp;gt; manages synchronized player/object data and signals for network updates&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;multiplayer_menu.gd&amp;lt;/code&amp;gt; lets players host or join games, start sessions, and handle disconnects&lt;br /&gt;
&lt;br /&gt;
== Cameras and Controls ==&lt;br /&gt;
&amp;lt;code&amp;gt;movable_camera_3d.gd&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;freecam.gd&amp;lt;/code&amp;gt; implement user-controlled cameras, both first- and third‑person&lt;br /&gt;
&lt;br /&gt;
The user interface (&amp;lt;code&amp;gt;ui.gd&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;joystick.gd&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;keybinds_menu.gd&amp;lt;/code&amp;gt;) provides HUD elements, customizable input bindings, and optional on-screen controls for mobile users&lt;br /&gt;
&lt;br /&gt;
== Example Levels ==&lt;br /&gt;
Scenes in &amp;lt;code&amp;gt;demo/levels/&amp;lt;/code&amp;gt; (e.g., &amp;lt;code&amp;gt;main3D.tscn&amp;lt;/code&amp;gt; with script &amp;lt;code&amp;gt;main3D.gd&amp;lt;/code&amp;gt;) instantiate players, objects, and the terrain simulator, driving the overall game loop&lt;br /&gt;
&lt;br /&gt;
== Additional Utilities ==&lt;br /&gt;
Miscellaneous scripts such as &amp;lt;code&amp;gt;fps_counter.gd&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;multiplayer_menu.gd&amp;lt;/code&amp;gt; assist with debugging and session management&lt;br /&gt;
&lt;br /&gt;
== Building the Extension ==&lt;br /&gt;
The &amp;lt;code&amp;gt;SConstruct&amp;lt;/code&amp;gt; file compiles all &amp;lt;code&amp;gt;.cpp&amp;lt;/code&amp;gt; sources into a shared library used by the Godot projec&lt;/div&gt;</summary>
		<author><name>Acmattson3</name></author>
	</entry>
	<entry>
		<id>https://aurorarobotics.sssn.us/index.php?title=LUMINSim_Documentation&amp;diff=793</id>
		<title>LUMINSim Documentation</title>
		<link rel="alternate" type="text/html" href="https://aurorarobotics.sssn.us/index.php?title=LUMINSim_Documentation&amp;diff=793"/>
		<updated>2025-07-04T22:43:19Z</updated>

		<summary type="html">&lt;p&gt;Acmattson3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== LUMINSim Documentation ==&lt;br /&gt;
This is an ongoing page as I document [[LUMINSim]]&#039;s current systems.&lt;/div&gt;</summary>
		<author><name>Acmattson3</name></author>
	</entry>
	<entry>
		<id>https://aurorarobotics.sssn.us/index.php?title=LUMINSim_Documentation&amp;diff=792</id>
		<title>LUMINSim Documentation</title>
		<link rel="alternate" type="text/html" href="https://aurorarobotics.sssn.us/index.php?title=LUMINSim_Documentation&amp;diff=792"/>
		<updated>2025-07-04T22:42:01Z</updated>

		<summary type="html">&lt;p&gt;Acmattson3: Created page with &amp;quot;== LUMINSim Documentation == This is an ongoing page as I document LUMINSim&amp;#039;s current systems.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== LUMINSim Documentation ==&lt;br /&gt;
This is an ongoing page as I document LUMINSim&#039;s current systems.&lt;/div&gt;</summary>
		<author><name>Acmattson3</name></author>
	</entry>
	<entry>
		<id>https://aurorarobotics.sssn.us/index.php?title=Excahauler&amp;diff=791</id>
		<title>Excahauler</title>
		<link rel="alternate" type="text/html" href="https://aurorarobotics.sssn.us/index.php?title=Excahauler&amp;diff=791"/>
		<updated>2025-07-04T21:39:30Z</updated>

		<summary type="html">&lt;p&gt;Acmattson3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;Excahauler Mining Robot&amp;lt;/h1&amp;gt;&lt;br /&gt;
[[File:Team-with-excahauler.jpg|alt=The Aurora Robotics Team alongside the Excahauler robot at UAF&#039;s 2024 Party in the Park.|thumb|The Aurora Robotics Team alongside the Excahauler robot at UAF&#039;s 2024 Party in the Park.]]&lt;br /&gt;
&amp;lt;p&amp;gt;The &amp;lt;strong&amp;gt;Excahauler&amp;lt;/strong&amp;gt; is an autonomous mining robot built for [[Project Archives|NASA&#039;s Break the Ice Challenge]] using a combination of welded steel and 3D printed parts. Designed to handle excavation and mining tasks in challenging environments, featuring robust construction and adaptable components. [https://www.youtube.com/watch?v=pq0jfVteUY0&amp;amp;ab_channel=OrionLawlor Here is a YouTube video] of Excahauler in action mining a block of concrete.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Robot Components&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Frame&amp;lt;/h3&amp;gt;&lt;br /&gt;
[[File:Excahauler sideview.png|alt=A sideview of the Excahauler robot.|thumb|A sideview of the Excahauler robot.]]&lt;br /&gt;
&amp;lt;p&amp;gt;The base of the robot consists of a welded steel frame made from 1-inch (25mm) steel box tubing. The front wheels attach directly to the frame for stability, while the middle and rear wheels are mounted on a rocker system to adapt to uneven terrain. The electronics box, front fork, and arm boom are also bolted directly onto the frame.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Robot Arm&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The robot arm has two main links:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Boom:&amp;lt;/strong&amp;gt; Connects to the frame, providing front-to-back motion. It is aligned with an inertial measurement unit mounted on an angled bar.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Stick:&amp;lt;/strong&amp;gt; The stick, following excavator naming conventions, has an Intel RealSense D455 depth camera mounted on top and a small electronics box for motor controllers.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Tool Coupler&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The tool coupler allows for quick tool changes using a two-pin system similar to an excavator&#039;s quick-change setup. It includes a locking mechanism to secure tools in place, allowing the robot to switch between different excavation tools efficiently.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Excavation Tools&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The robot can use various excavation tools, with the primary tool being a rock grinder. This tool spins a drum to mill material directly into the front scoop. The large ammo can on the robot houses the batteries, motor controller, and space for cooling oil.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Front Scoop&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The front scoop has a volume of 50 liters, allowing it to carry a payload of approximately 50 kg of broken-up material. It features a fork linear actuator for raising and lowering relative to the frame and a dump actuator for tilting the scoop to unload material.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Coordinate System&amp;lt;/h2&amp;gt;&lt;br /&gt;
[[File:Excahauler Frame.jpg|alt=Excahauler&#039;s bare frame, with a colored axis label at the center. |thumb|Excahauler&#039;s bare frame, with a colored axis label at the center. Red is X, yellow is Y, and blue is Z.]]&lt;br /&gt;
&amp;lt;p&amp;gt;The robot follows a right-handed coordinate system:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;+Y is forward&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;+X is to the robot&#039;s right&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;+Z is up&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Some components use rotated coordinate systems to align with the mounted sensors.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Development&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The Excahauler is an ongoing project aimed at advancing autonomous mining technologies. The robot&#039;s design and functionality continue to be refined based on testing and research. Its design is a major influence toward [[L.A.M.P: Lunar, Autonomous, Modular Platform|LAMP]] candidate designs.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Further Information&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;For more details on the robot&#039;s design and development, visit the project&#039;s [https://github.com/auroraroboticslab/excahauler GitHub page].&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For questions or suggestions, please contact lawlor@alaska.edu.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;Note: Unless specified otherwise, the source code files are released to the public domain.&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;&lt;/div&gt;</summary>
		<author><name>Acmattson3</name></author>
	</entry>
	<entry>
		<id>https://aurorarobotics.sssn.us/index.php?title=NASA_X-Hab_2025:_Modular_Robotic_Construction&amp;diff=790</id>
		<title>NASA X-Hab 2025: Modular Robotic Construction</title>
		<link rel="alternate" type="text/html" href="https://aurorarobotics.sssn.us/index.php?title=NASA_X-Hab_2025:_Modular_Robotic_Construction&amp;diff=790"/>
		<updated>2025-07-04T21:37:40Z</updated>

		<summary type="html">&lt;p&gt;Acmattson3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;This is a stub. You can help by expanding it.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Overview&amp;lt;/h2&amp;gt;&lt;br /&gt;
[[File:Nasa xhab.jpg|thumb|NASA X-Hab Logo]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;In 2024, [https://spacegrant.org/wp-content/uploads/2024/03/M2M-X-Hab-Challenge-Solicitation-2025.pdf NASA&#039;s M2M X-Hab Academic Innovation Challenge for 2025] was released, for which [[Main Page|the Aurora Robotics Lab]] at the University of Alaska Fairbanks was accepted and funded through NASA’s 2024–2025 Moon to Mars X-Hab Academic Innovation Challenge. Our goal was to explore modular robotic construction techniques for lunar infrastructure, especially focusing on micrometeoroid-resistant arch structures made from modular steel trusses and covered in lunar regolith, with a clear path to fully autonomous robotic construction.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The project culminated in the development of the [[Excahauler|Excahauler robotic platform]] with a custom-built arm and end-effector, capable of aligning and assembling scaled modular truss components. Despite limitations in time and resources, the team demonstrated capabilities including truss manipulation, partial structural testing, and scale backfilling with regolith simulant (snow).&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;This wiki page is a very abridged version of our [https://docs.google.com/document/d/1N_494oalexJXKeGfjDocUZKAdBZPZ5RYqvyGjyIhMkg/edit?tab=t.0 full final report] which should soon be added to [https://ntrs.nasa.gov/ NASA&#039;s NTRS database].&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Project Vision and Mission&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Long-Term Vision:&amp;lt;/strong&amp;gt; Transform the solar system using robotic construction with local materials.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Short-Term Vision:&amp;lt;/strong&amp;gt; Develop robotic infrastructure construction technologies for the Artemis Base Camp.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Mission:&amp;lt;/strong&amp;gt; Design and demonstrate robotic tools and modular structures capable of assembling scalable micrometeoroid-resistant lunar shelters.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;The L-Truss System&amp;lt;/h2&amp;gt;&lt;br /&gt;
[[File:L-Truss.jpg|alt=The final full-steel L-Truss design.|thumb|The final full-steel L-Truss design.]]&lt;br /&gt;
&amp;lt;p&amp;gt;The primary structural innovation was the development of the &amp;lt;strong&amp;gt;L-Truss&amp;lt;/strong&amp;gt;: A modular trapezoidal truss segment. These trusses connect via push-fit endplates and spring-loaded capture pins to form straight or curved assemblies, including arches and retaining walls. The final full-steel design used plasma-cut end plates with a 3D printed door latch-style connection. However, full robotic connection could not be demonstrated with this design, so we made some last minute changes. The final prototype design included:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Hybrid steel construction with 3D printed carbon-fiber polycarbonate alignment funnels.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Spring-loaded pin latching mechanisms for tool-free robotic assembly.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Optional upright members for regolith support and buckling resistance.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Final tested form: 1.5m long, ~3kg, with a base angle of 22.5°.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;A scale 3D printable version is publicly available: [https://www.printables.com/model/1305834-trapezoidal-l-truss-clip-together-construction-mod L-Truss Model]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Structure Requirements&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Accommodate 2.6m x 2.6m vehicles within the constructed arch structure. (I.0)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Truss segments must remain under 2.0 meters for transport and robotic handling. (I.1.1)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Regolith shielding: Support ≥0.2m regolith equivalent for radiation/thermal protection. (O.0)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Minimum compressive load capacity of 300 kgf with ≥2.0 safety factor. (I.1.2, I.2.1)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Robot-compatible assembly path: all actions must have potential for automation. (E.0, E.2)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Concept of Operations&amp;lt;/h2&amp;gt;&lt;br /&gt;
[[File:Arch Assembly Graphic.png|alt=A graphical representation of the truss section assembly process. |thumb|A graphical representation of the truss section assembly process. This is to be done in parallel with other truss sections (i.e., ones behind the one visible) to create a full truss structure.]]&lt;br /&gt;
&amp;lt;h3&amp;gt;Lunar Deployment Plan&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Site Preparation:&amp;lt;/strong&amp;gt; The Excahauler prepares a foundation using excavation tools.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Truss Deployment:&amp;lt;/strong&amp;gt; Trusses are unloaded from a logistics lander and staged for assembly.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Structural Assembly:&amp;lt;/strong&amp;gt; Robots assemble the arch structure according to the graphic on the right.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Backfilling:&amp;lt;/strong&amp;gt; Lunar regolith is put over the structure via ballistic throwing or traditional scooping.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Use Phase:&amp;lt;/strong&amp;gt; Covered arches serve as shielding for sensitive lunar equipment or crew.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Ground Demonstration Activities&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;1:10 scale arch model tested with regolith simulant (basalt dust).&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Full-scale hybrid trusses fabricated and manipulated via teleoperation.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Robotic assembly verified using [[Excahauler]] and custom-built 2500:1 reducer gearbox arm.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Project Phases&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;System Definition Review (SDR):&amp;lt;/strong&amp;gt; October 4, 2024&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Preliminary Design Review (PDR):&amp;lt;/strong&amp;gt; November 15, 2024&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Critical Design Review (CDR):&amp;lt;/strong&amp;gt; January 24, 2025&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Progress Checkpoint Review (PCR):&amp;lt;/strong&amp;gt; April 18, 2025&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Final Report:&amp;lt;/strong&amp;gt; May 23, 2025&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Robot System: [[Excahauler]]&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Originally designed for the [[Project Archives|2022 NASA Break the Ice Challenge]].&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Outfitted with a custom modular manipulator arm with 3D printed stepped planetary gearboxes.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Used in successful teleoperated tests to transport and align L-Truss segments.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Software and Simulation&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The team developed and tested robotic workflows using the following tools:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;[[LUMINSim|Godot-based simulator:]]&amp;lt;/strong&amp;gt; Visualized structure assembly and layout.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;[https://github.com/auroraRoboticsLab/MiningRobot?tab=readme-ov-file#lunatic Custom autonomy stack (LUNATIC):]&amp;lt;/strong&amp;gt; Handles teleoperation, control, and vision.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;[https://docs.ros.org/en/humble/index.html ROS2] / [https://moveit.picknik.ai/main/index.html MoveIt]:&amp;lt;/strong&amp;gt; Inverse kinematics modeled, full integration for automation incomplete.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Testing and Validation&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;FEM analysis showed safety factor &amp;gt;2.6 under 500N compressive loads.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Hybrid trusses withstood &amp;gt;500N axial loads; failure occurred at 230N in bending.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;1/10 scale arch supported &amp;gt;12kg in Earth gravity, equivalent to 36+ tonnes in Mars gravity at full scale.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Educational Integration&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Project integrated into UAF&#039;s CS 493 (Fall) and CS 454 (Spring), providing hands-on systems engineering experience to undergraduates and graduate students in mechanical and computer science disciplines.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Outreach Activities&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;UAF Party in the Park:&amp;lt;/strong&amp;gt; Public engagement event with live robot demos.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;FTC Robotics Tours:&amp;lt;/strong&amp;gt; Guided tour for K–12 robotics students.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;UAF Engineering Open House:&amp;lt;/strong&amp;gt; Structural demo and recruiting opportunity.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Lessons Learned&amp;lt;/h2&amp;gt;We were not able to complete our promised deliverables to full satisfaction due to time constraints and lack of defined leadership structure. We learned important lessons about:&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Structure:&amp;lt;/strong&amp;gt; Even small teams benefit from defined leadership and task ownership.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Planning:&amp;lt;/strong&amp;gt; Conservative scoping ensures project deliverables can be met.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Fabrication:&amp;lt;/strong&amp;gt; Early design-for-manufacturing saves time and enables iteration.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Future Work&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Complete full-scale robotic arch assembly.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Fully integrate MoveIt into robotic control stack for autonomous alignment.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Refine end-effector precision and truss fabrication for large-scale repeatability.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Additional Information&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Project Lead: [[User:Acmattson3|Andrew Mattson]], UAF CS BS/MS student&lt;br /&gt;
* Faculty Advisor: [[User:Lawlor|Dr. Orion Lawlor]] (oslawlor@alaska.edu)&lt;br /&gt;
* Team Members:&lt;br /&gt;
** [[User:Frozenstiff|Elliott Madsen]] (ME BS)&lt;br /&gt;
** Delano Horner (ME BS)&lt;br /&gt;
** Daniel Schliesing (ME BS)&lt;br /&gt;
** Kory Lamme (ME BS)&lt;/div&gt;</summary>
		<author><name>Acmattson3</name></author>
	</entry>
	<entry>
		<id>https://aurorarobotics.sssn.us/index.php?title=User:Lawlor&amp;diff=789</id>
		<title>User:Lawlor</title>
		<link rel="alternate" type="text/html" href="https://aurorarobotics.sssn.us/index.php?title=User:Lawlor&amp;diff=789"/>
		<updated>2025-07-04T21:36:28Z</updated>

		<summary type="html">&lt;p&gt;Acmattson3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;NOTICE&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;This page is largely generated by ChatGPT.&amp;lt;/strong&amp;gt; Some information found here may be inaccurate until revised by Dr. Lawlor himself. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Dr. Orion Sky Lawlor&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Profile&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;I am an Associate Professor of Computer Science at the [https://www.uaf.edu/uaf/ University of Alaska Fairbanks (UAF)]. My work focuses on robotics, computer graphics, and parallel computing. I use graphics hardware to accelerate simulations of physical phenomena, which has applications in high-performance computing, robotics, and industrial motion control.&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;[https://www.cs.uaf.edu/~olawlor/ See my main website here].&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Contact Information&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Email:&amp;lt;/strong&amp;gt; lawlor@alaska.edu&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Office Phone:&amp;lt;/strong&amp;gt; +1 907 474-7678&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Office:&amp;lt;/strong&amp;gt; Duckering 535 or on Zoom: [https://alaska.zoom.us/j/9074747678 Join my Zoom Office Hours] (1-2 pm MWF)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Research Interests&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Robotics and autonomous systems&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Computer graphics and rendering&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Parallel computing&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;3D printing&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Academic Background&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;I earned my Ph.D. in Computer Science from the University of Illinois at Urbana-Champaign, where my research focused on computer graphics and parallel computing. I also hold an M.S. in Computer Science from UIUC and a B.S. in Computer Science from the University of Alaska Fairbanks.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Teaching&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;I teach a variety of computer science courses at UAF, including robotics, operating systems, computer graphics, and simulations. I am also involved in special topics courses related to robotics and NASA&#039;s systems engineering practices.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Projects&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;I lead the Aurora Robotics Lab at UAF, where we focus on autonomous robotic excavation and construction projects. Currently, I am working on developing autonomous mining robots for lunar base construction as part of the [[NASA X-Hab 2025: Modular Robotic Construction|X-Hab Challenge]] in collaboration with NASA. I also contribute to the &amp;lt;strong&amp;gt;[[LUMINSim]]&amp;lt;/strong&amp;gt; simulator and the &amp;lt;strong&amp;gt;[[LAMP]]&amp;lt;/strong&amp;gt; project for autonomous lunar infrastructure development.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Additional Information&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;For more details, please visit my [https://lawlor.cs.uaf.edu/~olawlor/ UAF Homepage].&amp;lt;/p&amp;gt;&lt;/div&gt;</summary>
		<author><name>Acmattson3</name></author>
	</entry>
	<entry>
		<id>https://aurorarobotics.sssn.us/index.php?title=Excahauler&amp;diff=788</id>
		<title>Excahauler</title>
		<link rel="alternate" type="text/html" href="https://aurorarobotics.sssn.us/index.php?title=Excahauler&amp;diff=788"/>
		<updated>2025-07-04T21:31:45Z</updated>

		<summary type="html">&lt;p&gt;Acmattson3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;Excahauler Mining Robot&amp;lt;/h1&amp;gt;&lt;br /&gt;
[[File:Team-with-excahauler.jpg|alt=The Aurora Robotics Team alongside the Excahauler robot at UAF&#039;s 2024 Party in the Park.|thumb|The Aurora Robotics Team alongside the Excahauler robot at UAF&#039;s 2024 Party in the Park.]]&lt;br /&gt;
&amp;lt;p&amp;gt;The &amp;lt;strong&amp;gt;Excahauler&amp;lt;/strong&amp;gt; is an autonomous mining robot built for [[Project Archives|NASA&#039;s Break the Ice Challenge]] using a combination of welded steel and 3D printed parts. Designed to handle excavation and mining tasks in challenging environments, featuring robust construction and adaptable components. [https://www.youtube.com/watch?v=pq0jfVteUY0&amp;amp;ab_channel=OrionLawlor Here is a YouTube video] of Excahauler in action mining a block of concrete.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Robot Components&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Frame&amp;lt;/h3&amp;gt;&lt;br /&gt;
[[File:Excahauler sideview.png|alt=A sideview of the Excahauler robot.|thumb|A sideview of the Excahauler robot.]]&lt;br /&gt;
&amp;lt;p&amp;gt;The base of the robot consists of a welded steel frame made from 1-inch (25mm) steel box tubing. The front wheels attach directly to the frame for stability, while the middle and rear wheels are mounted on a rocker system to adapt to uneven terrain. The electronics box, front fork, and arm boom are also bolted directly onto the frame.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Robot Arm&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The robot arm has two main links:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Boom:&amp;lt;/strong&amp;gt; Connects to the frame, providing front-to-back motion. It is aligned with an inertial measurement unit mounted on an angled bar.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Stick:&amp;lt;/strong&amp;gt; The stick, following excavator naming conventions, has an Intel RealSense D455 depth camera mounted on top and a small electronics box for motor controllers.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Tool Coupler&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The tool coupler allows for quick tool changes using a two-pin system similar to an excavator&#039;s quick-change setup. It includes a locking mechanism to secure tools in place, allowing the robot to switch between different excavation tools efficiently.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Excavation Tools&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The robot can use various excavation tools, with the primary tool being a rock grinder. This tool spins a drum to mill material directly into the front scoop. The large ammo can on the robot houses the batteries, motor controller, and space for cooling oil.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Front Scoop&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The front scoop has a volume of 50 liters, allowing it to carry a payload of approximately 50 kg of broken-up material. It features a fork linear actuator for raising and lowering relative to the frame and a dump actuator for tilting the scoop to unload material.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Coordinate System&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The robot follows a right-handed coordinate system:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;+Y is forward&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;+X is to the robot&#039;s right&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;+Z is up&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Some components use rotated coordinate systems to align with the mounted sensors.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Development&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The Excahauler is an ongoing project aimed at advancing autonomous mining technologies. The robot&#039;s design and functionality continue to be refined based on testing and research. Its design is a major influence toward [[L.A.M.P: Lunar, Autonomous, Modular Platform|LAMP]] candidate designs.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Further Information&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;For more details on the robot&#039;s design and development, visit the project&#039;s [https://github.com/auroraroboticslab/excahauler GitHub page].&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For questions or suggestions, please contact lawlor@alaska.edu.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;Note: Unless specified otherwise, the source code files are released to the public domain.&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;&lt;/div&gt;</summary>
		<author><name>Acmattson3</name></author>
	</entry>
	<entry>
		<id>https://aurorarobotics.sssn.us/index.php?title=Excahauler&amp;diff=787</id>
		<title>Excahauler</title>
		<link rel="alternate" type="text/html" href="https://aurorarobotics.sssn.us/index.php?title=Excahauler&amp;diff=787"/>
		<updated>2025-07-04T21:31:09Z</updated>

		<summary type="html">&lt;p&gt;Acmattson3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;Excahauler Mining Robot&amp;lt;/h1&amp;gt;&lt;br /&gt;
[[File:Team-with-excahauler.jpg|alt=The Aurora Robotics Team alongside the Excahauler robot at UAF&#039;s 2024 Party in the Park.|thumb|The Aurora Robotics Team alongside the Excahauler robot at UAF&#039;s 2024 Party in the Park.]]&lt;br /&gt;
&amp;lt;p&amp;gt;The &amp;lt;strong&amp;gt;Excahauler&amp;lt;/strong&amp;gt; is an autonomous mining robot built for [[Project Archives|NASA&#039;s Break the Ice Challenge]] using a combination of welded steel and 3D printed parts. Designed to handle excavation and mining tasks in challenging environments, featuring robust construction and adaptable components. [https://www.youtube.com/watch?v=pq0jfVteUY0&amp;amp;ab_channel=OrionLawlor Here is a YouTube video] of Excahauler in action mining a block of concrete.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Robot Components&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Frame&amp;lt;/h3&amp;gt;&lt;br /&gt;
[[File:Excahauler sideview.png|alt=A sideview of the Excahauler robot.|thumb|A sideview of the Excahauler robot.]]&lt;br /&gt;
&amp;lt;p&amp;gt;The base of the robot consists of a welded steel frame made from 1-inch (25mm) steel box tubing. The front wheels attach directly to the frame for stability, while the middle and rear wheels are mounted on a rocker system to adapt to uneven terrain. The electronics box, front fork, and arm boom are also bolted directly onto the frame.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Robot Arm&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The robot arm has two main links:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Boom:&amp;lt;/strong&amp;gt; Connects to the frame, providing front-to-back motion. It is aligned with an inertial measurement unit mounted on an angled bar.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Stick:&amp;lt;/strong&amp;gt; The stick, following excavator naming conventions, has an Intel RealSense D455 depth camera mounted on top and a small electronics box for motor controllers.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Tool Coupler&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The tool coupler allows for quick tool changes using a two-pin system similar to an excavator&#039;s quick-change setup. It includes a locking mechanism to secure tools in place, allowing the robot to switch between different excavation tools efficiently.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Excavation Tools&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The robot can use various excavation tools, with the primary tool being a rock grinder. This tool spins a drum to mill material directly into the front scoop. The large ammo can on the robot houses the batteries, motor controller, and space for cooling oil.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Front Scoop&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The front scoop has a volume of 50 liters, allowing it to carry a payload of approximately 50 kg of broken-up material. It features a fork linear actuator for raising and lowering relative to the frame and a dump actuator for tilting the scoop to unload material.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Coordinate System&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The robot follows a right-handed coordinate system:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;+Y is forward&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;+X is to the robot&#039;s right&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;+Z is up&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Some components use rotated coordinate systems to align with the mounted sensors.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Development&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The Excahauler is an ongoing project aimed at advancing autonomous mining technologies. The robot&#039;s design and functionality continue to be refined based on testing and research.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Further Information&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;For more details on the robot&#039;s design and development, visit the project&#039;s [https://github.com/auroraroboticslab/excahauler GitHub page].&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For questions or suggestions, please contact lawlor@alaska.edu.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;Note: Unless specified otherwise, the source code files are released to the public domain.&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;&lt;/div&gt;</summary>
		<author><name>Acmattson3</name></author>
	</entry>
	<entry>
		<id>https://aurorarobotics.sssn.us/index.php?title=Project_Archives&amp;diff=786</id>
		<title>Project Archives</title>
		<link rel="alternate" type="text/html" href="https://aurorarobotics.sssn.us/index.php?title=Project_Archives&amp;diff=786"/>
		<updated>2025-07-04T21:31:03Z</updated>

		<summary type="html">&lt;p&gt;Acmattson3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;Project Archives&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2024-2025: [[NASA X-Hab 2025: Modular Robotic Construction]] ==&lt;br /&gt;
A modular robotic construction project for NASA&#039;s [https://www.nasa.gov/exploration-habitat-x-hab-challenge/ eXploration Habitat (X-Hab) Academic Innovation Challenge] where we worked with NASA experts to design a hangar-like structure built from modular &amp;quot;L-Truss&amp;quot; segments. We successfully load tested a scale version and completed to-scale partial robotic assembly.&amp;lt;h2&amp;gt;2021-2023: [https://breaktheicechallenge.com/ NASA Break The Ice Lunar Permafrost Mining Challenge], Phases 1 and 2&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Phase 1 ===&lt;br /&gt;
&amp;lt;p&amp;gt;Designed a robot to mine lunar permafrost from permanently shadowed craters and haul water to a habitat. Won a $25,000 prize for the Phase 1 proposal, funding subsequent development. [https://www.uaf.edu/news/uaf-team-wins-25000-dollar-prize-in-nasa-challenge.php UAF Team Wins Prize]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Phase 2 ===&lt;br /&gt;
Developed a 60 kg mining robot ([[Excahauler]]) capable of excavating and transporting over 250 kg of lunar permafrost simulant. This robot was tested during a 15-day durability demonstration ([https://www.youtube.com/watch?v=pq0jfVteUY0&amp;amp;ab_channel=OrionLawlor footage of our test]). Currently focusing on automating the prototype for robust lunar mining operations.&amp;lt;h2&amp;gt;2019: Caterpillar Robotic Mining Competition&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Constructed a robot to excavate &amp;quot;icy regolith&amp;quot; beneath 30 cm of packed dust. Awarded the &amp;quot;Lightest Robot&amp;quot; despite using a steel frame, thanks to careful finite element analysis. Gained experience with TIG welding for both the frame and mining buckets. [https://auroraroboticslab.com/ More details]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;2016: NASA Robotic Mining Competition&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Developed a new approach for lightweight, 3D-printed tracks used to excavate fluffy basalt dust lunar regolith simulant. The polypropylene straps were lightweight, impact-resistant, and durable. [https://ntrs.nasa.gov/api/citations/20170003829/downloads/20170003829.pdf NASA Robotic Mining Competition]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;2014: NASA Robotic Mining Competition&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Designed a robot for excavating a thin layer of lunar regolith simulant. Won the &amp;quot;Judges&#039; Innovation Award&amp;quot; for an unfolding wheel design and a computer vision-based localization approach. Invited to the PISCES robotics competition in Hawaii. [https://spacegrant.org/ NASA Space Grant]&amp;lt;/p&amp;gt;&lt;/div&gt;</summary>
		<author><name>Acmattson3</name></author>
	</entry>
	<entry>
		<id>https://aurorarobotics.sssn.us/index.php?title=LAYLA_Robot_Charger&amp;diff=785</id>
		<title>LAYLA Robot Charger</title>
		<link rel="alternate" type="text/html" href="https://aurorarobotics.sssn.us/index.php?title=LAYLA_Robot_Charger&amp;diff=785"/>
		<updated>2025-07-04T21:27:19Z</updated>

		<summary type="html">&lt;p&gt;Acmattson3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;Early-stage robotic charging system developed by the Aurora Robotics Lab (UAF).&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Overview&amp;lt;/h2&amp;gt;&lt;br /&gt;
[[File:Layla.png|alt=Image of a LAYLA charger box.|thumb|Image of a LAYLA charger box. Built from an ammo can and housing a PC power supply repurposed for robot recharging.]]&lt;br /&gt;
&amp;lt;p&amp;gt;The &amp;lt;strong&amp;gt;LAYLA Charger&amp;lt;/strong&amp;gt; was a university-developed proof‑of‑concept autonomous charging system for mobile robots. Designed between 2014–2020, its goal was to enable unattended docking and charging via a magnetic, self-aligning interface in field environments.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Technical Concept&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Docking Interface:&amp;lt;/strong&amp;gt; Magnetic, nickel-covered “drive‑up” connectors that guided robots into position for charging without human assistance.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Dust Tolerance:&amp;lt;/strong&amp;gt; Designed to operate in outdoor and dusty conditions, including lunar and Martian dust simulant.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Autonomous Alignment:&amp;lt;/strong&amp;gt; Initially passive alignment with optional sensor integration for improved reliability.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Cycle Durability:&amp;lt;/strong&amp;gt; Engineering goal of supporting multiple docking cycles with stable power connection.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Development History&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Initiated within [[Main Page|Aurora Robotics Lab]] under [https://www.cs.uaf.edu/~olawlor/ Dr. Orion Lawlor].&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Prototyped for road-testing with field robots (e.g. [[Project Archives|Break the Ice]] and [[NASA X-Hab 2026: Autonomous Rover Charging for Planetary Surfaces|X-Hab]] platforms).&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Used in multi-year internal tests (2014–2020), warranting inclusion in subsequent [[NASA X-Hab 2026: Autonomous Rover Charging for Planetary Surfaces|X-Hab]] proposals.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Legacy and Impact&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Served as conceptual foundation for the autonomous rover charger in the [[NASA X-Hab 2026: Autonomous Rover Charging for Planetary Surfaces|NASA X-Hab 2026]] proposal.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Informed design of magnetic and metal-to-metal alignment features later used in [[Excahauler]] attachments.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Highlighted the engineering challenges of environmental sealing, connector wear, and autonomous precision.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Current Status&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The system did not advance to full deployment but remains part of academic documentation and guided later project directions.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Suggested Further Reading&amp;lt;/h2&amp;gt;&lt;br /&gt;
* [[Excahauler]] and [[NASA X-Hab 2025: Modular Robotic Construction|L-Truss robotic structures in later X-Hab 2025 project documentation]]&lt;/div&gt;</summary>
		<author><name>Acmattson3</name></author>
	</entry>
	<entry>
		<id>https://aurorarobotics.sssn.us/index.php?title=Project_Archives&amp;diff=784</id>
		<title>Project Archives</title>
		<link rel="alternate" type="text/html" href="https://aurorarobotics.sssn.us/index.php?title=Project_Archives&amp;diff=784"/>
		<updated>2025-07-04T20:48:08Z</updated>

		<summary type="html">&lt;p&gt;Acmattson3: Consolidated Break The Ice Challenge entries.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;Project Archives&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2024-2025: [[NASA X-Hab 2025: Modular Robotic Construction]] ==&lt;br /&gt;
A modular robotic construction project for NASA&#039;s [https://www.nasa.gov/exploration-habitat-x-hab-challenge/ eXploration Habitat (X-Hab) Academic Innovation Challenge] where we worked with NASA experts to design a hangar-like structure built from modular &amp;quot;L-Truss&amp;quot; segments. We successfully load tested a scale version and completed to-scale partial robotic assembly.&amp;lt;h2&amp;gt;2021-2023: NASA Break The Ice Lunar Permafrost Mining Challenge, Phases 1 and 2&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Phase 1 ===&lt;br /&gt;
&amp;lt;p&amp;gt;Designed a robot to mine lunar permafrost from permanently shadowed craters and haul water to a habitat. Won a $25,000 prize for the Phase 1 proposal, funding subsequent development. [https://www.uaf.edu/news/uaf-team-wins-25000-dollar-prize-in-nasa-challenge.php UAF Team Wins Prize]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Phase 2 ===&lt;br /&gt;
Developed a 60 kg mining robot ([[Excahauler]]) capable of excavating and transporting over 250 kg of lunar permafrost simulant. This robot was tested during a 15-day durability demonstration ([https://www.youtube.com/watch?v=pq0jfVteUY0&amp;amp;ab_channel=OrionLawlor footage of our test]). Currently focusing on automating the prototype for robust lunar mining operations. [https://breaktheicechallenge.com/ NASA Break The Ice Challenge]&amp;lt;h2&amp;gt;2019: Caterpillar Robotic Mining Competition&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Constructed a robot to excavate &amp;quot;icy regolith&amp;quot; beneath 30 cm of packed dust. Awarded the &amp;quot;Lightest Robot&amp;quot; despite using a steel frame, thanks to careful finite element analysis. Gained experience with TIG welding for both the frame and mining buckets. [https://auroraroboticslab.com/ More details]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;2016: NASA Robotic Mining Competition&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Developed a new approach for lightweight, 3D-printed tracks used to excavate fluffy basalt dust lunar regolith simulant. The polypropylene straps were lightweight, impact-resistant, and durable. [https://ntrs.nasa.gov/api/citations/20170003829/downloads/20170003829.pdf NASA Robotic Mining Competition]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;2014: NASA Robotic Mining Competition&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Designed a robot for excavating a thin layer of lunar regolith simulant. Won the &amp;quot;Judges&#039; Innovation Award&amp;quot; for an unfolding wheel design and a computer vision-based localization approach. Invited to the PISCES robotics competition in Hawaii. [https://spacegrant.org/ NASA Space Grant]&amp;lt;/p&amp;gt;&lt;/div&gt;</summary>
		<author><name>Acmattson3</name></author>
	</entry>
	<entry>
		<id>https://aurorarobotics.sssn.us/index.php?title=Project_Archives&amp;diff=783</id>
		<title>Project Archives</title>
		<link rel="alternate" type="text/html" href="https://aurorarobotics.sssn.us/index.php?title=Project_Archives&amp;diff=783"/>
		<updated>2025-07-04T20:46:33Z</updated>

		<summary type="html">&lt;p&gt;Acmattson3: Added X-Hab 2025. Removed Ongoing Projects.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;Project Archives&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2024: [[NASA X-Hab 2025: Modular Robotic Construction]] ==&lt;br /&gt;
A modular robotic construction project for NASA&#039;s [https://www.nasa.gov/exploration-habitat-x-hab-challenge/ eXploration Habitat (X-Hab) Academic Innovation Challenge] where we worked with NASA experts to design a hangar-like structure built from modular &amp;quot;L-Truss&amp;quot; segments. We successfully load tested a scale version and completed to-scale partial robotic assembly.&amp;lt;h2&amp;gt;2023: NASA Break The Ice Lunar Permafrost Mining Challenge, Phase 2&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Developed a 60 kg mining robot ([[Excahauler]]) capable of excavating and transporting over 250 kg of lunar permafrost simulant. This robot was tested during a 15-day durability demonstration ([https://www.youtube.com/watch?v=pq0jfVteUY0&amp;amp;ab_channel=OrionLawlor footage of our test]). Currently focusing on automating the prototype for robust lunar mining operations. [https://breaktheicechallenge.com/ NASA Break The Ice Challenge]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;2021: NASA Break The Ice Lunar Permafrost Mining Challenge, Phase 1&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Designed a robot to mine lunar permafrost from permanently shadowed craters and haul water to a habitat. Won a $25,000 prize for the Phase 1 proposal, funding subsequent development. [https://www.uaf.edu/news/uaf-team-wins-25000-dollar-prize-in-nasa-challenge.php UAF Team Wins Prize]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;2019: Caterpillar Robotic Mining Competition&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Constructed a robot to excavate &amp;quot;icy regolith&amp;quot; beneath 30 cm of packed dust. Awarded the &amp;quot;Lightest Robot&amp;quot; despite using a steel frame, thanks to careful finite element analysis. Gained experience with TIG welding for both the frame and mining buckets. [https://auroraroboticslab.com/ More details]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;2016: NASA Robotic Mining Competition&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Developed a new approach for lightweight, 3D-printed tracks used to excavate fluffy basalt dust lunar regolith simulant. The polypropylene straps were lightweight, impact-resistant, and durable. [https://ntrs.nasa.gov/api/citations/20170003829/downloads/20170003829.pdf NASA Robotic Mining Competition]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;2014: NASA Robotic Mining Competition&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Designed a robot for excavating a thin layer of lunar regolith simulant. Won the &amp;quot;Judges&#039; Innovation Award&amp;quot; for an unfolding wheel design and a computer vision-based localization approach. Invited to the PISCES robotics competition in Hawaii. [https://spacegrant.org/ NASA Space Grant]&amp;lt;/p&amp;gt;&lt;/div&gt;</summary>
		<author><name>Acmattson3</name></author>
	</entry>
	<entry>
		<id>https://aurorarobotics.sssn.us/index.php?title=Main_Page&amp;diff=782</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://aurorarobotics.sssn.us/index.php?title=Main_Page&amp;diff=782"/>
		<updated>2025-07-04T20:43:13Z</updated>

		<summary type="html">&lt;p&gt;Acmattson3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Original Aurora Robotics Lab Logo.png|alt=The original Aurora Robotics Lab logo, made in Paint.|thumb|The original Aurora Robotics Lab logo, made in Inkscape.]]&lt;br /&gt;
&lt;br /&gt;
== Welcome to the Aurora Robotics Wiki ==&lt;br /&gt;
Welcome to the official wiki for &#039;&#039;&#039;Aurora Robotics&#039;&#039;&#039; at the University of Alaska Fairbanks! Our team focuses on the research, design, and development of autonomous robotics platforms (like [[L.A.M.P: Lunar, Autonomous, Modular Platform|LAMP]]) for extreme environments, particularly the Moon.&lt;br /&gt;
&lt;br /&gt;
=== About Us ===&lt;br /&gt;
The Aurora Robotics Team is a multidisciplinary group of students and faculty working on various projects aimed at advancing robotics technology for lunar operations. Our team collaborates with NASA and other partners through challenges and grants to explore solutions for challenges in lunar mining, habitat construction, and autonomous navigation.&lt;br /&gt;
&lt;br /&gt;
=== Current Projects ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[[L.A.M.P: Lunar, Autonomous, Modular Platform|LAMP (Lunar, Autonomous, Modular, Platform)]]&#039;&#039;&#039;: A highly modular robotic platform designed to serve as the hands of the [[LUMIN]] control system. [[L.A.M.P: Lunar, Autonomous, Modular Platform|LAMP]] is being developed to be capable of executing a wide range of tasks on the lunar surface.&lt;br /&gt;
* &#039;&#039;&#039;[[LUMIN|LUMIN (LUnar Mining and Infrastructure Network)]]&#039;&#039;&#039;: The overarching control software for all lunar operations. [[LUMIN]] acts as the central command system, using [[L.A.M.P: Lunar, Autonomous, Modular Platform|LAMP]] robots to create a functional operational network and managing tasks ranging from autonomous construction to resource distribution.&lt;br /&gt;
* &#039;&#039;&#039;[[LUMINSim]]&#039;&#039;&#039;: A lunar robotic simulator for [[LUMIN]] built in [https://godotengine.org/releases/4.4/ Godot 4.4] used to develop [[LUMIN]] software and test [[L.A.M.P: Lunar, Autonomous, Modular Platform|LAMP]] robot designs.&lt;br /&gt;
&lt;br /&gt;
=== Previous Projects ===&lt;br /&gt;
Check out [[Project_Archives|the project archives page]] to see previous projects Aurora Robotics has done.&lt;br /&gt;
&lt;br /&gt;
=== Our Mission ===&lt;br /&gt;
Our mission is to develop largely open-source robotics solutions that address lunar challenges. By building autonomous systems and control networks ([[L.A.M.P: Lunar, Autonomous, Modular Platform|LAMP]] and [[LUMIN]]), we aim to contribute to the advancement of human presence on the Moon and beyond, and even in remote places here on Earth. &lt;br /&gt;
&lt;br /&gt;
==== Long Term, our vision is: ====&lt;br /&gt;
&lt;br /&gt;
# Drop off a few [[L.A.M.P: Lunar, Autonomous, Modular Platform|LAMP]] robots and some equipment in a remote location (on Earth, the Moon, or beyond).&lt;br /&gt;
# Autonomously (through [[LUMIN]]) explore and begin developing basic infrastructure (cleared paths, basic equipment/structure setup).&lt;br /&gt;
# Begin mining, refining, and preparing resources for expansion.&lt;br /&gt;
# Build human-ready structures from the ground up.&lt;br /&gt;
&lt;br /&gt;
Due to the simplicity and modularity of [[L.A.M.P: Lunar, Autonomous, Modular Platform|LAMP]], our vision includes a point where a couple LAMP robots, with assisting equipment, can develop more LAMP robots, equipment, and infrastructure autonomously, potentially allowing us to remotely colonize entire planets, then their moons, then their star systems and beyond, just by sending a couple robots that way. Then, the LUMIN system can coordinate sending resources back to Earth or inhabited planets (from hard-to-inhabit locations), or humans can move right in (to more habitable locations). &lt;br /&gt;
&lt;br /&gt;
=== Get Involved ===&lt;br /&gt;
We welcome students from all backgrounds to join the Aurora Robotics Team. Regardless of your experience in robotics, programming, mechanical design, if you have an interest in anything you see here, we can find a place for you on our team. Reach out to learn more about how you can get involved in our projects!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See more at [https://auroraroboticslab.com auroraroboticslab.com]&lt;/div&gt;</summary>
		<author><name>Acmattson3</name></author>
	</entry>
	<entry>
		<id>https://aurorarobotics.sssn.us/index.php?title=User:Acmattson3&amp;diff=781</id>
		<title>User:Acmattson3</title>
		<link rel="alternate" type="text/html" href="https://aurorarobotics.sssn.us/index.php?title=User:Acmattson3&amp;diff=781"/>
		<updated>2025-07-03T22:35:00Z</updated>

		<summary type="html">&lt;p&gt;Acmattson3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== About Me ==&lt;br /&gt;
[[File:Andrew Mattson Portrait Wedding.png|alt=a silly boi at his wedding|thumb|A photo of me at my wedding]]&lt;br /&gt;
Welcome to my user page! My name is Andrew Mattson. I am a student at the [https://www.uaf.edu/uaf/ University of Alaska Fairbanks (UAF)] pursuing a combined Bachelor&#039;s/Master&#039;s degree in Computer Science. &lt;br /&gt;
&lt;br /&gt;
Before continuing here, you can find a whole lot more about me on [https://andrew-mattson.com/ my website]. Below is the information most relevant to Aurora Robotics.&lt;br /&gt;
&lt;br /&gt;
== Academic and Professional Background ==&lt;br /&gt;
At UAF, I lead the Aurora Robotics Team while taking classes full-time.&lt;br /&gt;
&lt;br /&gt;
=== Current Projects ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[[LUMINSim]] (my master&#039;s thesis):&#039;&#039;&#039; I am working on developing a robotic simulator for lunar mining and infrastructure, named &#039;LUMINSim&#039; (Lunar Mining and Infrastructure Network Simulator), built to simulate the [[LUMIN]] system. This project is integral to my master&#039;s thesis, and involves aspects of autonomous control, communication, and terrain generation using [https://godotengine.org/ Godot 4.4] and C++. &lt;br /&gt;
* I am the administrator of this MediaWiki page!&lt;br /&gt;
&lt;br /&gt;
=== Past Projects ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[[X-Hab_2025_NASA_Proposal|NASA X-HAB 2025]]:&#039;&#039;&#039; I led the Aurora Robotics Team at UAF in [https://www.nasa.gov/exploration-habitat-x-hab-challenge/ NASA&#039;s X-Hab Academic Innovation Challenge] for 2024-2025.&lt;br /&gt;
* &#039;&#039;&#039;[[Project Archives|NASA BreakTheIce Challenge]]:&#039;&#039;&#039; I contributed some anti-collision logic to the [https://github.com/auroraRoboticsLab/MiningRobot LUNATIC] control stack for the [[Excahauler]] robot.&lt;br /&gt;
&lt;br /&gt;
== Contact ==&lt;br /&gt;
[https://forms.gle/DCzoyNzndu2YePp28 Here is my contact form] that emails me when a response is submitted; feel free to reach out!&lt;/div&gt;</summary>
		<author><name>Acmattson3</name></author>
	</entry>
	<entry>
		<id>https://aurorarobotics.sssn.us/index.php?title=LUMIN&amp;diff=780</id>
		<title>LUMIN</title>
		<link rel="alternate" type="text/html" href="https://aurorarobotics.sssn.us/index.php?title=LUMIN&amp;diff=780"/>
		<updated>2025-07-03T22:26:01Z</updated>

		<summary type="html">&lt;p&gt;Acmattson3: Fixed header.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;LUMIN (LUnar Mining and Infrastructure Network)&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;LUMIN&amp;lt;/strong&amp;gt; is a theoretical overarching control software designed to manage and coordinate robotic lunar operations. It acts as the central hub for autonomous and teleoperated systems, coordinating safe and efficient construction, mining, and transport across the lunar surface.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Overview&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The LUMIN control system works with various robotic platforms, including the [[L.A.M.P: Lunar, Autonomous, Modular Platform|Lunar, Autonomous, Modular Platform (LAMP)]] and [[Excahauler]]. The goal of LUMIN is flexibility, which is necessary for the incorporation of new tools, modules, and tasks as lunar infrastructure grows, especially in a multi-organizational context.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;[[LUMINSim]] is an open-source simulation of the LUMIN system, though many proposed LUMIN features are still in the process of development.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== [[User:Acmattson3|Andrew Mattson&#039;s]] Thesis ==&lt;br /&gt;
LUMIN, developed in [[LUMINSim]], will be the core of [[User:Acmattson3|Andrew Mattson&#039;s]] master&#039;s thesis for the Summer 2025, Fall 2025, and Spring 2026 semesters at the [https://www.uaf.edu/uaf/ University of Alaska Fairbanks]. As of July 7th, 2025, Andrew&#039;s thesis is titled &#039;&#039;&#039;&#039;&#039;Multi-Organizational Robot Coordination and Communication via Realistic Lunar Surface Simulation&#039;&#039;&#039;,&#039;&#039; and he will attempt to answer the question: &#039;&#039;Can autonomous robotic systems effectively coordinate tasks, maintain communication, and manage operational safety zones using [https://www.nasa.gov/humans-in-space/lunanet-empowering-artemis-with-communications-and-navigation-interoperability/ LunaNet] on the lunar surface when operating under constraints such as limited line-of-sight (LOS), signal degradation, and delays, while in a multi-organizational context?&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
His project aims to:&lt;br /&gt;
&lt;br /&gt;
* Extend the [[LUMINSim|GodotRobot (LUMINSim) Lunar Mining Simulator]] to simulate realistic communication challenges including LOS, signal degradation, and delayed transmission.&lt;br /&gt;
* Evaluate the effectiveness of [https://www.nasa.gov/humans-in-space/lunanet-empowering-artemis-with-communications-and-navigation-interoperability/ LunaNet] and determine how it compares against traditional mesh networking models.&lt;br /&gt;
* Implement dynamic safety zones to test [https://www.nasa.gov/artemis-accords/ Artemis Accords]-inspired coordination constraints.&lt;br /&gt;
* Perform incremental testing, scaling from basic two-node scenarios to complex multi-robot networks involving satellites, towers, and robots.&lt;br /&gt;
&lt;br /&gt;
== Core Functions ==&lt;br /&gt;
&amp;lt;p&amp;gt;LUMIN&#039;s primary functions will include:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Coordination:&amp;lt;/strong&amp;gt; Managing operations across the lunar surface, including but not limited to robotic platforms like [[L.A.M.P: Lunar, Autonomous, Modular Platform|LAMP]] and [[Excahauler]], to carry out construction, mining, transport, resource distribution, and maintenance tasks safely and efficiently in accordance with the [https://www.nasa.gov/artemis-accords/ Artemis Accords].&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Data Collection and Analysis:&amp;lt;/strong&amp;gt; Gathering information while working on the lunar environment to improve decision-making and research.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Communication:&amp;lt;/strong&amp;gt; Providing a reliable communication network ([https://www.nasa.gov/humans-in-space/lunanet-empowering-artemis-with-communications-and-navigation-interoperability/ LunaNet]) for all lunar operations.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Future Developments&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;As lunar operations expand, LUMIN&#039;s feature set will continue to grow, especially as [[User:Acmattson3|Andrew Mattson]] completes his master&#039;s thesis.&amp;lt;/p&amp;gt;&lt;/div&gt;</summary>
		<author><name>Acmattson3</name></author>
	</entry>
	<entry>
		<id>https://aurorarobotics.sssn.us/index.php?title=LUMINSim&amp;diff=779</id>
		<title>LUMINSim</title>
		<link rel="alternate" type="text/html" href="https://aurorarobotics.sssn.us/index.php?title=LUMINSim&amp;diff=779"/>
		<updated>2025-07-03T21:36:15Z</updated>

		<summary type="html">&lt;p&gt;Acmattson3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;LUMINSim (AKA GodotRobot)&amp;lt;/h1&amp;gt;&lt;br /&gt;
[[File:Astronaut Cinematic.png|alt=The LUMINSim astronaut standing on the edge of Shackleton crater.|thumb|The LUMINSim astronaut standing on the edge of Shackleton crater.]]&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;LUMINSim&amp;lt;/strong&amp;gt; (Lunar Mining and Infrastructure Network Simulator) is an [https://github.com/auroraroboticslab/godotrobot/ open source] lunar robotic simulator developed by Aurora Robotics using [https://godotengine.org/ Godot 4.4]. It serves as a tool for testing and refining robots and their operations in a simulated lunar environment, directly supporting the overarching &amp;lt;strong&amp;gt;[[LUMIN]]&amp;lt;/strong&amp;gt; control system. The simulation focuses on the challenges of mining, construction, and other infrastructure tasks essential for future lunar exploration.&amp;lt;/p&amp;gt;&lt;br /&gt;
[[File:Astra Digging.png|alt=The Astra robot digging in LUMINSim.|thumb|The Astra robot digging in LUMINSim.]]&lt;br /&gt;
&amp;lt;h2&amp;gt;Overview&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;LUMINSim aims to be a detailed simulation environment for lunar mining operations. As part of the broader [[LUMIN]] system, it allows the team to model various robotic designs, navigation algorithms, and task execution methods under realistic lunar conditions. The simulator currently features the &amp;lt;strong&amp;gt;[[LAMP v1|Astra]]&amp;lt;/strong&amp;gt; robot, the first prototype designed for lunar construction and mining.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The insights gained from LUMINSim&#039;s testing of Astra led to the development of a new, more versatile robot called &amp;lt;strong&amp;gt;[[LAMP]] (Lunar, Autonomous, Modular, Platform)&amp;lt;/strong&amp;gt;. Astra’s limitations and inadequacies identified in LUMINSim directly informed the modular design philosophy of LAMP, highlighting the simulator&#039;s crucial role in advancing lunar robotic platforms.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Features&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Key features of LUMINSim include:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Terrain Simulation:&amp;lt;/strong&amp;gt; Realistic lunar terrain with adjustable parameters. The terrain colliders match the mesh, providing an accurate physical environment for robotic interactions. Terrain texture and lighting are enhanced for greater visual fidelity and accuracy.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Autonomous Robot Control:&amp;lt;/strong&amp;gt; Users can control mining robots, including the Astra prototype, in both autonomous and manual modes. Features include an in-game console for issuing commands, camera controls, and freecam mode for navigation and inspection.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Robot Design Testing:&amp;lt;/strong&amp;gt; One of LUMINSim&#039;s primary purposes is to test and validate new robotic designs. Astra, the current robot in the simulator, serves as a learning tool that guided the development of LAMP by exposing design flaws and providing insight into necessary features for lunar operations.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Multi-Platform Support:&amp;lt;/strong&amp;gt; Supports multiple platforms, including desktop and Android, providing a versatile simulation environment for different users and use cases.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Immersive Astronaut Simulation:&amp;lt;/strong&amp;gt; Allows users to control an astronaut avatar within the simulation.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Modular Design:&amp;lt;/strong&amp;gt; The modular approach supports the addition of new features, robots, terrains, and missions, aligning with LAMP&#039;s design philosophy and the adaptive nature of the LUMIN control system.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Console Commands and UI Controls:&amp;lt;/strong&amp;gt; Includes various user commands and UI elements, such as speed readouts and simulation rate adjustments to enhance the simulation experience.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Current Status and Development&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;LUMINSim is currently in its alpha stage, with ongoing development aimed at refining robot behavior, terrain interactions, and autonomous capabilities. The latest updates focus on improving terrain generation, enhancing the control of the Astra robot, and introducing new elements such as mountable lights, speed controls, and navigation systems.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Although Astra is the only robot currently in the simulator, its design serves as a foundation for the ongoing development of LAMP. LUMINSim continues to be an essential testbed for validating new designs and technologies before their implementation in actual lunar operations.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Related Projects&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;[[LAMP]] (Lunar, Autonomous, Modular, Platform) - The next-generation robot designed based on the lessons learned from testing Astra in LUMINSim.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;[[LUMIN]] (Lunar Mining and Infrastructure Network) - The overarching control software that manages various lunar operations, using LUMINSim as its primary simulation environment for testing and development.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;How to Get Involved&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The Aurora Robotics Team welcomes collaboration with students and researchers interested in lunar robotics, simulation, and autonomous systems. For more details on LUMINSim or to contribute to its development, please visit our [https://github.com/auroraroboticslab/godotrobot/ GitHub repository].&amp;lt;/p&amp;gt;&lt;/div&gt;</summary>
		<author><name>Acmattson3</name></author>
	</entry>
	<entry>
		<id>https://aurorarobotics.sssn.us/index.php?title=LUMINSim&amp;diff=778</id>
		<title>LUMINSim</title>
		<link rel="alternate" type="text/html" href="https://aurorarobotics.sssn.us/index.php?title=LUMINSim&amp;diff=778"/>
		<updated>2025-07-03T20:43:34Z</updated>

		<summary type="html">&lt;p&gt;Acmattson3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;LUMINSim&amp;lt;/h1&amp;gt;&lt;br /&gt;
[[File:Astronaut Cinematic.png|alt=The LUMINSim astronaut standing on the edge of Shackleton crater.|thumb|The LUMINSim astronaut standing on the edge of Shackleton crater.]]&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;LUMINSim&amp;lt;/strong&amp;gt; (Lunar Mining and Infrastructure Network Simulator) is an [https://github.com/auroraroboticslab/godotrobot/ open source] lunar robotic simulator developed by Aurora Robotics using [https://godotengine.org/ Godot 4.4]. It serves as a tool for testing and refining robots and their operations in a simulated lunar environment, directly supporting the overarching &amp;lt;strong&amp;gt;[[LUMIN]]&amp;lt;/strong&amp;gt; control system. The simulation focuses on the challenges of mining, construction, and other infrastructure tasks essential for future lunar exploration.&amp;lt;/p&amp;gt;&lt;br /&gt;
[[File:Astra Digging.png|alt=The Astra robot digging in LUMINSim.|thumb|The Astra robot digging in LUMINSim.]]&lt;br /&gt;
&amp;lt;h2&amp;gt;Overview&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;LUMINSim aims to be a detailed simulation environment for lunar mining operations. As part of the broader [[LUMIN]] system, it allows the team to model various robotic designs, navigation algorithms, and task execution methods under realistic lunar conditions. The simulator currently features the &amp;lt;strong&amp;gt;[[LAMP v1|Astra]]&amp;lt;/strong&amp;gt; robot, the first prototype designed for lunar construction and mining.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The insights gained from LUMINSim&#039;s testing of Astra led to the development of a new, more versatile robot called &amp;lt;strong&amp;gt;[[LAMP]] (Lunar, Autonomous, Modular, Platform)&amp;lt;/strong&amp;gt;. Astra’s limitations and inadequacies identified in LUMINSim directly informed the modular design philosophy of LAMP, highlighting the simulator&#039;s crucial role in advancing lunar robotic platforms.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Features&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Key features of LUMINSim include:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Terrain Simulation:&amp;lt;/strong&amp;gt; Realistic lunar terrain with adjustable parameters. The terrain colliders match the mesh, providing an accurate physical environment for robotic interactions. Terrain texture and lighting are enhanced for greater visual fidelity and accuracy.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Autonomous Robot Control:&amp;lt;/strong&amp;gt; Users can control mining robots, including the Astra prototype, in both autonomous and manual modes. Features include an in-game console for issuing commands, camera controls, and freecam mode for navigation and inspection.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Robot Design Testing:&amp;lt;/strong&amp;gt; One of LUMINSim&#039;s primary purposes is to test and validate new robotic designs. Astra, the current robot in the simulator, serves as a learning tool that guided the development of LAMP by exposing design flaws and providing insight into necessary features for lunar operations.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Multi-Platform Support:&amp;lt;/strong&amp;gt; Supports multiple platforms, including desktop and Android, providing a versatile simulation environment for different users and use cases.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Immersive Astronaut Simulation:&amp;lt;/strong&amp;gt; Allows users to control an astronaut avatar within the simulation.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Modular Design:&amp;lt;/strong&amp;gt; The modular approach supports the addition of new features, robots, terrains, and missions, aligning with LAMP&#039;s design philosophy and the adaptive nature of the LUMIN control system.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Console Commands and UI Controls:&amp;lt;/strong&amp;gt; Includes various user commands and UI elements, such as speed readouts and simulation rate adjustments to enhance the simulation experience.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Current Status and Development&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;LUMINSim is currently in its alpha stage, with ongoing development aimed at refining robot behavior, terrain interactions, and autonomous capabilities. The latest updates focus on improving terrain generation, enhancing the control of the Astra robot, and introducing new elements such as mountable lights, speed controls, and navigation systems.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Although Astra is the only robot currently in the simulator, its design serves as a foundation for the ongoing development of LAMP. LUMINSim continues to be an essential testbed for validating new designs and technologies before their implementation in actual lunar operations.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Related Projects&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;[[LAMP]] (Lunar, Autonomous, Modular, Platform) - The next-generation robot designed based on the lessons learned from testing Astra in LUMINSim.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;[[LUMIN]] (Lunar Mining and Infrastructure Network) - The overarching control software that manages various lunar operations, using LUMINSim as its primary simulation environment for testing and development.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;How to Get Involved&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The Aurora Robotics Team welcomes collaboration with students and researchers interested in lunar robotics, simulation, and autonomous systems. For more details on LUMINSim or to contribute to its development, please visit our [https://github.com/auroraroboticslab/godotrobot/ GitHub repository].&amp;lt;/p&amp;gt;&lt;/div&gt;</summary>
		<author><name>Acmattson3</name></author>
	</entry>
	<entry>
		<id>https://aurorarobotics.sssn.us/index.php?title=LAMP_v1&amp;diff=777</id>
		<title>LAMP v1</title>
		<link rel="alternate" type="text/html" href="https://aurorarobotics.sssn.us/index.php?title=LAMP_v1&amp;diff=777"/>
		<updated>2025-07-03T20:42:13Z</updated>

		<summary type="html">&lt;p&gt;Acmattson3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;LAMP v1 (Astra)&amp;lt;/h1&amp;gt;&lt;br /&gt;
[[File:Astra Digging.png|alt=Astra in LUMINSim, digging on a hill.|thumb|Astra in LUMINSim, digging on a hill.]]&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;LAMP v1, also known as Astra&amp;lt;/strong&amp;gt;, is the first proposed candidate to become [[L.A.M.P: Lunar, Autonomous, Modular Platform|LAMP (Lunar, Autonomous, Modular, Platform)]]. Astra was developed in [https://www.autodesk.com/products/fusion-360/overview Fusion360] and tested in &amp;lt;strong&amp;gt;[[LUMINSim]]&amp;lt;/strong&amp;gt; to assess its mining, mobility, and transport capabilities on the lunar surface. This testing revealed core flaws requiring near-complete redesign, which (as of July 3rd, 2025) has yet to be completed.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Design Overview&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modular Tool Coupler ===&lt;br /&gt;
&amp;lt;p&amp;gt;Astra features a single arm equipped with a modular tool coupler, allowing it to utilize any tool designed for it. Unlike &amp;lt;strong&amp;gt;[[Excahauler]]&amp;lt;/strong&amp;gt;, Astra does not have a pre-attached bucket, as it&#039;s design prioritizes modularity. Astra&#039;s tool coupler is located on the end of a two-joint arm and has tilt functionality, providing versatility in operating a range of tools.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modular Bed ===&lt;br /&gt;
On Astra&#039;s back is a modular bed coupler. This coupler allows it to carry a large variety of beds, including but not limited to:&lt;br /&gt;
&lt;br /&gt;
* A hopper-style bed (seen in the photo above; for transporting loose material).&lt;br /&gt;
* A flatbed (for general transport of solid objects).&lt;br /&gt;
* A tool bed (for carrying multiple tool types).&lt;br /&gt;
* A communications relay (possibly with an antenna to be lifted by the arm&#039;s tool coupler).&lt;br /&gt;
&lt;br /&gt;
=== Frame ===&lt;br /&gt;
Astra&#039;s frame was designed to be highly modular while also allowing high mobility across lunar terrain, with emphasis on ease of travel and transport.&amp;lt;h2&amp;gt;Design Flaws and Testing&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;During its development and testing in &amp;lt;strong&amp;gt;[[LUMINSim]]&amp;lt;/strong&amp;gt;, several design flaws in Astra were identified:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;The arm&#039;s hinge point on the frame was positioned too far forward, causing the robot to easily tip over, especially during heavy lifting.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;The original built-in hopper design was deemed inefficient. This was replaced with the aforementioned modular bed interface, but was not enough to save the overall design due to the previous issue.&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;The wheelbase generally struggles in lunar agility.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;These insights have guided plans for design improvements in the next [[L.A.M.P: Lunar, Autonomous, Modular Platform|LAMP]] candidate.&amp;lt;h2&amp;gt;Related&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For more information or to contribute to the development of the LAMP project, visit the team&#039;s [https://github.com/AuroraRoboticsLab GitHub page].&amp;lt;/p&amp;gt;&lt;/div&gt;</summary>
		<author><name>Acmattson3</name></author>
	</entry>
	<entry>
		<id>https://aurorarobotics.sssn.us/index.php?title=L.A.M.P:_Lunar,_Autonomous,_Modular_Platform&amp;diff=776</id>
		<title>L.A.M.P: Lunar, Autonomous, Modular Platform</title>
		<link rel="alternate" type="text/html" href="https://aurorarobotics.sssn.us/index.php?title=L.A.M.P:_Lunar,_Autonomous,_Modular_Platform&amp;diff=776"/>
		<updated>2025-07-03T20:22:36Z</updated>

		<summary type="html">&lt;p&gt;Acmattson3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;LAMP is the hands of the [[LUMIN]] control system. It is a highly modular robotic platform designed to enforce safety protocols, develop lunar infrastructure, and generally do what [[LUMIN]] requires. Through coordination with [[LUMIN]], LAMPs in the field will work together to achieve tasks that would be extremely difficult or impossible for a single robot to accomplish.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
LAMP&#039;s modularity will allow it to serve a wide range of needs on the Moon. LAMP robots might: &lt;br /&gt;
&lt;br /&gt;
* Enforce general safety (like patrolling safety zone borders, decommissioning or disabling rogue agents, or developing and maintaining reliable infrastructure)&lt;br /&gt;
* Collect data (for use in research, decision-making processes, and policy refinement)&lt;br /&gt;
* Distribute resources (by hauling tools, materials, or power across the lunar surface)&lt;br /&gt;
* Act as communication relays (before communication infrastructure is in place and during its development, or in especially remote locations)&lt;br /&gt;
&lt;br /&gt;
LAMP&#039;s modularity allows it to complete a large variety of tasks. For example, materials transport may require a flatbed or dump bed, communications infrastructure development may need a specialized toolhead for trenching and a rear payload for spools of wire or tubing.&lt;br /&gt;
&lt;br /&gt;
=== Influential/Previous Designs: ===&lt;br /&gt;
* [[Excahauler]]&lt;br /&gt;
* [[LAMP v1]] (A.K.A. Astra)&lt;br /&gt;
&lt;br /&gt;
== Design Philosophy ==&lt;br /&gt;
&amp;lt;p&amp;gt;LAMP&#039;s design revolves around its versatility for ranges of tasks on the Moon. Specialized tools for LAMP should always be built as attachments that can be easily interchanged to maintain said versatility. Any permanent additions to the main frame should be carefully designed to function across multiple purposes.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To meet the demands of lunar infrastructure, LAMP must maintain simplicity without compromising its abilities in order to: &lt;br /&gt;
&lt;br /&gt;
# Keep manufacturing costs down.&lt;br /&gt;
# Encourage simpler parts, which are ultimately easier to make durable and repair.&lt;br /&gt;
# Encourage extension through the system&#039;s modularity.__FORCETOC__&lt;/div&gt;</summary>
		<author><name>Acmattson3</name></author>
	</entry>
</feed>