Skip to content

Commit d505ed7

Browse files
authored
Merge pull request #22 from space-station-os/ssos_rep
[DEMO X] Space station OS representation (BASIC) and ARS V3 This will be used for SARJ and EPS as well as GNC.
2 parents 7172be2 + 44c794f commit d505ed7

24 files changed

+1433
-589
lines changed

CMakeLists.txt

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,18 @@ find_package(sensor_msgs REQUIRED)
1212
find_package(rosidl_default_generators REQUIRED)
1313
find_package(std_srvs REQUIRED)
1414
find_package(actionlib_msgs REQUIRED)
15+
find_package(visualization_msgs REQUIRED)
16+
1517
# uncomment the following section in order to fill in
1618
# further dependencies manually.
1719
# find_package(<dependency> REQUIRED)
1820

1921
set(msg_files
2022

2123
"src/ars_systems/msg/AirData.msg"
24+
"src/ars_systems/srv/CrewQuarters.srv"
25+
26+
2227
"src/ors_systems/msg/Sabatier.msg"
2328
"src/ors_systems/msg/Water.msg"
2429
"src/ors_systems/msg/Electrolysis.msg"
@@ -31,13 +36,14 @@ set(msg_files
3136
"src/wrs_systems/srv/CleanWater.srv"
3237
"src/wrs_systems/msg/WaterCrew.msg"
3338

34-
39+
# CDRA SAFETY
40+
"src/ars_systems/msg/CdraStatus.msg"
3541

3642
)
3743

3844
rosidl_generate_interfaces(${PROJECT_NAME}
3945
${msg_files}
40-
DEPENDENCIES std_msgs sensor_msgs
46+
DEPENDENCIES std_msgs sensor_msgs visualization_msgs
4147
)
4248

4349

@@ -122,6 +128,15 @@ rosidl_target_interfaces(ultrasound ${PROJECT_NAME} "rosidl_typesupport_cpp")
122128

123129

124130

131+
# CDRA SAFETY
132+
133+
add_executable(system_safety src/system_verification.cpp)
134+
ament_target_dependencies(system_safety std_srvs rosidl_default_generators rclcpp visualization_msgs)
135+
136+
rosidl_target_interfaces(system_safety ${PROJECT_NAME} "rosidl_typesupport_cpp")
137+
138+
139+
125140
install(TARGETS
126141
collector
127142
desiccant
@@ -138,6 +153,9 @@ install(TARGETS
138153
ionizaton
139154
clean_water_tank
140155
ultrasound
156+
157+
158+
system_safety
141159

142160
DESTINATION lib/${PROJECT_NAME})
143161

SSOS_description

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Subproject commit d7913477b0435457cee358eb49392308f0b95c44

config/ars_sys.yaml

Lines changed: 34 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,42 @@
1-
/ars_system:
1+
air_collector_node:
22
ros__parameters:
3-
# Astronaut params
3+
flow_rate: 28.0 # Flow rate in SCFM
4+
co2_intake: 1.04 # CO2 intake in mmHg
45
crew_onboard: 4
5-
co2_intake: 1.04 #mmHG
6-
max_crew_limit: 6
6+
cabin_pressure: 14.7 # Cabin pressure in PSI
7+
temperature_cutoff: 450.0 # Temperature cutoff in Celsius
8+
max_crew_limit: 6
9+
power_consumption: 1.0 # Power in kW
10+
tank_capacity: 1000.0 # Air tank capacity in grams
11+
system_name: "demo_nova_sanctum"
12+
mode_of_operation: "standby"
13+
714

15+
co2_threshold: 500.0
16+
moisture_threshold: 70.0
17+
contaminants_threshold: 30.0
818

9-
#ARSys params
10-
system_name: "ARS"
11-
frame_id: "ars"
12-
mode_of_operation: "standby" #[standby,active,emergency]
13-
adsorbent_type: "13X" #[13X,5A,APG_III,VSA-10]
14-
co2_removal_rate: 4.50 #kg/day
15-
flow_rate: 28 #Standard cubic feet per minute
16-
temperature_cutoff: 450 #Celsius
17-
cabin_pressure: 14.7 #PSI
19+
20+
temp_kp: 0.1
21+
temp_ki: 0.01
22+
temp_kd: 0.005
23+
press_kp: 0.1
24+
press_ki: 0.01
25+
press_kd: 0.005
1826

1927

20-
#power_consumption
21-
power_consumption: 1 #kW
28+
/desiccant_server:
29+
ros__parameters:
30+
moisture_removal_rate: 0.95
31+
contaminant_removal_rate: 0.90
32+
emergency_threshold: 5.0
2233

23-
#Removal efficiency
24-
to_space : 0.50
25-
to_sabatier: 0.50
2634

27-
35+
/adsorbent_bed:
36+
ros__parameters:
37+
co2_removal_efficiency: 0.95
38+
co2_to_space_ratio: 0.40
39+
desired_temperature: 420.0
40+
temperature_tolerance: 30.0
41+
kp: 0.6
42+
kd: 0.15

config/ars_sys_params.yaml

Lines changed: 0 additions & 9 deletions
This file was deleted.

include/demo_nova_sanctum/adsorbent_tank.h

Lines changed: 0 additions & 78 deletions
This file was deleted.

include/demo_nova_sanctum/air_collector_tank.h

Lines changed: 0 additions & 43 deletions
This file was deleted.
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
#ifndef DEMO_NOVA_SANCTUM_ADSORBENT_BED_HPP_
2+
#define DEMO_NOVA_SANCTUM_ADSORBENT_BED_HPP_
3+
4+
#include <rclcpp/rclcpp.hpp>
5+
#include <mutex>
6+
#include "demo_nova_sanctum/msg/air_data.hpp"
7+
#include "demo_nova_sanctum/srv/crew_quarters.hpp"
8+
#include "std_msgs/msg/float64.hpp"
9+
#include "demo_nova_sanctum/msg/cdra_status.hpp"
10+
11+
/**
12+
* @class AdsorbentBed
13+
* @brief ROS 2 node to manage CO₂ adsorption, storage, and desorption.
14+
*
15+
* - **Receives air from the Desiccant Bed** via `/adsorbent_server` service.
16+
* - **Adsorbs and stores CO₂** in a buffer before desorption.
17+
* - **Returns CO₂-free air to the Desiccant Bed** via `/processed_air_service`.
18+
* - **Heats up to 400°F to desorb and vent CO₂** after processing.
19+
* - **Publishes vented CO₂ to `/co2_vent`** topic.
20+
*/
21+
class AdsorbentBed : public rclcpp::Node {
22+
public:
23+
/**
24+
* @brief Constructor initializes the Adsorbent Bed service.
25+
*/
26+
AdsorbentBed();
27+
28+
private:
29+
/**
30+
* @brief Handles incoming air processing requests from the Desiccant Bed.
31+
* - If already processing, it rejects new requests.
32+
* - If available, it starts the CO₂ adsorption process.
33+
*/
34+
void handle_air_processing_request(const std::shared_ptr<demo_nova_sanctum::srv::CrewQuarters::Request> request,
35+
std::shared_ptr<demo_nova_sanctum::srv::CrewQuarters::Response> response);
36+
37+
/**
38+
* @brief Adsorbs CO₂ while regulating temperature.
39+
* - **Uses PID control** to maintain optimal adsorption temperature.
40+
* - **Stores CO₂ in a buffer** instead of immediately venting.
41+
*/
42+
void process_co2();
43+
44+
/**
45+
* @brief Sends CO₂-free air back to the Desiccant Bed.
46+
*/
47+
void send_processed_air();
48+
49+
/**
50+
* @brief Begins CO₂ desorption cycle by heating up.
51+
*/
52+
void start_desorption_cycle();
53+
54+
/**
55+
* @brief Heats up to 400°F and vents CO₂.
56+
*/
57+
void desorb_co2();
58+
59+
/*** CO₂ PROCESSING PARAMETERS ***/
60+
double co2_removal_efficiency_; ///< Efficiency of CO₂ adsorption (default: 90%)
61+
double co2_to_space_ratio_; ///< Percentage of CO₂ sent to space (default: 50%)
62+
double retained_co2_cumulative_; ///< Total CO₂ retained before desorption
63+
double previous_error_; ///< Previous error for PID control
64+
double co2_buffer_; ///< Buffer to store CO₂ before desorption
65+
66+
/*** AIR DATA VARIABLES ***/
67+
double co2_; ///< Current CO₂ mass
68+
double moisture_content_; ///< Current moisture content
69+
double contaminants_; ///< Current contaminant level
70+
double temperature_; ///< Current temperature
71+
72+
/*** ROS COMMUNICATION INTERFACES ***/
73+
rclcpp::Service<demo_nova_sanctum::srv::CrewQuarters>::SharedPtr adsorbent_service_; ///< Receives air from Desiccant Bed
74+
rclcpp::Client<demo_nova_sanctum::srv::CrewQuarters>::SharedPtr desiccant_client_; ///< Sends processed air back
75+
rclcpp::Publisher<std_msgs::msg::Float64>::SharedPtr co2_publisher_; ///< Publishes vented CO₂ to `/co2_vent`
76+
rclcpp::TimerBase::SharedPtr timer_; ///< Timer for periodic processing
77+
rclcpp::Publisher<demo_nova_sanctum::msg::CdraStatus>::SharedPtr cdra_status_publisher_;
78+
demo_nova_sanctum::msg::CdraStatus cdra;
79+
/*** SYSTEM STATES ***/
80+
bool is_active_; ///< Indicates if the adsorbent bed is currently processing air
81+
82+
/*** THREAD SAFETY ***/
83+
std::mutex data_mutex_; ///< Ensures safe access to shared air data variables
84+
};
85+
86+
#endif // DEMO_NOVA_SANCTUM_ADSORBENT_BED_HPP_

0 commit comments

Comments
 (0)