Giter Site home page Giter Site logo

nyxrobotics / brass_gazebo_battery Goto Github PK

View Code? Open in Web Editor NEW

This project forked from pooyanjamshidi/brass_gazebo_battery

0.0 1.0 0.0 3.42 MB

Battery plugin (open-circuit model) for any kinds of robot simulations in Gazebo.

License: MIT License

CMake 31.09% C++ 68.91%

brass_gazebo_battery's Introduction

Functionality

This is a Gazebo plugin that simulate an open-circuit battery model. This is a fairly extensible and reusable battery plugin for any kind of Gazebo compatible robots. We developed this plugin primarily for the challenge problem 1 (CP1) of the BRASS Project at CMU.

This power model simulates the power consumption of a robot. The amount of power consumed by each component of a robot depends on its usage. The battery its current state of the charge after each simulation iteration determined by dt in the code. The battery plugin takes the power loads for each components in the robot that consume energy and current voltage value of the battery (which updates according to the open circuit voltage model) as inputs and returns a new voltage value.

Support

This plugin is tested for ROS kinetic and Gazebo 7.8.1.

Build

Create the build directory:

mkdir ~/catkin_ws/src/brass_gazebo_battery/build
cd ~/catkin_ws/src/brass_gazebo_battery/build

Make sure you have sourced ROS before compiling the code:

source /opt/ros/<DISTRO>/setup.bash

Compile the code:

cmake ../
make    

Compiling will result in a shared library, ~/catkin_ws/src/brass_gazebo_battery/build/devel/lib/libbattery_discharge.so, that can be inserted in a Gazebo simulation.

Lastly, add your library path to the GAZEBO_PLUGIN_PATH:

export GAZEBO_PLUGIN_PATH=${GAZEBO_PLUGIN_PATH}:~/catkin_ws/src/brass_gazebo_battery/build/devel/lib

Build by catkin

Build the plugin by going to the base of your work space and running catkin:

cd ~/catkin_ws
catkin_make

Installing the Plugin

cd ~/catkin_ws/src/brass_gazebo_battery/build
cmake ../
make
sudo make install

Usage

In the brass.world file, libbattery_discharge.so is mentioned as a plugin. This implied that plugin is initialized and loaded when p2-cp1.world is opened in Gazebo. The xml code could be linked to any model in a new .world file.

<model name="battery_demo_model">
    <pose>0 0 0 0 0 0</pose>
    <static>false</static>
    <link name="body">
    <battery name="brass_battery">
        <voltage>12.592</voltage>
    </battery>
    </link>
<plugin name="battery" filename="libbattery_discharge.so">
    <ros_node>battery_monitor_client</ros_node>
    <link_name>body</link_name>
    <battery_name>linear_battery</battery_name>
    <constant_coef>12.694</constant_coef>
    <linear_coef>-3.1424</linear_coef>
    <initial_charge>1.1665</initial_charge>
    <capacity>1.2009</capacity>
    <resistance>0.061523</resistance>
    <smooth_current_tau>1.9499</smooth_current_tau>
    <charge_rate>0.2</charge_rate>
</plugin>
<plugin name="consumer" filename="libbattery_consumer.so">
    <link_name>body</link_name>
    <battery_name>linear_battery</battery_name>
    <power_load>6.6</power_load>
</plugin>
</model>

Run the Plugin

cd ~/catkin_ws/src/brass_gazebo_battery/
gazebo test/worlds/p2-cp1.world --verbose

Exposed ROS services and topics

This Gazebo plugin expose several services that can be accessed via ROS:

/battery_monitor_client/battery_demo_model/set_charge
/battery_monitor_client/battery_demo_model/set_charge_rate
/battery_monitor_client/battery_demo_model/set_charging
/battery_monitor_client/battery_demo_model/set_model_coefficients
/battery_monitor_client/battery_demo_model/set_power_load

Also, this publish information about the status of robot battery to the following topics:

/mobile_base/commands/charge_level
/mobile_base/commands/motor_power

Extending ROS Services

First create the service description file .srv and put it in the srv folder. Then declare it in the CMakeList.txt in the add_service_files() section. Also, add the following to the CMakeList.txt:

generate_messages(
DEPENDENCIES
std_msgs  # Or other packages containing msgs
)

For updating the parameters of the battery model we use ROS services, so here we explain how to add new services to the code if needed:

cd ~/catkin_ws
catkin_make

The header files associated to the service can be found here:

cd ~/catkin_ws/devel/include/brass_gazebo_battery

The add the following header into the code that want to use the services:

#include "brass_gazebo_battery/SetLoad.h"

And then add the following declaration:

public: bool ServiceName(brass_gazebo_battery::SetLoad::Request& req, brass_gazebo_battery::SetLoad::Response& res);

The service can then be advertised as follows:

this->rosNode->advertiseService(this->model->GetName() + "/api", &Plugin::ServiceName, this);

Notes about conversions

For converting capacity and charge rate (in Ah) to power (mwh) which is consumed by planner the formula is (Ah)*(V) = (Wh). For example, if you have a 3Ah battery rated at 5V, the power is 3Ah * 5V = 15wh or 15000mwh. For converting Watts to watt-hour, we do watt * hour, e.g., 6 watts / 3600 (wh) per seconds.

Acknowledgements

We used/inspired by existing theory of open circuit battery model. This battery discharge/charge plugin uses the Gazebo Battery class which is shipped by the default simulator.

Further references: r1, r2, r3.

Maintainer

If you need a new feature to be added, please contact Pooyan Jamshidi.

brass_gazebo_battery's People

Contributors

pooyanjamshidi avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.