GithubHelp home page GithubHelp logo

liuguitao / avp-slam-plus Goto Github PK

View Code? Open in Web Editor NEW
590.0 14.0 191.0 3.32 MB

An implementation of AVP-SLAM and some new contributions

License: GNU Affero General Public License v3.0

CMake 2.87% C++ 91.61% Python 5.46% C 0.05%
slam avp-slam slam-algorithms state-estimation autonomous-driving

avp-slam-plus's Introduction

AVP-SLAM-PLUS

AVP-SLAM-PLUS is an implementation of AVP-SLAM and some new contributions. Performance of AVP-SLAM-PLUS could be found in video(https://www.bilibili.com/video/BV11R4y137xb/)

mapping

localization

AVP-SLAM-PLUS contain a simple implementation of AVP-SLAM: Semantic Visual Mapping and Localization for Autonomous Vehicles in the Parking Lot(IROS 2020) and some new contributions.

The new contribustions are as follows: Firstly,the system provide two camera style mode which are multi RGB cameras mode and multi RGBD cameras mode; Secondly,the system provide two registration mode which are ICP mode and NDT mode. Lastly,the system provide mapping mode and localization mode, that means you can not only do SLAM,but also do localization in a prior map.

AVP-SLAM-PLUS Framework

This code is simple and is a good learning material for SLAM beginners.

Author: Liu Guitao

Email: [email protected]

1. Prerequisites

1.1 Ubuntu and ROS

Ubuntu 64-bit 18.04.ROS Melodic. ROS Installation

1.2 Clone AVP-SLAM-PLUS and Load Gazebo Model

    cd ~/catkin_ws/src
    git clone https://github.com/liuguitao/AVP-SLAM-PLUS.git
    cd AVP-SLAM-PLUS/avp_slam_plus/model/
    unzip my_ground_plane.zip -d ~/.gazebo/models/

2. Build AVP-SLAM-PLUS

    cd ~/catkin_ws
    catkin_make
    source ~/catkin_ws/devel/setup.bash

3. RUN Example

3.1 RGB Mode

save map

if you want to save map and use the map to do localization, you should ensure your config file have be correctely set. The config file is at AVP-SLAM-PLUS/avp_slam_plus/configFile.yaml

    mapSave: true
    mapSaveLocation: your map file address 

3.1.1 Mapping

    roslaunch avp_slam_plus slamRGB.launch

open a new terminal, control robot move.

    roslaunch robot_control robot_control.launch

if you firstly control robot move, you should ensure robot_control.py in AVP-SLAM-PLUS/simlate_gazebo/robot_control/ to be executable. you can do this command to let robot_control.py to be executable.

    chmod +777 robot_control.py

3.1.2 Localization

if you have do 3.1.1 and "save map", you can do localization in the prior map.

    roslaunch avp_slam_plus localizationRGB.launch

open a new terminal, control robot move

    roslaunch robot_control robot_control.launch

3.2 RGBD Mode

save map

if you want to save map and use the map to do localization, you should ensure your config file have be correctely set. The config file is at AVP-SLAM-PLUS-main/avp_slam_plus/configFile.yaml

    mapSave: true
    mapSaveLocation: your map file address 

3.2.1 Mapping

    roslaunch avp_slam_plus slamRGBD.launch

open a new terminal, control robot move

    roslaunch robot_control robot_control.launch

3.2.2 Localization

if you have do 3.2.1 and "save map", you can do localization in the prior map.

    roslaunch avp_slam_plus localizationRGBD.launch

open a new terminal, control robot move

    roslaunch robot_control robot_control.launch

4.Acknowledgements

Thanks for AVP_SLAM(Tong Qin, Tongqing Chen, Yilun Chen, and Qing Su:Semantic Visual Mapping and Localization for Autonomous Vehicles in the Parking Lot),

Thanks for TurtleZhong(https://github.com/TurtleZhong/AVP-SLAM-SIM), whose simulated environment help me a lot.

Thanks for huchunxu(https://github.com/huchunxu/ros_exploring), whose simulated robot model help me a lot.

avp-slam-plus's People

Contributors

liuguitao avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

avp-slam-plus's Issues

你好,我在noetic上跑通了代码,roslaunch后没有显示小车的模型,相机的topic也没有数据,但是没有报错

log如下:
roslaunch avp_slam_plus slamRGB.launch
... logging to /root/.ros/log/4fbde08a-2433-11ed-b991-d85ed32f568d/roslaunch-shenjiacheng-Z590-GAMING-X-1622957.log
Checking log directory for disk usage. This may take a while.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

xacro: in-order processing became default in ROS Melodic. You can drop the option.
started roslaunch server http://shenjiacheng-Z590-GAMING-X:46725/

SUMMARY

PARAMETERS

  • /IcpEuclideanFitnessEpsilon: 0.001
  • /IcpMaxCorrespondenceDistance: 20
  • /IcpMaximumIterations: 100
  • /IcpTransformationEpsilon: 1e-10
  • /InvalidColorThresh: 60
  • /K: [337.208441096804...
  • /R0: [0, 1.0, 0, 0.0, ...
  • /T0: [0, 0.56, 0.0]
  • /cameraRealiableDis: 8
  • /closePointThresh: 0.1
  • /farPointThresh: 20
  • /gazebo/enable_ros_network: True
  • /icpFitnessScoreThresh: 0.3
  • /imageColIncrease: 4
  • /imageRowIncrease: 2
  • /mapSave: True
  • /mapSaveLocation: /mnt/sjc_workspac...
  • /ndtFitnessScoreThresh: 0.3
  • /ndtResolution: 1.0
  • /ndtTransformationEpsilon: 0.01
  • /odomKeyFramDisThresh: 1.0
  • /pointCloudLeafSize: 0.1
  • /robot_description: <?xml version="1....
  • /robot_state_publisher/publish_frequency: 50.0
  • /rosdistro: noetic
  • /rosversion: 1.15.14
  • /rotateDeg1: -1.0471975511965976
  • /rotateDeg2: -2.0943951023931953
  • /rotateDeg3: -3.141592653589793
  • /rotateDeg4: 2.0943951023931953
  • /rotateDeg5: 1.0471975511965976
  • /skyColor: 178
  • /useICP: False
  • /useNDT: True
  • /use_sim_time: True

NODES
/
gazebo (gazebo_ros/gzserver)
gazebo_gui (gazebo_ros/gzclient)
joint_state_publisher (joint_state_publisher/joint_state_publisher)
mapping (avp_slam_plus/mapping)
pointCloudFromRGB (avp_slam_plus/pointCloudFromRGB)
robot_state_publisher (robot_state_publisher/robot_state_publisher)
rviz (rviz/rviz)
urdf_spawner (gazebo_ros/spawn_model)

auto-starting new master
process[master]: started with pid [1622974]
ROS_MASTER_URI=http://localhost:11311

setting /run_id to 4fbde08a-2433-11ed-b991-d85ed32f568d
process[rosout-1]: started with pid [1622984]
started core service [/rosout]
process[gazebo-2]: started with pid [1622991]
process[gazebo_gui-3]: started with pid [1622995]
process[joint_state_publisher-4]: started with pid [1623000]
process[robot_state_publisher-5]: started with pid [1623002]
process[urdf_spawner-6]: started with pid [1623003]
process[rviz-7]: started with pid [1623004]
process[pointCloudFromRGB-8]: started with pid [1623005]
process[mapping-9]: started with pid [1623011]
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'
[INFO] [1661403832.860590, 0.000000]: Loading model XML from ros parameter robot_description
[INFO] [1661403832.867019, 0.000000]: Waiting for service /gazebo/spawn_urdf_model
[ INFO] [1661403832.923459101]: Finished loading Gazebo ROS API Plugin.
[ INFO] [1661403832.924257138]: waitForService: Service [/gazebo/set_physics_properties] has not been advertised, waiting...
[ INFO] [1661403832.991150598]: Finished loading Gazebo ROS API Plugin.
[ INFO] [1661403832.992010511]: waitForService: Service [/gazebo_gui/set_physics_properties] has not been advertised, waiting...
[ INFO] [1661403834.047507709, 1825.804000000]: waitForService: Service [/gazebo/set_physics_properties] is now available.
[INFO] [1661403834.072742, 0.000000]: Calling service /gazebo/spawn_urdf_model
[ INFO] [1661403834.110467642, 1825.865000000]: Physics dynamic reconfigure ready.
[INFO] [1661403834.239540, 1825.971000]: Spawn status: SpawnModel: Successfully spawned entity
[ INFO] [1661403834.255844258, 1825.971000000]: Starting plugin DiffDrive(ns = //)
[ INFO] [1661403834.255958825, 1825.971000000]: DiffDrive(ns = //): = Debug
[ INFO] [1661403834.257063601, 1825.971000000]: DiffDrive(ns = //): <tf_prefix> =
[DEBUG] [1661403834.257130804, 1825.971000000]: DiffDrive(ns = //): = cmd_vel
[DEBUG] [1661403834.257150965, 1825.971000000]: DiffDrive(ns = //): = odom
[DEBUG] [1661403834.257164804, 1825.971000000]: DiffDrive(ns = //): = odom
[DEBUG] [1661403834.257178969, 1825.971000000]: DiffDrive(ns = //): = base_footprint
[DEBUG] [1661403834.257223146, 1825.971000000]: DiffDrive(ns = //): = true
[ WARN] [1661403834.257243125, 1825.971000000]: DiffDrive(ns = //): missing default is true
[DEBUG] [1661403834.257265865, 1825.971000000]: DiffDrive(ns = //): = true
[DEBUG] [1661403834.257326302, 1825.971000000]: DiffDrive(ns = //): = 0.59999999999999998
[DEBUG] [1661403834.257349700, 1825.971000000]: DiffDrive(ns = //): = 0.12
[DEBUG] [1661403834.257368468, 1825.971000000]: DiffDrive(ns = //): = 1.8
[DEBUG] [1661403834.257386434, 1825.971000000]: DiffDrive(ns = //): = 30
[DEBUG] [1661403834.257402254, 1825.971000000]: DiffDrive(ns = //): = 100
[ WARN] [1661403834.257451387, 1825.971000000]: DiffDrive(ns = //): missing default is 1
[DEBUG] [1661403834.257488104, 1825.971000000]: DiffDrive(ns = //): = base_to_wheel_left_joint
[urdf_spawner-6] process has finished cleanly
log file: /root/.ros/log/4fbde08a-2433-11ed-b991-d85ed32f568d/urdf_spawner-6*.log

生成的地图,pcd文件不对

2022-06-23 20-30-45屏幕截图
请问是哪里的参数配置没有打开吗?为何我跑一遍程序后在data里生成的地图总是一个多边形?
以下是调试信息。
PARAMETERS

  • /IcpEuclideanFitnessEpsilon: 0.001
  • /IcpMaxCorrespondenceDistance: 20
  • /IcpMaximumIterations: 100
  • /IcpTransformationEpsilon: 1e-10
  • /InvalidColorThresh: 60
  • /K: [337.208441096804...
  • /R0: [0, 1.0, 0, 0.0, ...
  • /T0: [0, 0.56, 0.0]
  • /cameraRealiableDis: 8
  • /closePointThresh: 0.1
  • /farPointThresh: 20
  • /gazebo/enable_ros_network: True
  • /icpFitnessScoreThresh: 0.3
  • /imageColIncrease: 4
  • /imageRowIncrease: 2
  • /mapSave: True
  • /mapSaveLocation: /home/wangjinkui/...
  • /ndtFitnessScoreThresh: 0.3
  • /ndtResolution: 1.0
  • /ndtTransformationEpsilon: 0.01
  • /odomKeyFramDisThresh: 1.0
  • /pointCloudLeafSize: 0.1
  • /robot_description: <?xml version="1....
  • /robot_state_publisher/publish_frequency: 50.0
  • /rosdistro: melodic
  • /rosversion: 1.14.11
  • /rotateDeg1: -1.0471975512
  • /rotateDeg2: -2.09439510239
  • /rotateDeg3: -3.14159265359
  • /rotateDeg4: 2.09439510239
  • /rotateDeg5: 1.0471975512
  • /skyColor: 178
  • /useICP: False
  • /useNDT: True
  • /use_sim_time: True

NODES
/
gazebo (gazebo_ros/gzserver)
gazebo_gui (gazebo_ros/gzclient)
joint_state_publisher (joint_state_publisher/joint_state_publisher)
mapping (avp_slam_plus/mapping)
pointCloudFromRGB (avp_slam_plus/pointCloudFromRGB)
robot_state_publisher (robot_state_publisher/robot_state_publisher)
rviz (rviz/rviz)
urdf_spawner (gazebo_ros/spawn_model)

auto-starting new master
process[master]: started with pid [10793]
ROS_MASTER_URI=http://localhost:11311

setting /run_id to 8810229c-f2ef-11ec-9cb9-b46bfc7f4fea
process[rosout-1]: started with pid [10811]
started core service [/rosout]
process[gazebo-2]: started with pid [10818]
process[gazebo_gui-3]: started with pid [10823]
process[joint_state_publisher-4]: started with pid [10828]
process[robot_state_publisher-5]: started with pid [10829]
process[urdf_spawner-6]: started with pid [10830]
process[rviz-7]: started with pid [10835]
process[pointCloudFromRGB-8]: started with pid [10837]
process[mapping-9]: started with pid [10839]
[ INFO] [1655987115.746995464]: Finished loading Gazebo ROS API Plugin.
[ INFO] [1655987115.750255709]: waitForService: Service [/gazebo/set_physics_properties] has not been advertised, waiting...
[ INFO] [1655987115.833215969]: Finished loading Gazebo ROS API Plugin.
[ INFO] [1655987115.836173538]: waitForService: Service [/gazebo_gui/set_physics_properties] has not been advertised, waiting...
[INFO] [1655987116.230643, 0.000000]: Loading model XML from ros parameter robot_description
[INFO] [1655987116.254208, 0.000000]: Waiting for service /gazebo/spawn_urdf_model
[INFO] [1655987116.260347, 0.000000]: Calling service /gazebo/spawn_urdf_model
[ INFO] [1655987116.269821114]: waitForService: Service [/gazebo/set_physics_properties] is now available.
[INFO] [1655987116.291300, 1825.799000]: Spawn status: SpawnModel: Entity pushed to spawn queue, but spawn service timed out waiting for entity to appear in simulation under the name robot

运行有2个错误

错误1:
spawnmodel failure - model name already exist
错误2:
[gazebo-1] process has died
这2个错误该怎么处理啊
20221101-185242

编译无法生成可执行文件

你好,我编译时没有生成ros node,请问可以帮忙看一下问题出在哪里吗?谢谢了!
catkin_make执行,发现了各个packages,但是编译的时候好像没有编译AVP-SLAM-PLUS目录下的,编译过程中也没有报错,但是最终生成的可执行文件也没有AVP-SLAM-PLUS相关的。相关的过程可以参考下面的截图:
image
image
image
image

image

build error

when I follow the installization guilds, I met this problem:
"Could NOT find gazebo_ros_control (missing: gazebo_ros_control_DIR)
Could not find the required component 'gazebo_ros_control'. The following CMake error indicates that you either need to install the package with the same name or change your environment so that it can be found.
CMake Error at /opt/ros/kinetic/share/catkin/cmake/catkinConfig.cmake:83 (find_package):
Could not find a package configuration file provided by
"gazebo_ros_control" with any of the following names:
gazebo_ros_controlConfig.cmake
gazebo_ros_control-config.cmake "

could you please help me fix this problem?

roslaunch avp_slam_plus slamRGB.launch 报错了

process[gazebo_gui-3]: started with pid [16016]
process[joint_state_publisher-4]: started with pid [16024]
process[robot_state_publisher-5]: started with pid [16029]
process[urdf_spawner-6]: started with pid [16030]
process[rviz-7]: started with pid [16031]
process[pointCloudFromRGB-8]: started with pid [16076]
process[mapping-9]: started with pid [16124]
[ INFO] [1650882330.767947882]: Finished loading Gazebo ROS API Plugin.
[ INFO] [1650882330.769995199]: waitForService: Service [/gazebo_gui/set_physics_properties] has not been advertised, waiting...
[ INFO] [1650882330.801084214]: Finished loading Gazebo ROS API Plugin.
[ INFO] [1650882330.802637633]: waitForService: Service [/gazebo/set_physics_properties] has not been advertised, waiting...
[INFO] [1650882331.050980, 0.000000]: Loading model XML from ros parameter robot_description
[INFO] [1650882331.058136, 0.000000]: Waiting for service /gazebo/spawn_urdf_model
X Error of failed request:  GLXBadDrawable
  Major opcode of failed request:  146 (GLX)
  Minor opcode of failed request:  5 (X_GLXMakeCurrent)
  Serial number of failed request:  28
  Current serial number in output stream:  28
Segmentation fault
[gazebo_gui-3] process has died [pid 16016, exit code 139, cmd /opt/ros/melodic/lib/gazebo_ros/gzclient __name:=gazebo_gui __log:=/home//.ros/log/06a5c356-c482-11ec-877d-00155ddb3f16/gazebo_gui-3.log].
log file: /home//.ros/log/06a5c356-c482-11ec-877d-00155ddb3f16/gazebo_gui-3*.log
terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::lock_error> >'
  what():  boost: mutex lock failed in pthread_mutex_lock: Invalid argument
Aborted
[gazebo-2] process has died [pid 16014, exit code 134, cmd /opt/ros/melodic/lib/gazebo_ros/gzserver -e ode //catkin_ws/src/AVP-SLAM-PLUS/simlate_gazebo/simulate_enviroment/worlds/newAVP.world __name:=gazebo __log:=/home//.ros/log/06a5c356-c482-11ec-877d-00155ddb3f16/gazebo-2.log].
log file: /home//.ros/log/06a5c356-c482-11ec-877d-00155ddb3f16/gazebo-2*.log
================================================================================REQUIRED process [rviz-7] has died!
process has died [pid 16031, exit code -11, cmd /opt/ros/melodic/lib/rviz/rviz -d //catkin_ws/src/AVP-SLAM-PLUS/simlate_gazebo/simulate_enviroment/config/simulate_environment.rviz __name:=rviz __log:=/home//.ros/log/06a5c356-c482-11ec-877d-00155ddb3f16/rviz-7.log].
log file: /home//.ros/log/06a5c356-c482-11ec-877d-00155ddb3f16/rviz-7*.log
Initiating shutdown!
================================================================================
[mapping-9] killing on exit
[rviz-7] killing on exit
[pointCloudFromRGB-8] killing on exit

Full Functionality Code Inquiry

Hi @liuguitao ,

I’m so glad that I found your repo. I have read the codes inside your repo and I am interested in running your full functional code including: loop detection algorithm, pose graph, and kalman filter. If you don’t mind, perhaps you can share your full map that was used to get the result that you put inside your AVP-SLAM paper ? I would be very happy if you could share your code.

I hope to hear from you soon. Thanks

ros noetic下报错

在ros noetic下跑,报这个错误
Failed to build tree: parent link [base_link] of joint [camera1_joint] not found. This is not valid according to the URDF spec. Every link you refer to from a joint needs to be explicitly defined in the robot description. To fix this problem you can either remove this joint [camera1_joint] from your urdf file, or add "" to your urdf file.

Robot could not move

Hello Dear, I launched slamRGB.lauch and robot_control, the simulated parking lot shows, and the point cloud window, but when I try to increase the speed or move the car, the speed changes in the terminal but the robot does not move in the simulated parking lot.

[ERROR] : Unsupported Gazebo ImageFormat

Hello, Thanks for your open source code.
I run roslaunch avp_slam_plus slamRGB.launch on ubuntu20.04.
I met the error like this. could you help me ?
Thanks a lot.

setting /run_id to ccdf6336-ec52-11ec-a227-6f46fcf89108
process[rosout-1]: started with pid [99339]
started core service [/rosout]
process[gazebo-2]: started with pid [99354]
process[gazebo_gui-3]: started with pid [99359]
process[joint_state_publisher-4]: started with pid [99364]
process[robot_state_publisher-5]: started with pid [99365]
process[urdf_spawner-6]: started with pid [99368]
process[rviz-7]: started with pid [99373]
process[pointCloudFromRGB-8]: started with pid [99377]
[ WARN] [1655260093.366230375]: link 'base_link' material 'red' undefined.
process[mapping-9]: started with pid [99380]
[ WARN] [1655260093.370139822]: link 'base_link' material 'red' undefined.
[ WARN] [1655260093.373411814]: link 'xMark_link' material 'white' undefined.
[ WARN] [1655260093.373475971]: link 'xMark_link' material 'white' undefined.
[ WARN] [1655260093.373570737]: link 'yMark_link' material 'black' undefined.
[ WARN] [1655260093.373623964]: link 'yMark_link' material 'black' undefined.

[INFO] [1655260094.332368, 0.000000]: Loading model XML from ros parameter robot_description
[INFO] [1655260094.351609, 0.000000]: Waiting for service /gazebo/spawn_urdf_model
[ INFO] [1655260095.000981028]: Finished loading Gazebo ROS API Plugin.
[ INFO] [1655260095.004058315]: waitForService: Service [/gazebo/set_physics_properties] has not been advertised, waiting...
[ INFO] [1655260095.346666465]: Finished loading Gazebo ROS API Plugin.
[ INFO] [1655260095.349617059]: waitForService: Service [/gazebo_gui/set_physics_properties] has not been advertised, waiting...
[ INFO] [1655260096.282615681]: waitForService: Service [/gazebo/set_physics_properties] is now available.
[ INFO] [1655260096.447414737, 1825.838000000]: Physics dynamic reconfigure ready.
[INFO] [1655260096.479189, 0.000000]: Calling service /gazebo/spawn_urdf_model
[ INFO] [1655260097.419402014, 1825.986000000]: Camera Plugin: Using the 'robotNamespace' param: '/'
[ INFO] [1655260097.426992448, 1825.986000000]: Camera Plugin (ns = /) <tf_prefix_>, set to ""
[ INFO] [1655260097.436112553, 1825.986000000]: Camera Plugin: Using the 'robotNamespace' param: '/'
[ INFO] [1655260097.445444441, 1825.986000000]: Camera Plugin (ns = /) <tf_prefix_>, set to ""
[INFO] [1655260097.484072, 1825.986000]: Spawn status: SpawnModel: Successfully spawned entity

**[ERROR] [1655260097.658475486, 1825.986000000]: Unsupported Gazebo ImageFormat

[ERROR] [1655260097.660442247, 1825.986000000]: Unsupported Gazebo ImageFormat**

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.