GithubHelp home page GithubHelp logo

titoirfan / soca_octomap Goto Github PK

View Code? Open in Web Editor NEW
1.0 2.0 1.0 8.58 MB

Ultraviolet-C Irradiation Simulation and Evaluation in Gazebo and ROS

License: GNU General Public License v3.0

CMake 4.20% C++ 94.46% Python 1.34%
gazebo ros uvc simulation

soca_octomap's Introduction

soca_octomap

Author: Irfan Tito Kurniawan

An ultraviolet-C (UV-C) irradiation simulation and evaluation implementation in Gazebo and ROS. The simulation is made possible by modelling the UV-C irradiation system as a 3D LIDAR and representing the environment as a voxel map. The evaluation functionality compares the irradiation simulation result to a reference map of the environment to calculate the total irradiation coverage.

Related Publications:

Kurniawan, I. T., & Adiprawita, W. (2021, June). A Method of Ultraviolet-C Surface Irradiation Simulation and Evaluation. In 2021 International Symposium on Electronics and Smart Devices (ISESD) (pp. 1-5). IEEE.

Kurniawan, I. T., & Adiprawita, W. (2021, June). Autonomy Design and Development for an Ultraviolet-C Healthcare Surface Disinfection Robot. In 2021 International Symposium on Electronics and Smart Devices (ISESD) (pp. 1-6). IEEE.

1. Acknowledgement

The development of this software won't be possible without the following open-source libraries and tools

2. Prerequisite

We have tested the implementation in Ubuntu 20.04 with ROS Noetic and Gazebo 11.1.0.

C++11 Compiler

We use functionalities provided by C++11.

Octomap

You will need to install Octomap separately in your system.

3. Building soca_octomap

Create a catkin workspace

mkdir -p catkin_ws/src && cd ./catkin_ws/src

Clone the repository

git clone https://github.com/titoirfan/soca_octomap

Build and source the repository

cd .. && catkin_make && source ./devel/setup.bash 

4. Usage

Simulation

  1. Add a 3D LIDAR link and P3D ground truth pose publisher to your URDF and Gazebo model. See example.urdf.xacro and example.gazebo.xacro for reference.
  2. Run the message_to_tf to create a tf expressing the ground truth pose between the map frame and the LIDAR link.
  3. Run the Dose Octomap Server node.
  4. When a satisfactory Dose Octomap is obtained, save the Dose Octomap using the Dose Octomap Saver node.

Evaluation

  1. Add the RotorS' Octomap Builder plugin to the world file of your environment. See the third line of block_and_cylinder.world for reference.
<!-- Add these anywhere between world tags -->
<plugin name='gazebo_octomap' filename='libBuildOctomapPlugin.so'/>
  1. Generate the binary ground truth Octomap of the environment by calling the plugin's service. Please note that the Octomap sizes should match and you may have to tune the z-origin parameter. See the example section for more information.
  2. Run the heatmap evaluator node for the full Dose Octomap file to be evaluated against the binary ground truth Octomap.

5. Example

We provided a simple example of a static platform irradiating a simple model cubes and cylinder.

Simulation

  1. Make and source the repository
cd catkin_ws && source ./devel/setup.bash
  1. Run the example launchfile to set up the simulation environment. This will spawn the example platform defined in example.urdf.xacro in the environment block_and_cylinder.world. It will also run the message_to_tf node.
roslaunch soca_octomap example.launch
  1. Run RViz and open the configuration file at ./src/soca_octomap/soca_octomap/example/rviz/example.rviz
rosrun rviz rviz
  1. Launch the Dose Octomap Server node
roslaunch soca_octomap octomap_dose_mapping.launch
  1. Save the Dose Octomap once a satisfactory result is obtained
# Save full map
rosrun soca_octomap octomap_dose_saver_node -f ./src/soca_octomap/soca_octomap/example/octomap/meas_octomap.ot
# Save binary map
rosrun soca_octomap octomap_dose_saver_node ./src/soca_octomap/soca_octomap/example/octomap/meas_octomap.bt

Evaluation

  1. Make and source the repository
