generated from wessel/boilerplate
3.1 KiB
3.1 KiB
DatabaseManager (assignments::two::DatabaseManager)
Overview
The DatabaseManager class is a PostgreSQL database interface for the ROS2 IMU data collection system.
It handles all database operations including connection management, table creation and data storage.
Implementation Details
Dependencies
- pqxx: Modern C++ PostgreSQL library for database connectivity
- rclcpp: ROS2 C++ client library for logging
- ConfigManager: Configuration manager for database settings
Key Components
Constructor
DatabaseManager(rclcpp::Logger logger)
- Initializes the database manager with ROS2 logging
- Creates a ConfigManager instance for configuration handling
- Automatically calls
init_database()to establish connection and setup
Connection Management
bool connect(const std::string& connection_string)
Returns
trueon successful connection,falseon failure
- Establishes connection to PostgreSQL database using connection information from the config TOML
- Connection string format:
"host=localhost port=5432 dbname=imu_data user=postgres password=postgres"
bool is_connected() const
Returns
trueif connection exists and is open
- Check for active database connection status
Database Initialization
void init_database()
- Database setup process
- Loads configuration from ConfigManager
- Establishes connection using configuration settings
- Creates necessary tables and inserts sample data
- Error handling for configuration and connection failures
void create_tables()
- Creates all required database tables using SQL queries from
SQLQueries.hpp - Tables created:
imu_data: IMU sensor readings with linear acceleration and angular velocity data
- Uses transactions for atomic table creation
Data Operations
IMU Data Storage
bool store_imu_data(double linear_accel_x, double linear_accel_y, double linear_accel_z, double angular_vel_x, double angular_vel_y, double angular_vel_z)
Returns
trueon successful storage,falseon failure
- Stores IMU sensor readings in the database
- Parameters:
linear_accel_x: Linear acceleration on X-axislinear_accel_y: Linear acceleration on Y-axislinear_accel_z: Linear acceleration on Z-axisangular_vel_x: Angular velocity around X-axisangular_vel_y: Angular velocity around Y-axisangular_vel_z: Angular velocity around Z-axis
- Automatically adds timestamp on insertion
Logging
- Uses ROS2 logger with
[DBS]prefix for database operations - Different log levels:
INFO: Successful operations, connection statusERROR: SQL errors, connection failures, configuration issuesWARN: Non-critical issues, missing configurations
Usage Examples
Basic Database Setup
// Create DatabaseManager with ROS2 logger
DatabaseManager db_manager(node->get_logger());
// Check connection status
if (db_manager.is_connected()) {
// Database ready for operations
bool success = db_manager.store_imu_data(1.2, -0.5, 9.8, 0.01, 0.02, 0.03);
if (success) {
RCLCPP_INFO(logger, "IMU data stored successfully");
}
}