diff --git a/lunar_pole_exploration_rover/README.md b/lunar_pole_exploration_rover/README.md
index 3e1a53c1..bdde81ca 100644
--- a/lunar_pole_exploration_rover/README.md
+++ b/lunar_pole_exploration_rover/README.md
@@ -1,5 +1,7 @@
# lunar_pole_exploration_rover
+![Demo Banner](assets/ressources/images/demo_banner.png)
+
This package (and associated assets in the simulation repository) provides a Gazebo simulation of a lunar south pole exploration mission inspired by the real NASA VIPER mission.
It includes a realistic environment, the Mons Mouton, where the VIPER rover was planned to land, and a fully controllable rover model.
@@ -12,8 +14,40 @@ This package and associated plugins and models were developped by [Robin Baran](
Team lead Freelancer name: @RBinsonB
Submission title: Lunar Pole Exploration Rover & Plugins
-## Running the demo
-### Building the docker
+# Table of contents
+1. [Running the demo](#running_demo)
+ 1. [Building the docker](#building_docker)
+ 2. [Running the docker](#running_docker)
+ 3. [Controlling the rover](#controlling_rover)
+ 1. [Setup](#setup_rover)
+ 2. [Available commands](#available_commands)
+ 4. [Solar panel and power](#solar_panel_and_power)
+2. [Contribution details](#contrib)
+ 1. [Why It Matters](#why_it_matters)
+ 2. [Lunar Pole Exploration Rover](#lunar_pole_exploration_rover)
+ 1. [Sensor suit](#sensor_suit)
+ 2. [Power system](#power_system)
+ 3. [Control node](#control_node)
+ 1. [Motion types](#motion_types)
+ 4. [Rover model API](#rover_api)
+ 1. [Subscribed Topics ](#sub_topics)
+ 2. [Published Topics](#pub_topics)
+ 3. [Services](#services)
+ 4. [Controllable Joint Interfaces](#control_joint_interfaces)
+ 3. [Mons Mouton World](#mons_mouton_world)
+ 1. [Mons Mouton Terrain Model](#mons_mouton_terrain_model)
+ 4. [Power System Plugins](#power_system_plugins)
+ 1. [SolarPanelPlugin](#solar_panel_plugin)
+ 1. [How to setup the plugin](#solar_panel_plugin_setup)
+ 2. [RadioisotopeThermalGeneratorPlugin](#rtg_plugin)
+ 1. [How to setup the plugin](#rtg_plugin_setup)
+ 3. [RechargeableBatteryPlugin](#bat_plugin)
+ 1. [How to setup the plugin](#bat_plugin_setup)
+ 4. [SensorPowerSystemPlugin](#sensor_system_plugin)
+ 1. [How to setup the plugin](#sensor_system_plugin_setup)
+
+## Running the demo
+### Building the docker
To build the docker image, go to your ROS2 workspace. Make a spaceros workspace if you don't already have one:
```bash
mkdir -p ~spaceros_ws/src
@@ -36,7 +70,7 @@ cd ~spaceros_ws
docker build -f demos/lunar_pole_exploration_rover/docker/Dockerfile -t lunar_rover_image .
```
-### Running the docker
+### Running the docker
Run the following command before running the container:
```bash
xhost +local:docker
@@ -73,9 +107,9 @@ Once the container is running, launch the demo by typing the following command:
ros2 launch lunar_pole_exploration_rover lunar_pole_exploration_rover.launch.py
```
-### Controlling the rover
+### Controlling the rover
-#### Setup
+#### Setup
Open a ne terminal and attach the current running container:
```bash
@@ -91,7 +125,7 @@ source ~/spaceros/install/setup.bash
source ~/demos_ws/install/setup.bash
```
-#### Available commands
+#### Available commands
```bash
ros2 service call /move_forward std_srvs/srv/Empty
@@ -133,11 +167,25 @@ Center the camera
ros2 service call /camera_center std_srvs/srv/Empty
```
-### Solar panel and power
-TODO
+### Solar panel and power
+The power output of each panel can be printed by typing either of the following. When moving the rover, the power can be seen to vary as the panel position relative to the sun is changing.
+```bash
+ros2 topic echo /model/lunar_pole_exploration_rover/left_solar_panel/solar_panel_output
+```
+```bash
+ros2 topic echo /model/lunar_pole_exploration_rover/right_solar_panel/solar_panel_output
+```
+```bash
+ros2 topic echo /model/lunar_pole_exploration_rover/rear_solar_panel/solar_panel_output
+```
+The power being produced is sent to a rechargeable battery. The state of the battery can be seen using:
+```bash
+ros2 topic echo /model/lunar_pole_exploration_rover/battery/rechargeable_battery/state
+```
-## Contribution details
+
+## Contribution details
Our contribution is as follows:
* A lunar south pole exploration Gazebo simulation modelled on NASA VIPER mission including:
* A fully simulated rover model
@@ -148,7 +196,7 @@ Our contribution is as follows:
* A modified version of the linear battery plugin that is able to take as charge input the power outputs of the two previous plugins.
* A sensor power load system plugin to simulate the power drawn by sensors
-### Why It Matters
+### Why It Matters
Our motivation and rational for this contribution is firstly based on the renewed global interest for the moon. The polar regions in particular are of high interest due to the high chance of water ice being present in permanently shaded craters. Said water could be used to establish a long lasting human presence on the moon (https://www.weforum.org/agenda/2023/08/space-water-ice-moon-south-pole/).
Unique challenges have to be addressed in this environment and would be interesting to simulate in Space-ROS. In particular the power generation and management:
@@ -159,18 +207,18 @@ Unique challenges have to be addressed in this environment and would be interest
In addition, power generation and management strategies are a cornerstone of any space mission, and in particular space robotic missons. Many space missions have been saved or got extended beyond their initially planned lifetimes through the careful management of power loads. Deactivating science equipment, sensors and even actuators to reduce consumption. For example, the Opportunity and Spirit rovers extended their mission life well beyond the planned 90 days by deactivating non-essential equipment and reducing communication during dust storms (https://web.archive.org/web/20140902071407/http://www.nasa.gov/mission_pages/mer/mer-20070824.html). Being able to simulate those behaviors and strategies seems of great added value to Space-ROS.
-### Lunar Pole Exploration Rover
+### Lunar Pole Exploration Rover
The rover gazebo model is designed to be as close as posible to the real NASA VIPER rover.
-It has four steerable wheels that allow a wide range of motion, including going sideways (it would even be holonomic if it wasn't for the limits on the wheel steer angles). TODO INSERT REF (@RBinsonB)
+It has four steerable wheels that allow a wide range of motion, including going sideways [[source]](https://science.nasa.gov/mission/viper/in-depth/) (it would even be holonomic if it wasn't for the limits on the wheel steer angles).
The rover is equipped with a main navigation camera (actually a pair) mounted on a mast. The camera is able to pan and tilt.
-TODO RBinson insert image
+![Lunar Pole Exploration Rover Model Screenshot](assets/ressources/images/lunar_pole_exploration_rover_model.png)
-The rover is powered by a battery. The battery is charged by three solar panels: one on the left, one on the right and on at the back of the rover. The panels are tilted sideways to face the sun which is low on the horizon when close to the moon south pole. Total power of the solar panel is 450W (TODO RBinsonB insert ref) and therefor each panel was estimated to produce 150W at full capacity (sun hitting horizontally). The solar panels are simulated using a specifically developed plugin, detailed later in the document.
+The rover is powered by a battery. The battery is charged by three solar panels: one on the left, one on the right and on at the back of the rover. The panels are tilted sideways to face the sun which is low on the horizon when close to the moon south pole. Total power of the solar panel is 450W [[source]](https://science.nasa.gov/mission/viper/in-depth/) and therefor each panel was estimated to produce 150W at full capacity (sun hitting horizontally). The solar panels are simulated using a specifically developed plugin, detailed later in the document.
-#### Sensor suit
+#### Sensor suit
It features a similar sensor suit of the real VIPER rover. Detailed characteristics were obtained from [359199649_VIPER_Visible_Imaging_System](https://www.researchgate.net/publication/359199649_VIPER_Visible_Imaging_System) and [20210015009 - Colaprete-VIPER PIP final.pdf](https://ntrs.nasa.gov/api/citations/20210015009/downloads/20210015009%20-%20Colaprete-VIPER%20PIP%20final.pdf) and [viper-moon-rover-head-neck-mast-installed](https://www.space.com/viper-moon-rover-head-neck-mast-installed).
- A pair of monochrome cameras for navigation, NavCam, mounted on the rover mast. Each camera has 70° x 70° FOV and the image sensors have 2048 ×
2048 pixels. The camera can pan 360° and tilt vertically in both directions at a maximum angle of 75°.
@@ -179,34 +227,74 @@ It features a similar sensor suit of the real VIPER rover. Detailed characterist
- An IMU.
- An Odometry plugin to simulate wheel encoders.
-#### Power system
-#### Control node
-##### Motion types
-
-#### Rover model API
-##### Subscribed Topics
-@RBinsonB TODO
-##### Published Topics
-* **/model/lunar_pole_exploration_rover/left_solar_panel/solar_panel_output** (`ignition_msgs::msg::Float32`) -- Publishes the current output of the left solar panel in watt
-* **/model/lunar_pole_exploration_rover/right_solar_panel/solar_panel_output** (`ignition_msgs::msg::Float32`) -- Publishes the current output of the right solar panel in watt
-* **/model/lunar_pole_exploration_rover/rear_solar_panel/solar_panel_output** (`ignition_msgs::msg::Float32`) -- Publishes the current output of the rear solar panel in watt
-* **/model/lunar_pole_exploration_rover/odometry** (`ignition_msgs::msg::Odometry`) -- Robot odometry
-* **/model/lunar_pole_exploration_rover/odometry_with_covariance**(`ignition_msgs::msg::OdometryWithCovariance`) -- Robot odometry
-* **/model/lunar_pole_exploration_rover/battery/rechargeable_battery/state** (`ìgnition_msgs::msg::BaterrySate`) -- Publishes the current state of the battery `rechargeable_battery´
-* **/model/lunar_pole_exploration_rover/pose**(`ignition_msgs::msg::Pose`) -- Robot estimated pose from odometry
-* **aft_cam_left/camera_info** (`ignition_msgs::msg::CameraInfo`) -- AftCam left camera info
-* **aft_cam_right/camera_info** (`ignition_msgs::msg::CameraInfo`) -- AftCam right camera info
-* **nav_cam_left/camera_info** (`ignition_msgs::msg::CameraInfo`) -- NavCam left camera info
-* **nav_cam_right/camera_info** (`ignition_msgs::msg::CameraInfo`) -- NavCam right camera info
-* **aft_cam_left/image_raw** (`ignition_msgs::msg::Image`) -- AftCam left camera image
-* **aft_cam_right/image_raw** (`ignition_msgs::msg::Image`) -- AftCam right camera image
-* **nav_cam_left/image_raw** (`ignition_msgs::msg::Image`) -- NavCam left camera image
-* **nav_cam_right/image_raw** (`ignition_msgs::msg::Image`) -- NavCam right camera image
-
-##### Services
-@RBinsonB TODO
-
-##### Controllable Joint Interfaces
+#### Power system
+The rover is powered by a simulated rechargeable battery. The battery is recharged by the solar panels and drained by the rover motion and sensors. A set of custom made Gazebo plugins is used to simulate this behavior. The plugins simulate the power generation depending on the sun position relative to the panels, the charge of the battery and the power of the sensors. Details on the plugins are given in the dedicated section later in the document.
+
+#### Control node
+The `move_wheel` node provides the ROS2 standard `cmd_vel` control topic to drive the rover.
+##### Motion types
+The control nodes considers four different types of motion depending on the values of the field of the `cmd_vel` control topic.
+
+* All fields to zero -- No motion
+ All wheel steer angles are set to zero and all wheel velocities are set to zero. The rover will actively brake to stop.
+* Only angular velocity around z-axis, no linear velocity -- Rotate on place
+ The wheel steer angles are set individually so that they are all set perpendicularly to the robot center. The wheels will rotate accordingly for the rover to rotate on place at the request angular velocity
+* Only linear velocity, no angular velocity -- Sideway motion
+ The wheel steer angles are all set to the same angle, the angle of the linear velocity command vector. The wheels all rotates at the same velocities for the rover to move with the speed of the norm of the linear velocity command vector
+* Linear velociies and angular velocity around z-axis -- Combined motion
+ The rover will act as an Ackermann-driven robot. The sideway motion is first set as explained before by only considering the linear elements of the velocity command vector. The steer angle and rotation velocity of each wheel is then adjusted to add the angular velocity around z-axis by considering a steering radius for the robot.
+
+![Rover Possible Motions Schematics](assets/ressources/images/motions.png)
+
+#### Rover model API
+##### Subscribed Topics
+* **/cmd_vel** (`geometry_msgs/msg/Twist`) -- Velocity command to the rover
+* **/model/lunar_pole_exploration_rover/sensor/aft_cam_left/activate** (`std_msgs/msg/Boolean`) -- Use to activate/deactivate the sensor and its associated power load
+* **/model/lunar_pole_exploration_rover/sensor/aft_cam_right/activate** (`std_msgs/msg/Boolean`) -- Use to activate/deactivate the sensor and its associated power load
+* **/model/lunar_pole_exploration_rover/sensor/nav_cam_left/activate** (`std_msgs/msg/Boolean`) -- Use to activate/deactivate the sensor and its associated power load
+* **/model/lunar_pole_exploration_rover/sensor/nav_cam_right/activate** (`std_msgs/msg/Boolean`) -- Use to activate/deactivate the sensor and its associated power load
+* **/model/lunar_pole_exploration_rover/sensor/haz_cam_left_front/activate** (`std_msgs/msg/Boolean`) -- Use to activate/deactivate the sensor and its associated power load
+* **/model/lunar_pole_exploration_rover/sensor/haz_cam_right_front/activate** (`std_msgs/msg/Boolean`) -- Use to activate/deactivate the sensor and its associated power load
+* **/model/lunar_pole_exploration_rover/sensor/haz_cam_left_rear/activate** (`std_msgs/msg/Boolean`) -- Use to activate/deactivate the sensor and its associated power load
+* **/model/lunar_pole_exploration_rover/sensor/haz_cam_right_rear/activate** (`std_msgs/msg/Boolean`) -- Use to activate/deactivate the sensor and its associated power load
+
+##### Published Topics
+* **/model/lunar_pole_exploration_rover/left_solar_panel/solar_panel_output** (`std_msgs/msg/Float32`) -- Publishes the current output of the left solar panel in watt
+* **/model/lunar_pole_exploration_rover/right_solar_panel/solar_panel_output** (`std_msgs/msg/Float32`) -- Publishes the current output of the right solar panel in watt
+* **/model/lunar_pole_exploration_rover/rear_solar_panel/solar_panel_output** (`std_msgs/msg/Float32`) -- Publishes the current output of the rear solar panel in watt
+* **/model/lunar_pole_exploration_rover/odometry** (`nav_msgs/msg/Odometry`) -- Robot odometry
+* **/model/lunar_pole_exploration_rover/odometry_with_covariance**(`nav_msgs/msg/OdometryWithCovariance`) -- Robot odometry
+* **/model/lunar_pole_exploration_rover/battery/rechargeable_battery/state** (`sensor_msgs/msg/BatterySate`) -- Publishes the current state of the battery `rechargeable_battery´
+* **/model/lunar_pole_exploration_rover/pose**(`geometry_msgs/msg/Pose`) -- Robot estimated pose from odometry
+* **aft_cam_left/camera_info** (`sensor_msgs/msg/CameraInfo`) -- AftCam left camera info
+* **aft_cam_right/camera_info** (`sensor_msgs/msg/CameraInfo`) -- AftCam right camera info
+* **nav_cam_left/camera_info** (`sensor_msgs/msg/CameraInfo`) -- NavCam left camera info
+* **nav_cam_right/camera_info** (`sensor_msgs/msg/CameraInfo`) -- NavCam right camera info
+* **haz_cam_left_front/camera_info** (`sensor_msgs/msg/CameraInfo`) -- HazCam left front camera info
+* **haz_cam_left_rear/camera_info** (`sensor_msgs/msg/CameraInfo`) -- HazCam left rear camera info
+* **haz_cam_right_front/camera_info** (`sensor_msgs/msg/CameraInfo`) -- HazCam right front camera info
+* **haz_cam_right_rear/camera_info** (`sensor_msgs/msg/CameraInfo`) -- HazCam right rear camera info
+* **aft_cam_left/image_raw** (`sensor_msgs/msg/Image`) -- AftCam left camera image
+* **aft_cam_right/image_raw** (`sensor_msgs/msg/Image`) -- AftCam right camera image
+* **nav_cam_left/image_raw** (`sensor_msgs/msg/Image`) -- NavCam left camera image
+* **nav_cam_right/image_raw** (`sensor_msgs/msg/Image`) -- NavCam right camera image
+* **haz_cam_left_front/image_raw** (`sensor_msgs/msg/Image`) -- HazCam left front camera image
+* **haz_cam_left_rear/image_raw** (`sensor_msgs/msg/Image`) -- HazCam left rear camera image
+* **haz_cam_right_front/image_raw** (`sensor_msgs/msg/Image`) -- HazCam right front camera image
+* **haz_cam_right_rear/image_raw** (`sensor_msgs/msg/Image`) -- HazCam right rear camera image
+
+##### Services
+* **camera_center** (`std_srvs/srv/Empty`) -- Demonstration service that center the pan of the camera and face down 45°
+* **camera_rotate** (`std_srvs/srv/Empty`) -- Demonstration service that rotate the camera around
+* **move_forward** (`std_srvs/srv/Empty`) -- Demonstration service that drive the rover forward
+* **turn_left** (`std_srvs/srv/Empty`) -- Demonstration service that drive the rover forward and turn left
+* **turn_right** (`std_srvs/srv/Empty`) -- Demonstration service that drive the rover forward and turn right
+* **move_sideway_left** (`std_srvs/srv/Empty`) -- Demonstration service that drive the rover sideway to the left
+* **move_sideway_right** (`std_srvs/srv/Empty`) -- Demonstration service that drive the rover sideway to the right
+* **move_sideway_and_turn_left** (`std_srvs/srv/Empty`) -- Demonstration service that drive the rover sideway and rotate (combined motion)
+* **move_stop** (`std_srvs/srv/Empty`) -- Demonstration service that stops the rover
+
+##### Controllable Joint Interfaces
* mast_head_pivot_joint (`revolute`) -- NavCam pan joint
* mast_camera_joint (`revolute`) -- NavCam tilt joint
* front_left_wheel_joint (`revolute`) -- front left wheel rotation joint
@@ -218,7 +306,7 @@ It features a similar sensor suit of the real VIPER rover. Detailed characterist
* front_right_wheel_axle_joint (`revolute`) -- front right wheel steer joint
* rear_right_wheel_axle_joint (`revolute`) -- rear right wheel steer joint
-### Mons Mouton World
+### Mons Mouton World
A world and associated Gazebo terrain model for the Mons Mouton mountain located near the lunar south pole (also formaly refered to as Liebnitz Beta).
![Mons Mouton World Screenshot](assets/ressources/images/mons_mouton_world1.png)
@@ -229,8 +317,8 @@ The differentiating characteristics of the Gazebo world are as follows:
* Atmosphere being neglected (`0.0`)
* Sun light entity is placed low on the horizon and direction is set to mimic real sunlight conditions at Mons Mouton.
-#### Mons Mouton Terrain Model
-This model represents the 1sqkm area centered at (TODO RBinsonb add SCS coordinate) and was generated by using DEM data (site20) from the NASA LRO mission: https://pgda.gsfc.nasa.gov/products/78 (Barker, M.K., et al. (2021), Improved LOLA Elevation Maps for South Pole Landing Sites: Error Estimates and Their Impact on Illumination Conditions, Planetary & Space Science, Volume 203, 1 September 2021, 105119, doi:10.1016/j.pss.2020.105119.).
+#### Mons Mouton Terrain Model
+This model represents the 1sqkm area at Long31.00, Lat84.6 and was generated by using DEM data (site20) from the NASA LRO mission: https://pgda.gsfc.nasa.gov/products/78 (Barker, M.K., et al. (2021), Improved LOLA Elevation Maps for South Pole Landing Sites: Error Estimates and Their Impact on Illumination Conditions, Planetary & Space Science, Volume 203, 1 September 2021, 105119, doi:10.1016/j.pss.2020.105119.).
![Mons Mouton World Screenshot](assets/ressources/images/mons_mouton_lro.png)
@@ -238,8 +326,8 @@ The model was textured and additional detailed elevation noise at a higher defin
![Mons Mouton Terrain 3D Model](assets/ressources/images/mons_mouton_terrain_model.png)
-### Power System Plugins
-#### SolarPanelPlugin
+### Power System Plugins
+#### SolarPanelPlugin
The solar panel plugin allows to simulate solar panel power output depending on the panel orientation relative to the sun and LOS.
* Required elements
@@ -247,14 +335,15 @@ The solar panel plugin allows to simulate solar panel power output depending on
* **nominal_power** (`float`) -- The maximum power supplied by the solar panel when the sun is hitting perdendicular
* Publications
- * **/model///solar_panel_output** (`std_msgs::msg::Float`) -- Publishes the current solar panel output in watt.
+ * **/model/``/``/solar_panel_output** (`std_msgs/msg/Float`) -- Publishes the current solar panel output in watt.
-##### How to setup the plugin
+##### How to setup the plugin
+
The plugin needs to be attached to a model. The link specified by **** is the solar panel.
```XML
-
+
rear_solar_panel
150.0
@@ -290,9 +379,10 @@ The plugin needs to be attached to a model. The link specified by ***
```
- **LOS (Line-Of-Sight)**: If the sun is occulted, no power is supplied by the solar panel plugin. To know if the panel is occulted, the plugin checks the line of sight between the `sun` (by using the `` element) and the link visual children. The panel solar link needs to have at least one visual element for the plugin to work.
-- **Power computation**: The plugin computes the power generated by the panel by checking the angle between the Z-axis of the solar panel link and the `direction` vector of the sun. TODO @RBinsonB add image and ref
+- **Power computation**: The plugin computes the power generated by the panel by checking the angle between the Z-axis of the solar panel link and the `direction` vector of the sun according to the [cosine effect](https://www.e-education.psu.edu/eme812/node/896). The value given by nominal_power is multiplied by the result of the cosine of the angle between the sun direction vector and the solar panel z-axis.
+
+#### RadioisotopeThermalGeneratorPlugin
-#### RadioisotopeThermalGeneratorPlugin
The radioisotope thermal generator plugin allows to simulate an RTG power output. It provides a constant power supply.
* Required elements
@@ -300,22 +390,114 @@ The radioisotope thermal generator plugin allows to simulate an RTG power output
* **nominal_power** (`float`) -- The constant power in watt generated by the RTG.
* Publications
- * **/model///radioisotope_thermal_generator_output** (`std_msgs::msg::Float`) -- Publishes the current solar panel output in watt.
+ * **/model/``/``/radioisotope_thermal_generator_output** (`std_msgs/msg/Float`) -- Publishes the current solar panel output in watt.
+
+##### How to setup the plugin
-##### How to setup the plugin
The plugin needs to be attached to a model. Example below:
```XML
-
+
chassis
100.0
```
-#### RechargeableBatteryPlugin
-TODO @stevedanolodomor
-#### SensorPowerSystemPlugin
-TODO @stevedanolodomor
+#### RechargeableBatteryPlugin
+
+The rechargeable battery plugin is a modified version of the stock LinearBatteryPlugin to allow recharge at a variable rate. It can be charged by any plugin providing a power output in watts on a Gazebo topic. In addition, by default, if no start draining topic is defined, the battery starts to drain as soon as the robot starts to move.
+
+* Required elements
+ * **battery_name** (`str`) -- Unique name for the battery (required)
+ * **voltage** (`double`) -- Initial voltage of the battery (required)
+ * **open_circuit_voltage** (`double`) --
+ * **open_circuit_voltage_constant_coef** (`double`) -- Voltage at full charge
+ * **open_circuit_voltage_linear_coef** (`double`) -- Amount of voltage decrease when no charge
+ * **initial_charge** (`double`) -- Initial charge of the battery in Ah
+ * **capacity** (`double`) -- Total charge that the battery in Ah
+ * **resistance** (`double`) -- Internal resistance in Ohm
+ * **smooth_current_tau** (`double`) -- Coefficient for smoothing current [0, 1]
+ * **power_source** (`array[str]`) -- List of topic of power sources.
+ * **start_draining** (`boolean`) -- Whether to start draining the battery
+ * **power_draining_topic** (`str`) -- This is the topic to start draining the battery
+ * **stop_power_draining_topic** (`str`) -- This is to stop draining the battery
+ * **power_load** (`double`) -- Idle power load
+
+ * Publications
+ * **/model/``/battery/``/state** (`sensor_msgs/msg/BatterySate`) -- Publishes the current state of the battery
+
+##### How to setup the plugin
+The plugin needs to be attached to a model. Example below:
+
+```XML
+
+ rechargeable_battery
+ 30.0
+ 30.0
+ 30.0
+ -3.0
+ 9.0
+ 10.0
+ 0.1
+ 1.0
+
+
+ left_solar_panel/solar_panel_output
+ right_solar_panel/solar_panel_output
+ rtg_body/radioisotope_thermal_generator_output
+
+ 11.0
+ /battery/discharge
+
+```
+
+* The power source topic needs to be on the format `/`. As of now, the following plugins can provide power to charge the battery:
+ * **SolarPanelPlugin**: with topic `/solar_panel_output`
+ * **RadioisotopeThermalGeneratorPlugin**: with topic `/radioisotope_thermal_generator_output`
+#### SensorPowerSystemPlugin
+The sensor power system plugin pairs with the RechargeableBatteryPlugin allowing one to define for each sensor the power load it consumes from any battery in the model. Sensors can be deactivated to save power (as it is often the case on real space missions). When the battery is too low, the sensors managed by the plugin will also be deactivated. In addition, topics are exposed to disable the power load of each sensor consumption on demand. The topic uses the following format.
+ * **/model/``/sensor/``/activate** (`std_msgs/msg/Boolean`) -- Topic available to activate/deactivate the power consumption of sensor.
+The model can have multiple batteries and each sensor consumes from any of those batteries.
+
+#### How to setup the plugin
+The plugin needs to be attached to a model. Example below:
+
+```XML
+
+
+```
+
+In addition, you need to include in each of the sensors, the power load and the battery they consume from. Example below:
+
+```XML
+
+
+ 1
+ 10.0
+ 11.0
+ rechargeable_battery
+
+ 1.0 0 0 0 0 0
+ 1.22173
+
+ 2048
+ 2048
+ L16
+
+
+ 0.01
+ 100
+
+
+ gaussian
+ 0.007
+
+
+ 1
+ navcam_left/image_raw
+
+
+```
diff --git a/lunar_pole_exploration_rover/assets/ressources/images/demo_banner.png b/lunar_pole_exploration_rover/assets/ressources/images/demo_banner.png
new file mode 100644
index 00000000..d954dd3a
Binary files /dev/null and b/lunar_pole_exploration_rover/assets/ressources/images/demo_banner.png differ
diff --git a/lunar_pole_exploration_rover/assets/ressources/images/motions.png b/lunar_pole_exploration_rover/assets/ressources/images/motions.png
new file mode 100644
index 00000000..32f854a7
Binary files /dev/null and b/lunar_pole_exploration_rover/assets/ressources/images/motions.png differ
diff --git a/lunar_pole_exploration_rover/assets/ressources/images/solar_panel_cosine.png b/lunar_pole_exploration_rover/assets/ressources/images/solar_panel_cosine.png
new file mode 100644
index 00000000..42eeeaeb
Binary files /dev/null and b/lunar_pole_exploration_rover/assets/ressources/images/solar_panel_cosine.png differ