cd catkin_ws && source ./devel/setup.bash
  1. Generate a ground truth reference Octomap of the environment while Gazebo is simulating the environment. You might have to remove any platforms or robots you have in the field. The bounding box length is centered around the origin (e.g. x origin of 0 and x bounding box length of 5 will get you an x range of -2.5 to 2.5). Make sure to set fill_closed_spaces to false to get a surface map of the environment. Note that the size has to match the measured Dose Octomap, you might also have to tune the z-origin to match the coordinates.
rosservice call /world/build_octomap '{bounding_box_origin: {x: 0.0, y: 0, z: 0.5}, bounding_box_lengths: {x: 5.0, y: 5.0, z: 2.05}, leaf_size: 0.05, filename: $(PATH_TO_CATKIN_WS)/src/soca_octomap/soca_octomap/example/octomaps/ref_octomap.bt, fill_closed_spaces: false}'
  1. Edit the file paths and area bounds in heatmap_eval.config and launch the evaluator node
roslaunch soca_octomap heatmap_eval.launch
  1. You can then visualize the difference Octomap
octovis ./src/soca_octomap/soca_octomap/example/octomaps/diff_octomap.bt

soca_octomap's People

Contributors

titoirfan avatar

Stargazers

 avatar

Watchers

 avatar  avatar

Forkers

cyh443

soca_octomap's Issues

I am getting ( Invoking "make -j12 -l12" failed ) while doing catkin_make; Please help me in this issue

khaledmousa@DESKTOP-2601QJC:/mnt/c/Users/khale/catkin_ws1$ catkin_make
Base path: /mnt/c/Users/khale/catkin_ws1
Source space: /mnt/c/Users/khale/catkin_ws1/src
Build space: /mnt/c/Users/khale/catkin_ws1/build
Devel space: /mnt/c/Users/khale/catkin_ws1/devel
Install space: /mnt/c/Users/khale/catkin_ws1/install

Running command: "cmake /mnt/c/Users/khale/catkin_ws1/src -DCATKIN_DEVEL_PREFIX=/mnt/c/Users/khale/catkin_ws1/devel -DCMAKE_INSTALL_PREFIX=/mnt/c/Users/khale/catkin_ws1/install -G Unix Makefiles" in "/mnt/c/Users/khale/catkin_ws1/build"

