Quickstart (10 minutes)
Welcome! In this Quickstart, we’ll guide you through building your first model in Dalus. We’re going to build a model of a satellite with 3 reaction wheels, design a simple attitude control system, and then verify a key performance parameter,settling_time, for that control system.
Whether you’re new to system modeling or just getting started with Dalus, this hands-on example will help you get up to speed quickly and confidently.
Step 1: Create a New Model
Start by creating a new model in the Dalus dashboard. Give your model a descriptive name, such as “Satellite Quickstart”. This model is the isolated, collaborative environment that will contain your system’s requirements, architecture, and analysis all in one place.
Step 2: Define Requirements
Satellites need to respond to new attitude commands from the ground promptly to face the necessary direction for imaging, telemetry, etc.. Let’s add a requirement that specifies the maximum allowable time to complete a commanded attitude maneuver:Requirement: The Attitude Control and Determination Subsystem (ACDS) shall settle to within 0.1 degrees of the commanded attitude within 120 seconds after maneuver initiation.

Step 3: Build the Structure
Now let’s define the basic structure of our satellite. We’ll start by adding the main parts we’ll be focusing on for this quickstart:- Add the Satellite as the root part of your model.
- Double-Click into the Satellite and add these subparts:
- Reaction Wheels (x3): Add three reaction wheel components to represent the 3-axis control system.
- Attitude Control & Determination System (ACDS): Add the Attitude Control and Determination Subsystem as a separate part.
Step 4: Add Part Attributes
Now that we have the foundation, let’s assign some attributes. Attributes are values like “mass” or “moment of inertia” that describe a part’s physical properties and are accessible by any analysis we do. Add the satellite’s mass-moments of inertia as attributes in the Right Sidebar:| Attribute Name | Value | Unit |
|---|---|---|
| l_xx | 10 | kilogram meter squared |
| l_yy | 10 | kilogram meter squared |
| l_zz | 10 | kilogram meter squared |

Step 5: Configure an Action (Analysis)
In this step, we’ll implement the action Point Satellite inside the Satellite part, which takes a commanded attitude and calculates how long it takes (among other things) to reach that attitude from its initial attitude (0,0,0).- First, switch to the Action view in the Dalus interface. This will allow you to create and configure actions for your model, in this case, for the Satellite part.
- Add an action and name it “Point Satellite”.
- Double-click on the action and copy and paste this python code inside, which implements a simple Proportional-Derivative controller in 3 axes:
You’ll notice in the script, on line 23, we’re grabbing some input variables:
a_cmd_x, a_cmd_y, and a_cmd_z. These need to be added to the action via the Right Sidebar.
These are the commanded attitudes we are providing the script:
| Input Variable | Value | Unit |
|---|---|---|
| a_cmd_x | 50 | deg |
| a_cmd_y | 50 | deg |
| a_cmd_z | 50 | deg |
I_xx, I_yy, and I_zz attributes you defined earlier. Copy their IDs from the Attributes dropdown and paste them in the getAttribute function’s argument.
Finally, we need to set the settling_time; this is the key performance parameter we are evaluating. Go back to the Satellite part and add it as an attribute.
| Attribute Name | Value | Unit |
|---|---|---|
| settling_time | 0 | s |
setAttribute("", settling_time) between the "".
- After running the simulation, the script will calculate the
settling_timeand set it for the Satellite’s attribute.
Step 6: Add a Requirement Constraint and Test
Now, let’s return to our requirements and add a constraint to the ACDS settling time requirement:- Go to the requirements view and locate the ACDS settling time requirement.
- Click on its status, then under Add constraint, select the Attributes dropdown.
- Choose
settling_timeand set the limit to< 120 seconds. - You’ll see the requirement status immediately update based on its current value.
Experiment a bit. Increase the moments of inertia (e.g.,
I_xx) in the Satellite’s attributes and re-run the simulation. Try to get the requirement to fail!
Step 7: Create a Simple State Machine
Next, let’s create a simple state machine to trigger our Point Satellite action instead of manually running it.- Switch to the State view.
- Define two states:
STANDBYandSURVEILLING. - Connect them to add a transition between them. Name it anything.
- In the Point Satellite transition, select the Point Satellite action as an effect. This causes the action to execute whenever you transition from Standby to Surveilling.
- Use the states dropdown to first enter
STANDBY. Then, switch to the Action view and transition toSURVEILLINGto observe the effect taking place.
Although simple, this powerful principle can be used to orchestrate many actions for a complex state machine.
Additional state machine features coming soon include:
- transition triggers - boolean expressions that automatically execute the transition if ALL evaluate to true.
- transition guards - boolean expressions that prevent the transition if ANY evaluate to true.
Next Steps
Ready to take your model to the next level? Here are a few ways you can extend and improve your satellite model:-
Parameterize Control Gains & Reaction Wheel Moments:
- Add the proportional (
Kp) and derivative (Kd) gains as attributes to the ACDS subsystem instead of hard-coding them in the Point Satellite script. - Similarly, add the Reaction Wheel moments (
J_rw_x,J_rw_y,J_rw_z) as attributes of the Reaction Wheels . - Update the Point Satellite script to fetch these values using
getAttribute. This is to organize your parameters logically, making them easy to find and tune as your model grows in complexity.
- Add the proportional (
-
Model Command Inputs from Ground Control:
- Add a new part called Ground Control at the same level as the Satellite.
- Connect the parts together to form an interface and add connections for
a_cmd_x,a_cmd_y, anda_cmd_zinstead of assigning them as inputs to the action. - In your script, use
getConnection(passing in the ID) to access these command variables instead ofgetInput.
-
Set and Reset the Satellite’s Current Attitude:
- Add
attitude_x,attitude_y, andattitude_zattributes (0 deg) to the Satellite in the Right Sidebar → Attributes. - Update the Point Satellite script to fetch these values and use them as our initial attitude instead of hard-coding the initial attitude to
(0,0,0)(see line 22). - At the bottom of the Point Satellite script, use
setAttribute(id, value)to write back the finalattitude_x,attitude_y, andattitude_z(degrees). - In the actions view inside Satellite, create an action named “Reset Attitude” that sets the three attitude attributes back to
0. - In the states view inside Satellite, add a Reset Satellite transition from
SURVEILLINGtoSTANDBY, and setSTANDBY’s Entry Action to execute Reset Attitude. - Now, transition the Satellite back and forth between
SURVEILLINGandSTANDBYto see its attitude change.
- Add