-- Using CATKIN_DEVEL_PREFIX: /mnt/c/Users/khale/catkin_ws1/devel
-- Using CMAKE_PREFIX_PATH: /home/khaledmousa/robotics_ws/devel;/home/khaledmousa/catkin_ws/devel;/opt/ros/noetic
-- This workspace overlays: /home/khaledmousa/robotics_ws/devel;/home/khaledmousa/catkin_ws/devel;/opt/ros/noetic
-- Found PythonInterp: /usr/bin/python3 (found suitable version "3.8.10", minimum required is "3")
-- Using PYTHON_EXECUTABLE: /usr/bin/python3
-- Using Debian Python package layout
-- Using empy: /usr/lib/python3/dist-packages/em.py
-- Using CATKIN_ENABLE_TESTING: ON
-- Call enable_testing()
-- Using CATKIN_TEST_RESULTS_DIR: /mnt/c/Users/khale/catkin_ws1/build/test_results
-- Forcing gtest/gmock from source, though one was otherwise available.
-- Found gtest sources under '/usr/src/googletest': gtests will be built
-- Found gmock sources under '/usr/src/googletest': gmock will be built
-- Found PythonInterp: /usr/bin/python3 (found version "3.8.10")
-- Using Python nosetests: /usr/bin/nosetests3
-- catkin 0.8.10
-- BUILD_SHARED_LIBS is on
-- BUILD_SHARED_LIBS is on
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-- ~~ traversing 11 packages in topological order:
-- ~~ - octomap_mapping (metapackage)
-- ~~ - octomap_msgs
-- ~~ - velodyne_description
-- ~~ - velodyne_simulator (metapackage)
-- ~~ - message_to_tf
-- ~~ - octomap_ros
-- ~~ - octomap_server
-- ~~ - soca_octomap
-- ~~ - octomap_rviz_plugins
-- ~~ - sim_gazebo_plugins
-- ~~ - velodyne_gazebo_plugins
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-- +++ processing catkin metapackage: 'octomap_mapping'
-- ==> add_subdirectory(soca_octomap/octomap_lib/octomap_mapping/octomap_mapping)
-- +++ processing catkin package: 'octomap_msgs'
-- ==> add_subdirectory(soca_octomap/octomap_lib/octomap_msgs)
-- Using these message generators: gencpp;geneus;genlisp;gennodejs;genpy
-- octomap_msgs: 2 messages, 2 services
-- +++ processing catkin package: 'velodyne_description'
-- ==> add_subdirectory(soca_octomap/gazebo_lib/velodyne_simulator/velodyne_description)
-- +++ processing catkin metapackage: 'velodyne_simulator'
-- ==> add_subdirectory(soca_octomap/gazebo_lib/velodyne_simulator/velodyne_simulator)
-- +++ processing catkin package: 'message_to_tf'
-- ==> add_subdirectory(soca_octomap/gazebo_lib/hector_localization/message_to_tf)
-- Using these message generators: gencpp;geneus;genlisp;gennodejs;genpy
-- +++ processing catkin package: 'octomap_ros'
-- ==> add_subdirectory(soca_octomap/octomap_lib/octomap_ros)
-- Using these message generators: gencpp;geneus;genlisp;gennodejs;genpy
-- +++ processing catkin package: 'octomap_server'
-- ==> add_subdirectory(soca_octomap/octomap_lib/octomap_mapping/octomap_server)
-- Using these message generators: gencpp;geneus;genlisp;gennodejs;genpy
-- +++ processing catkin package: 'soca_octomap'
-- ==> add_subdirectory(soca_octomap/soca_octomap)
-- Using these message generators: gencpp;geneus;genlisp;gennodejs;genpy
-- +++ processing catkin package: 'octomap_rviz_plugins'
-- ==> add_subdirectory(soca_octomap/octomap_lib/octomap_rviz_plugins)
-- Using these message generators: gencpp;geneus;genlisp;gennodejs;genpy
-- Found Boost: /usr/lib/x86_64-linux-gnu/cmake/Boost-1.71.0/BoostConfig.cmake (found version "1.71.0") found components: thread
-- +++ processing catkin package: 'sim_gazebo_plugins'
-- ==> add_subdirectory(soca_octomap/gazebo_lib/sim_gazebo_plugins)
-- Using these message generators: gencpp;geneus;genlisp;gennodejs;genpy
-- Found DART: /usr/include (Required is at least version "6.6") found components: dart
-- Found Boost: /usr/lib/x86_64-linux-gnu/cmake/Boost-1.71.0/BoostConfig.cmake (found suitable version "1.71.0", minimum required is "1.40.0") found components: thread system filesystem program_options regex iostreams date_time
-- Found Protobuf: /usr/lib/x86_64-linux-gnu/libprotobuf.so;-lpthread (found version "3.6.1")
-- Looking for ignition-math6 -- found version 6.9.2
-- Searching for dependencies of ignition-math6
-- Looking for OGRE...
-- Found Ogre Ghadamon (1.9.0)
-- Found OGRE: optimized;/usr/lib/x86_64-linux-gnu/libOgreMain.so;debug;/usr/lib/x86_64-linux-gnu/libOgreMain.so
-- Looking for OGRE_Paging...
-- Found OGRE_Paging: optimized;/usr/lib/x86_64-linux-gnu/libOgrePaging.so;debug;/usr/lib/x86_64-linux-gnu/libOgrePaging.so
-- Looking for OGRE_Terrain...
-- Found OGRE_Terrain: optimized;/usr/lib/x86_64-linux-gnu/libOgreTerrain.so;debug;/usr/lib/x86_64-linux-gnu/libOgreTerrain.so
-- Looking for OGRE_Property...
-- Found OGRE_Property: optimized;/usr/lib/x86_64-linux-gnu/libOgreProperty.so;debug;/usr/lib/x86_64-linux-gnu/libOgreProperty.so
-- Looking for OGRE_RTShaderSystem...
-- Found OGRE_RTShaderSystem: optimized;/usr/lib/x86_64-linux-gnu/libOgreRTShaderSystem.so;debug;/usr/lib/x86_64-linux-gnu/libOgreRTShaderSystem.so
-- Looking for OGRE_Volume...
-- Found OGRE_Volume: optimized;/usr/lib/x86_64-linux-gnu/libOgreVolume.so;debug;/usr/lib/x86_64-linux-gnu/libOgreVolume.so
-- Looking for OGRE_Overlay...
-- Found OGRE_Overlay: optimized;/usr/lib/x86_64-linux-gnu/libOgreOverlay.so;debug;/usr/lib/x86_64-linux-gnu/libOgreOverlay.so
-- Looking for ignition-math6 -- found version 6.9.2
-- Looking for ignition-transport8 -- found version 8.2.1
-- Searching for dependencies of ignition-transport8
-- Found Protobuf: /usr/lib/x86_64-linux-gnu/libprotobuf.so;-lpthread (found suitable version "3.6.1", minimum required is "3")
-- Config-file not installed for ZeroMQ -- checking for pkg-config
-- Checking for module 'libzmq >= 4'
-- Found libzmq , version 4.3.2
-- Checking for module 'uuid'
-- Found uuid, version 2.34.0
-- Looking for ignition-msgs5 -- found version 5.8.1
-- Searching for dependencies of ignition-msgs5
-- Looking for ignition-math6 -- found version 6.9.2
-- Checking for module 'tinyxml2'
-- Found tinyxml2, version 6.2.0
-- Looking for ignition-msgs5 -- found version 5.8.1
-- Looking for ignition-common3 -- found version 3.14.0
-- Searching for dependencies of ignition-common3
-- Looking for dlfcn.h - found
-- Looking for libdl - found
-- Searching for component [graphics]
-- Looking for ignition-common3-graphics -- found version 3.14.0
-- Searching for dependencies of ignition-common3-graphics
-- Looking for ignition-math6 -- found version 6.9.2
-- Looking for ignition-fuel_tools4 -- found version 4.4.0
-- Searching for dependencies of ignition-fuel_tools4
-- Checking for module 'jsoncpp'
-- Found jsoncpp, version 1.7.4
-- Checking for module 'yaml-0.1'
-- Found yaml-0.1, version 0.2.2
-- Checking for module 'libzip'
-- Found libzip, version 1.5.1
-- Looking for ignition-common3 -- found version 3.14.0
-- Looking for ignition-math6 -- found version 6.9.2
-- Looking for ignition-msgs5 -- found version 5.8.1
-- sim_gazebo_plugins: 0 messages, 1 services
CMake Warning at /opt/ros/noetic/share/catkin/cmake/catkin_package.cmake:166 (message):
catkin_package() DEPENDS on 'gazebo' but neither 'gazebo_INCLUDE_DIRS' nor
'gazebo_LIBRARIES' is defined.
Call Stack (most recent call first):
/opt/ros/noetic/share/catkin/cmake/catkin_package.cmake:102 (_catkin_package)
soca_octomap/gazebo_lib/sim_gazebo_plugins/CMakeLists.txt:54 (catkin_package)

CMake Warning at /opt/ros/noetic/share/catkin/cmake/catkin_package.cmake:166 (message):
catkin_package() DEPENDS on 'octomap' but neither 'octomap_INCLUDE_DIRS'
nor 'octomap_LIBRARIES' is defined.
Call Stack (most recent call first):
/opt/ros/noetic/share/catkin/cmake/catkin_package.cmake:102 (_catkin_package)
soca_octomap/gazebo_lib/sim_gazebo_plugins/CMakeLists.txt:54 (catkin_package)

-- +++ processing catkin package: 'velodyne_gazebo_plugins'
-- ==> add_subdirectory(soca_octomap/gazebo_lib/velodyne_simulator/velodyne_gazebo_plugins)
-- Using these message generators: gencpp;geneus;genlisp;gennodejs;genpy
-- Found DART: /usr/include (Required is at least version "6.6") found components: dart
-- Found Protobuf: /usr/lib/x86_64-linux-gnu/libprotobuf.so;-lpthread (found version "3.6.1")
-- Looking for ignition-math6 -- found version 6.9.2
-- Searching for dependencies of ignition-math6
-- Looking for OGRE...
-- Found Ogre Ghadamon (1.9.0)
-- Found OGRE: optimized;/usr/lib/x86_64-linux-gnu/libOgreMain.so;debug;/usr/lib/x86_64-linux-gnu/libOgreMain.so
-- Looking for OGRE_Paging...
-- Found OGRE_Paging: optimized;/usr/lib/x86_64-linux-gnu/libOgrePaging.so;debug;/usr/lib/x86_64-linux-gnu/libOgrePaging.so
-- Looking for OGRE_Terrain...
-- Found OGRE_Terrain: optimized;/usr/lib/x86_64-linux-gnu/libOgreTerrain.so;debug;/usr/lib/x86_64-linux-gnu/libOgreTerrain.so
-- Looking for OGRE_Property...
-- Found OGRE_Property: optimized;/usr/lib/x86_64-linux-gnu/libOgreProperty.so;debug;/usr/lib/x86_64-linux-gnu/libOgreProperty.so
-- Looking for OGRE_RTShaderSystem...
-- Found OGRE_RTShaderSystem: optimized;/usr/lib/x86_64-linux-gnu/libOgreRTShaderSystem.so;debug;/usr/lib/x86_64-linux-gnu/libOgreRTShaderSystem.so
-- Looking for OGRE_Volume...
-- Found OGRE_Volume: optimized;/usr/lib/x86_64-linux-gnu/libOgreVolume.so;debug;/usr/lib/x86_64-linux-gnu/libOgreVolume.so
-- Looking for OGRE_Overlay...
-- Found OGRE_Overlay: optimized;/usr/lib/x86_64-linux-gnu/libOgreOverlay.so;debug;/usr/lib/x86_64-linux-gnu/libOgreOverlay.so
-- Looking for ignition-math6 -- found version 6.9.2
-- Looking for ignition-transport8 -- found version 8.2.1
-- Searching for dependencies of ignition-transport8
-- Found Protobuf: /usr/lib/x86_64-linux-gnu/libprotobuf.so;-lpthread (found suitable version "3.6.1", minimum required is "3")
-- Config-file not installed for ZeroMQ -- checking for pkg-config
-- Checking for module 'libzmq >= 4'
-- Found libzmq , version 4.3.2
-- Checking for module 'uuid'
-- Found uuid, version 2.34.0
-- Looking for ignition-msgs5 -- found version 5.8.1
-- Searching for dependencies of ignition-msgs5
-- Looking for ignition-math6 -- found version 6.9.2
-- Checking for module 'tinyxml2'
-- Found tinyxml2, version 6.2.0
-- Looking for ignition-msgs5 -- found version 5.8.1
-- Looking for ignition-common3 -- found version 3.14.0
-- Searching for dependencies of ignition-common3
-- Looking for dlfcn.h - found
-- Looking for libdl - found
-- Searching for component [graphics]
-- Looking for ignition-common3-graphics -- found version 3.14.0
-- Searching for dependencies of ignition-common3-graphics
-- Looking for ignition-math6 -- found version 6.9.2
-- Looking for ignition-fuel_tools4 -- found version 4.4.0
-- Searching for dependencies of ignition-fuel_tools4
-- Checking for module 'jsoncpp'
-- Found jsoncpp, version 1.7.4
-- Checking for module 'yaml-0.1'
-- Found yaml-0.1, version 0.2.2
-- Checking for module 'libzip'
-- Found libzip, version 1.5.1
-- Looking for ignition-common3 -- found version 3.14.0
-- Looking for ignition-math6 -- found version 6.9.2
-- Looking for ignition-msgs5 -- found version 5.8.1
-- Configuring done
-- Generating done
-- Build files have been written to: /mnt/c/Users/khale/catkin_ws1/build

Running command: "make -j12 -l12" in "/mnt/c/Users/khale/catkin_ws1/build"

[ 0%] Built target std_msgs_generate_messages_cpp
[ 0%] Built target geometry_msgs_generate_messages_lisp
[ 0%] Built target std_msgs_generate_messages_py
[ 0%] Built target std_msgs_generate_messages_lisp
[ 0%] Built target geometry_msgs_generate_messages_cpp
[ 0%] Built target geometry_msgs_generate_messages_eus
[ 0%] Built target geometry_msgs_generate_messages_py
[ 0%] Built target std_msgs_generate_messages_eus
[ 0%] Built target geometry_msgs_generate_messages_nodejs
[ 0%] Built target std_msgs_generate_messages_nodejs
[ 0%] Built target tf_generate_messages_cpp
[ 0%] Built target tf2_msgs_generate_messages_nodejs
[ 0%] Built target tf2_msgs_generate_messages_lisp
[ 0%] Built target tf2_msgs_generate_messages_py
[ 0%] Built target _octomap_msgs_generate_messages_check_deps_BoundingBoxQuery
[ 0%] Built target _octomap_msgs_generate_messages_check_deps_GetOctomap
[ 0%] Built target _octomap_msgs_generate_messages_check_deps_Octomap
[ 0%] Built target actionlib_msgs_generate_messages_lisp
[ 0%] Built target tf2_msgs_generate_messages_cpp
[ 0%] Built target tf_generate_messages_eus
[ 0%] Built target rosgraph_msgs_generate_messages_eus
[ 0%] Built target actionlib_msgs_generate_messages_nodejs
[ 1%] Built target roscpp_generate_messages_nodejs
[ 2%] Built target tf_generate_messages_py
[ 2%] Built target roscpp_generate_messages_py
[ 2%] Built target message_to_tf
[ 2%] Built target actionlib_generate_messages_lisp
[ 2%] Built target actionlib_generate_messages_py
[ 2%] Built target rosgraph_msgs_generate_messages_cpp
[ 2%] Built target tf_generate_messages_lisp
[ 2%] Built target roscpp_generate_messages_lisp
[ 2%] Built target rosgraph_msgs_generate_messages_py
[ 2%] Built target sensor_msgs_generate_messages_py
[ 2%] Built target rosgraph_msgs_generate_messages_lisp
[ 2%] Built target actionlib_msgs_generate_messages_eus
[ 2%] Built target sensor_msgs_generate_messages_eus
[ 2%] Built target roscpp_generate_messages_cpp
[ 2%] Built target _octomap_msgs_generate_messages_check_deps_OctomapWithPose
[ 2%] Built target sensor_msgs_generate_messages_lisp
[ 2%] Built target sensor_msgs_generate_messages_nodejs
[ 2%] Built target tf2_msgs_generate_messages_eus
[ 2%] Built target tf_generate_messages_nodejs
[ 2%] Built target roscpp_generate_messages_eus
[ 2%] Built target actionlib_msgs_generate_messages_py
[ 2%] Built target rosgraph_msgs_generate_messages_nodejs
[ 2%] Built target actionlib_generate_messages_cpp
[ 2%] Built target sensor_msgs_generate_messages_cpp
[ 2%] Built target actionlib_generate_messages_eus
[ 2%] Built target actionlib_generate_messages_nodejs
[ 2%] Built target actionlib_msgs_generate_messages_cpp
[ 2%] Built target topic_tools_generate_messages_cpp
make[2]: *** No rule to make target '/mnt/c/Users/khale/catkin_ws1/src/soca_octomap/octomap_lib/octomap_mapping/octomap_server/cfg/OctomapServer.cfg', needed by '/mnt/c/Users/khale/catkin_ws1/devel/include/octomap_server/OctomapServerConfig.h'. Stop.
make[1]: *** [CMakeFiles/Makefile2:2915: soca_octomap/octomap_lib/octomap_mapping/octomap_server/CMakeFiles/octomap_server_gencfg.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
[ 2%] Built target nodelet_topic_tools_gencfg
[ 2%] Built target nav_msgs_generate_messages_lisp
[ 2%] Built target topic_tools_generate_messages_lisp
[ 2%] Built target nav_msgs_generate_messages_cpp
[ 2%] Built target topic_tools_generate_messages_py
[ 2%] Built target nav_msgs_generate_messages_py
[ 2%] Built target nav_msgs_generate_messages_nodejs
[ 2%] Built target topic_tools_generate_messages_eus
[ 2%] Built target nav_msgs_generate_messages_eus
[ 2%] Built target topic_tools_generate_messages_nodejs
[ 2%] Built target std_srvs_generate_messages_py
make: *** [Makefile:141: all] Error 2
Invoking "make -j12 -l12" failed

Full simulation request

May you please share the steps of doing coverage planning for each area in the map, octomap settings so that no empty spaces accurse in the place of the robot, SLAM algorithm used to generate the general map. as in this provided map_building.gif
map_building

Please help me in this meter, as it is the main requirement in my Final year project
My contact details: email: [email protected] / WhatsApp number:+97466746909

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.