Coder Social home page Coder Social logo

ros-planning / moveit_tutorials Goto Github PK

View Code? Open in Web Editor NEW
452.0 32.0 692.0 76 MB

A sphinx-based centralized documentation repo for MoveIt

Home Page: https://moveit.github.io/moveit_tutorials/

License: BSD 3-Clause "New" or "Revised" License

CMake 5.79% Python 36.21% CSS 3.93% HTML 39.16% JavaScript 10.43% Shell 4.47%

moveit_tutorials's Introduction

MoveIt Tutorials

MoveIt 1 Live tutorials

These are the tutorials for MoveIt 1, for MoveIt 2 see MoveIt 2 Tutorials

This is the primary documentation for the MoveIt project. We strongly encourage you to help improve MoveIt's documentation. Please consider reading the guidelines below for writing the best documentation and tutorials. However, if you are uncomfortable with any of the approaches, simply adding documentation text to your pull requests is better than nothing.

These tutorials use the reStructuredText format commonly used in the Sphinx "Python Documentation Generator". This unfortunately differs from the common Markdown format, but its advantage is that it supports embedding code directly from source files for inline code tutorials.

All content in this repository is open source and released under the BSD License v3. Each individual source code file should contain a copy of the license.

This repository is currently built automatically by two systems. Github Actions builds the documentation for Noetic, and ROS Build Farm builds the documentation for older versions:

Versions

  • indigo-devel usage is discouraged
  • kinetic-devel stable
  • melodic-devel stable
  • master latest, changes should target this branch

Build Locally

If you want to test the tutorials by generating the HTML pages locally on your machine, you can use the build_locally script. Run in the root of the moveit_tutorials package:

export ROS_DISTRO=kinetic # 16.04
export ROS_DISTRO=melodic # 18.04
export ROS_DISTRO=noetic  # 20.04

source /opt/ros/$ROS_DISTRO/setup.bash
./build_locally.sh

The local website <LOCAL_PACKAGE_PATH>/build/html/index.html should automatically open in your web browser.

ROS Build Farm Deployment

For deploying documentation changes to the web, Section 3 of the rosdoc_lite wiki says that "rosdoc_lite is automatically run for packages in repositories that have rosinstall files listed in the rosdistro repository." This is done about once every 24 hours, overnight.

Contributing

We rely on the community to keep these tutorials up-to-date and bug-free. If you find an issue with the tutorials please open an issue on GitHub or open a PR with the proposed changes.

Formatting and Style

Code Formatting

  • These tutorials use the same style guidelines as the MoveIt project. When modifying or adding to these tutorials, it is required that code is auto-formatted using clang-format. To check and apply the style guidelines we use pre-commit.
  • Tutorials should exemplify best coding practices. If a contribution wouldn't pass review in the MoveIt project, then it shouldn't pass review in the tutorials.
  • Relevant code should be included and explained using the .. tutorial-formatter:: tag.
  • Irrelevant code should be excluded from the generated HTML using the BEGIN_TUTORIAL, END_TUTORIAL, BEGIN_SUB_TUTORIAL, and END_SUB_TUTORIAL tags.
  • Whenever possible, links should be created using the extlinks dictionary defined in conf.py.
  • All demo code should be runnable from within the moveit_tutorials package.
  • Python code should be run using rosrun.

Style

  • Each tutorial should be focused on teaching the user one feature or interface within MoveIt.
  • Tutorials should flow from show to tell with videos and demos at the beginning followed by explanations.
  • New tutorials should match the formatting, style, and flow of existing tutorials whenever possible.

pre-commit

pre-commit is a tool that is used in moveit_tutorials to check and apply style guidelines automatically. To install pre-commit into your system:

pip3 install pre-commit

In your catkin workspace, under themoveit_tutorials directory you can install the git hooks like this:

cd $CATKIN_WS/src/moveit_tutorials && pre-commit install

With this pre-commit will automatically run and check a list of styling including clang-format, end of files, and trailing whitespaces whenever you run git commit. To run a pre-commit at any time other than git commit you can use the following command:

cd $CATKIN_WS/src/moveit_tutorials && pre-commit run -a

Directory Structure

  • Each tutorial should live in its own subdirectory within the ./doc/ <> directory.
  • Add your tutorial to index.rst in the root directory.
  • Tutorials should use the following directory structure omitting unnecessary files and subdirectories:
moveit_tutorials/doc/
└── <tutorial_name>/
    ├── <tutorial_name>_tutorial.rst
    ├── CMakeLists.txt
    ├── package.xml
    ├── setup.py
    ├── images/
    │   └── <tutorial_name>_<image_description>.png
    ├── include/
    │   └── <tutorial_name>/
    │       └── <include_header>.h                      # Any custom C++ library header files
    ├── launch/
    │   └── <tutorial_name>_tutorial.launch
    ├── src/
    │   ├── <tutorial_name>_tutorial.cpp                # Main C++ executable
    │   ├── <include_source>.cpp                        # Custom C++ library source files
    │   └── <tutorial_name>/
    │       ├── __init__.py
    │       ├── <tutorial_name>_tutorial.py             # Main Python executable
    │       └── <python_library>.py                     # Custom Python libraries
    └── test/                                           # Ideally tutorials have their own integration tests
        ├── <tutorial_name>_tutorial.test               # Launch file for tests
        ├── <tutorial_name>_tutorial_test.py            # Python tests for tutorial
        └── <tutorial_name>_tutorial_test.cpp           # C++ tests for tutorial

Including Images and Videos

Images

The standard way to include an image in reStructuredText is

.. image:: filename.png
   :width: 700px

This assumes that filename.png is in the same folder as the source .rst file. Images linked in this way will automatically be copied to the appropriate folder in the build.

External Documentation

Do not include animated gifs as the file format leads to very large files. Use a video format like webm and see the section on the local video below.

YouTube and other External Video

You can embed video with raw HTML, like in this example from the Pick and Place Tutorial.

.. raw:: html

    <div style="position: relative; padding-bottom: 5%; height: 0; overflow: hidden; max-width: 100%; height: auto;">
        <iframe width="700px" height="400px" src="https://www.youtube.com/embed/QBJPxx_63Bs?rel=0" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>
    </div>

This includes Youtube's suggested embed code.

Local Video

To embed a video that is included in this repository, you also will use raw HTML, like this example from the Quickstart in RViz tutorial.

.. raw:: html

    <video width="700px" nocontrols="true" autoplay="true" loop="true">
        <source src="../../_static/rviz_joints_nullspace.webm" type="video/webm">
        The joints moving while the end effector stays still
    </video>

Note that the video file is in the _static folder instead of the same folder.

External Documentation on <video> tag

moveit_tutorials's People

Contributors

0ldham avatar 130s avatar alaflaquiere avatar andyze avatar brycestevenwilley avatar davetcoleman avatar dlu avatar felixvd avatar henningkayser avatar j-petit avatar jafarabdi avatar jschleicher avatar jwhendy avatar lorepieri8 avatar mamoll avatar maxgittelman avatar methyldragon avatar mlautman avatar nbbrooks avatar raghavendersahdev avatar rhaschke avatar scchow avatar seanyen avatar simongoldstein avatar simonschmeisser avatar sjahr avatar tnaka avatar tylerjw avatar uwesterh avatar v4hn 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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

moveit_tutorials's Issues

catkin make hang on 92% on turtle bot 3 burger

when run catkin make on turtle bot 3 burger robots catkin make stops and hangs , it arrive to
"Building CXX object turtlebot3/turtlebot3_bringup/CMakeFiles/turtlebot3_diagnostics.dir/src/turtlebot3_diagnostics.cpp.o "

Clarifications for movegroup's go, plan, and compute_cartesian_path methods

I think this might have some crossover with #75, but is more specific. Nothing within the tutorial is wrong, it's actually very concise and easy to follow. A few extra lines could clarify the uses of the go, plan and compute_cartesian_path methods.

The tutorial covers using movegroup.go, movegroup.plan methods. The first part details how to compute a plan:

plan1 = group.plan()

And then a little later it says that the go() function can be used to move the actual robot to the pose goal:


  ## Moving to a pose goal
  ## ^^^^^^^^^^^^^^^^^^^^^
  ##
  ## Moving to a pose goal is similar to the step above
  ## except we now use the go() function. Note that
  ## the pose goal we had set earlier is still active 
  ## and so the robot will try to move to that goal. We will
  ## not use that function in this tutorial since it is 
  ## a blocking function and requires a controller to be active
  ## and report success on execution of a trajectory.

  # Uncomment below line when working with a real robot
  # group.go(wait=True)

Since the previous step of the tutorial covered how to compute a motion plan, one might expect that go() just executes this plan. Could we add one sentence to say that execute(plan1) can be used to make the robot follow plan1 but go() can be used to compute and follow a new plan?

Later in the tutorial the Cartesian path api is covered:

  (plan3, fraction) = group.compute_cartesian_path(
                               waypoints,   # waypoints to follow
                               0.01,        # eef_step
                               0.0) # jump_threshold

There is no code here to show how how we can make the robot follow the Cartesian path. Could we add one line here to state that group.execute(plan3) should be used to make the robot follow the computed Cartesian path?

inconsistent namespace redefinitions for xmlns:xacro and RvizVisualToolsGui could not be loaded

Hello,
I recently installed this package. I'm using ROS indigo. When I launch demo.launch under pr2_tutorials or move_group_interface.launch, they all work. I can plan paths etc but I do get the following errors:
1.

inconsistent namespace redefinitions for xmlns:xacro:
   old: http://playerstage.sourceforge.net/gazebo/xmlschema/#interface
   new: http://ros.org/wiki/xacro (/opt/ros/indigo/share/pr2_description/urdf/torso_v0/torso.urdf.xacro)

`` PluginlibFactory: The plugin for class 'rviz_visual_tools/KeyTool' failed to load. Error: According to the loaded plugin descriptions the class rviz_visual_tools/KeyTool with base class type rviz::Tool does not exist. Declared types are rviz/FocusCamera rviz/Interact rviz/Measure rviz/MoveCamera rviz/PublishPoint rviz/Select rviz/SetGoal rviz/SetInitialPose rviz_plugin_tutorials/PlantFlag"

PluginlibFactory: The plugin for class 'rviz_visual_tools/RvizVisualToolsGui' failed to load. Error: According to the loaded plugin descriptions the class rviz_visual_tools/RvizVisualToolsGui with base class type rviz::Panel does not exist. Declared types are rviz_plugin_tutorials/Teleop

image

I'm very new to ROS and MoveIt!, and I'd like to know what caused these problems. catkin_make doesn't return any errors and everything is compiled fine.

I also made sure that my package is pointing to the right branch. This is the output of git branch -a:
image

Error in fcl header files when compiling example code

I followed the instructions in the move group interface tutorial and got this error after running the catkin build command.

As the problem appears to be in the headers of the fcl library, I tried installing a newer version manually:
sudo apt-get install libfcl-0.5-dev. This did not solve the problem.

I also tried building fcl from source in the same workspace as explained here. Still no success.

In addition, I tried it all over again after running sudo apt-get update and sudo apt-get upgrade.

I'm on Ubuntu 16.04 LTS using ROS Kinetic.

Any pointer to what I'm doing wrong, or what I could try differently?

PR workflow suggestion iterative merges or similar?

This is certainly bigger than this repo... per the comment made by @davetcoleman in #94 , it seems that Travic CI will fail if files don't yet exist on the current MoveIt! site. Thus, if a file is moved or added, he has to add the file (with the PR merge) to find out if the build will actually succeed.

I'm about an hour in this morning hunting around for various build failure problems. Some might be the result of merging actual build failing PRs (e.g. broken links in #101), but some may very well may be because a previous commit couldn't be tested until merged. Once the surface failure (e.g. missing file) was fixed, some other issue can appear (like extra spaces in a bullet list, like in #92).

These are some possible solutions:

  • whatever continues to cause a build failure in HEAD after merging is fixed asap
  • alternatively, a failed merge is reverted once the true failure is known and re-merged only once the entire problem is solved
  • update the build test somehow (as Dave suggested in #94)
  • some sort of "iterative" merging where the surface failure is fixed (like manually adding a missing .png file) and then re-triggering the build to see if it continues

As for build system improvements:

  • I see a lot of "warning treated as error: blah" messages; perhaps non-fatal errors should be spit out as warnings without stopping the build so users can see all of the errors. This way, if they get one that's inherent in HEAD, they can still see anything related to their actual commit. Right now, if I get an error in some file I didn't change, I'm blind to any issues with my work.
  • logging errors per file? Not sure if that would be helpful, but sometimes a build fails for some reason, then another merge happens and the reason changes. If it's been long enough (as recently, when I came back from a 10 day vacation), I don't remember the original cause.
  • also Dave's suggestion, make the test build against what the site would be if the merge were conducted vs. what the site currently is.

I have no experience with Travis CI, but if someone points me in the right direction, I can take a look. I found .travis.yml, but I don't understand how it's pointing to the "current site" vs. what is generated by the resultant local ./build directory.

Thanks for taking a look!

Overall documentation structure

Currently all pages start with a detailed discussion of the source code after only a very short introduction. The link to the whole file (section "The entire code") and the how to run sections are provided only at the end of the document which is quite confusing when reading the document the first time.

I suggest to move the "The entire code" section to the top of the file (after the introduction) and to insert a link to the "Running the code" section in the introduction or the "The entire code" section.

package failing with kinetic and ubuntu 16.04

I tried to build the package with the following commands which lead to errors and unsuccessful build with ros kinetic and ubuntu 16.04
cd ~/catkin_ws/src
git clone https://github.com/ros-planning/moveit_tutorials.git
cd ..
catkin build

error gist

build fails on Indigo and Ubuntu 14.04

I am getting build errors with a fresh copy of the tutorial package. I'm running Indigo on Ubuntu 14.04 and made sure my system is up to date.

cd ~/moveitEx/src
catkin_init_workspace
git clone https://github.com/ros-planning/moveit_tutorials.git
cd ..
catkin_make

Build Error...
/home/marq/moveitEx/src/moveit_tutorials/doc/pr2_tutorials/pick_place/src/pick_place_tutorial.cpp:41:62: fatal error: moveit/move_group_interface/move_group_interface.h: No such file or directory #include <moveit/move_group_interface/move_group_interface.h>

I get the same error for the pick place tutorial.

I tried adding add_compile_options(-std=c++11) to the top-level CMakeLists.txt but I still get the same error. #23

Changing planner's time limit

Hey, First time writing here so I apologize if it's not 'by the rules'.

I'm using Moveit (python) to control a simulated Kuka IIWA 7 DOF robot in gazebo. Everything is working without any errors. When I'm sending a valid pose to Moveit, the planner finds a solution after 0.1-0.2 seconds. Problem is, each time I'm sending an invalid pose (out of reach for all kinds of reasons), the planner is trying to find a solution and stops right after he crosses 5 seconds.

My question is how can I change this 5-seconds-time-limit parameter to a much smaller number?

I'm trying to train an agent in reinforcement learning, so each time he gives an invalid pose it takes 5 seconds to realize that.

The planner I'm using (by default) is RRTConnect and I've installed the IKFast plugin.
Here's the relevant information from the terminal (right after the python command group.plan is executed):

[ INFO] [1516732871.929298552, 2085.706000000]: Planning request received for MoveGroup action. Forwarding to planning pipeline.
Debug:   Starting goal sampling thread
Debug:   Waiting for space information to be set up before the sampling thread can begin computation...
[ INFO] [1516732871.929612194, 2085.706000000]: Planner configuration 'manipulator' will use planner 'geometric::RRTConnect'. Additional configuration parameters will be set when the planner is constructed.
Debug:   The value of parameter 'range' is now: '0'
Debug:   RRTConnect: Planner range detected to be 7.197738
Info:    RRTConnect: Starting planning with 1 states already in datastructure
Debug:   RRTConnect: Waiting for goal region samples ...
Debug:   Beginning sampling thread computation
Error:   RRTConnect: Unable to sample any valid states for goal tree
         at line 215 in /tmp/binarydeb/ros-kinetic-ompl-1.2.1/src/ompl/geometric/planners/rrt/src/RRTConnect.cpp
Info:    RRTConnect: Created 1 states (1 start + 0 goal)
Info:    No solution found after 5.009300 seconds
Debug:   Attempting to stop goal sampling thread...
Debug:   Stopped goal sampling thread after 0 sampling attempts
[ INFO] [1516732876.945948238, 2090.718000000]: Unable to solve the planning problem

Any ideas will be much appreciated!

Help understanding general state of MoveIt and rospy

Being new to ROS and going through tutorials (with python), I often find myself not knowing if some lesson is C++ specific, if it's just undocumented in python (but exists), and if the latter what the rospy analog is.

Having finished (and quite enjoyed) the Move Group Python tutorial , I looked to the tutorials on Kinematic Models and Planning Senes, finding they were only in C++.

I thought about trying to translate them based on my knowledge, but sort of fizzled out as I don't find much when I google things like "getJointModelGroup ROS python rospy" or similar.

Could someone help explain where things are at with rospy? Should I just assume that anything mentioned for C++ (with respect to MoveIt), exists in moveit_commander?

For a couple of specific examples:

  • is getJointModelGroup equal to get_current_joint_values?

  • I don't see anything in the planning_scene_interface that corresponds to checkSelfCollision mentioned here.

  • generally speaking, I'm at the point where I'd like to take my knowledge and start doing things with a UR arm. What is the next step for this Padawan, such as complex motion paths/trajectories, pick and place, etc.? Is there some other resource or library that folks graduate to for more 'real world' tasks?

Lastly, if there are rospy equivalents to these sorts of things, I'd be happy to contribute tutorials for you. I'm going through it anyway and tend to like these sorts of things. Point me in the right direction and you'll get some work out of me!

Moveit for baxter

Hi, I recently started using moveit for a experiment setup with Baxter robot in simulation. I set up config files for baxter following your PR2 example. It successfully created it and I am able to plan using RVIZ (using the interface 'Plan-execute for random feasible links'). Though the arm moves, the RVIZ terminal window gets accumulated with following errors.

[ERROR] [1474740644.022261902, 6597.414000000]: Joint 'fl_caster_l_wheel_joint' not found in model 'baxter'
[ERROR] [1474740644.022289410, 6597.414000000]: Joint 'fl_caster_r_wheel_joint' not found in model 'baxter'
[ERROR] [1474740644.022321494, 6597.414000000]: Joint 'fr_caster_rotation_joint' not found in model 'baxter'
[ERROR] [1474740644.022342243, 6597.414000000]: Joint 'fr_caster_l_wheel_joint' not found in model 'baxter'
[ERROR] [1474740644.022356311, 6597.414000000]: Joint 'fr_caster_r_wheel_joint' not found in model 'baxter'

There are quite so many of them. But the interesting thing is that none of these joints are present in the baxter urdf file. I don't know from where it picks them up. I am using KDL as the inverse kinematics library.

Same issue happens when I try to write the python script and later it crashes with the following message:

terminate called after throwing an instance of 'class_loader::LibraryUnloadException'
  what():  Attempt to unload library that class_loader is unaware of.
Aborted (core dumped) 

Could you please suggest something on this?
Thanks in advance.

Remove all links to old Wiki

MoveIt! used to use a Wiki and these tutorials still linked to it, so I re-hosted it on my personal website temporarily (picknik.io). The conversion to 100% tutorials is still complete, but we need someone to remove the final picknik.io links and at the same time copy the relevant content into the tutorials. After that I will take down that wiki once and for all.

moveit_tutorials planning_scene_ros_api_tutorial Object does not get removed. Moveit kinetic

@davetcoleman ,@v4hn

I am using Moveit with kinetic. I am not very expert with ROS and Moveit. Fortunately the contributors have updated some packages to make it work with kinetic. However there are some issues.
The Move_group_interface tutorial #45 works like shown in the video. But I have not tested all the tutorials. However there is a problem with moveit_tutorials planning_scene_ros_api_tutorial for pr2. The object appears and gets connected to the right gripper. But then it does not get detached. and along the way between the processes of attach and detach I get a stream of messages
.............................................................................

[ INFO] [1502275537.591629864]: Attached object 'box' to link 'r_wrist_roll_link'
[ INFO] [1502275537.652572290]: Detaching the object from the robot and returning it to the world.
[ERROR] [1502275537.653146469]: Found empty JointState message ``      **<-- also getting this**
[ERROR] [1502275537.653223449]: The specified RobotState is not marked as is_diff. The request to modify the object 'box' is not supported. Object is ignored.
[ INFO] [1502275537.815513782]: Attached object 'box' to link 'r_wrist_roll_link'
[ INFO] [1502275538.071848487]: Removing world object with the same name as newly attached object: 'box'
[ INFO] [1502275538.071963773]: Attached object 'box' to link 'r_wrist_roll_link'
[ INFO] [1502275539.831450395]: Attached object 'box' to link 'r_wrist_roll_link'
[ INFO] [1502275540.087312698]: Attached object 'box' to link 'r_wrist_roll_link'
[ INFO] [1502275540.343626912]: Attached object 'box' to link 'r_wrist_roll_link'

I have checked the same tutorial in indigo. it works inspite of
[ERROR] [1502275537.653223449]: The specified RobotState is not marked as is_diff. The request to modify the object 'box' is not supported. Object is ignored.
and also the stream of messages coming after. The box disappears. and the tutorial ends.

This however is not the same case in Kinetic. I am designing a pick and place application with UR5 arm, and still I am working in gazebo. Initially I thought it might be a problem with the moveit configuration for the arm. The planing for the arm works perfectly. I checked it via Rviz and also through my own node. the arm executes trajectories for the pose goals given. I also copied a part of the code of Move_group Interface tutorial http://docs.ros.org/kinetic/api/moveit_tutorials/html/doc/pr2_tutorials/planning/src/doc/move_group_interface_tutorial.html#adding-removing-objects-and-attaching-detaching-objects

to check if the object gets connected to my gripper or not. that part of the code execute successfully without any errors. But there is a problem with ROS API Planning Scene Tutorial.
I checked this tutorial for pr2 and for that the problem is the same. The object does not get detached and the execution does not end.

[ INFO] [1502275540.343626912]: Attached object 'box' to link 'r_wrist_roll_link'

The process seems to hang over with the continuous streaming of messages which I think is a bug in between the transition call to remove.
planning_scene.world.collision_objects.clear();

your help is expected and appreciated to resolve this matter...!
OS Version: e.g. Ubuntu 16.04

collision contact tutorial seems to be broken

I'm running ROS Kinetic on Ubuntu 16.04 and it seems that the launch file for the collision contact tutorial seems to be broken.

Rviz comes up without a robot state or MotionPlanning display.
collision_contact_rviz

I am running roslaunch moveit_tutorials collision_contact_tutorial.launch and both the pr2_moveit_config and moveit_tutorials are in my ROS_PACKAGE_PATH

Add Google Analytics tracking

This might be a good reference: http://perso.crans.org/besson/ga.en.html

Our tracking code:

<script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');

  ga('create', 'UA-33626765-1', 'auto');
  ga('send', 'pageview');

</script>

rviz visual tools

When I launch pr2_moveit_config demo.launch, I get an error in RViz saying rviz_visual_tools/RVizVisualToolsGUI class not loaded. And I can't manipulate or plan anything with the robot. I have moveit_visual_tools. I'm not sure how to install any of these demos. I had to run "cmake ." in pr2_moveit_config and then source devel/setup.bash in order to get the demo.launch to run. But none of this is explained in the tutorial. It just says run git clone ... and then roslaunch ...., but that doesn't work.

Move Group Interface Tutorial

In the Move Group Interface Tutorial the section Moving to a pose goal says you can use move_group.move() to move to a pose goal but "need a controller to be active and report success on execution of a trajectory."

Just for visualizations, how do you use move_group.plan() and move_group.planCartesianPath() in succession so that you can visualize a more elaborate set of motions? How do you "accept" the computed plan and use that as the start for another move?

My goal is to use the parts of this tutorial to:

  1. plan to some point in space
  2. attach an object
  3. Cartesian move
  4. plan to some new point in space

Right now it seems there's a problem doing the Cartesian move with the object attached as well.

*-devel branches?

This repository only has a master branch at the moment.
As we just recently moved to c++11 headers for MoveIt, this module has to be compiled with -std=c++11 in kinetic/xenial.

To support this, we could create individual branches.
We could also provide different tutorial versions there to reflect things like the renaming of MoveGroup in kinetic.
On the other hand I quite like it to have only one branch of the tutorials because it's more easy to maintain.
I would propose to add an indigo-devel branch to the current HEAD and afterward add the c++11 flag to master (and also use the MoveGroupInterface there later on).
This would actually be an application of my "master branch" proposal that we should have discussed at the last meeting...

RVIZ Visual tools GUI Does not appear

Hi I am trying to use the movegroup interface tutorial on my own robot but I get this warning while running it

  _Topic '/rviz_visual_tools' unable to connect to any subscribers within 0.5 sec. It is possible initially published visual messages will be lost._

and also on rviz side I cant see the rvizvisualtoolsgui to click next. On PR2 It runs perfectly.
I am running kinetic

Setup Assistant Tutorial Questions

Could you add more detail to Section 4: Add Planning Groups and Section 6: Label End Effectors?

Section 6 says end-effectors are special groups that allows special operations to happen on them internally. It would be helpful to elaborate on these special operations or point the reader to more detailed info.

My questions in section 4 stem from this lack of understanding. Following the Move Group tutorial the goal pose is for the wrist_roll_joint so in an actual situation you'd always want to plan to some offset pose. What's the advantage of this versus putting a dummy link in there so you always plan to the gripper "center"?

Is it possible to add a tutorial on gripping so that maybe some of these issues become clear?

Launch file for pick_place tutorial

Hi
Recently, I tried to use pick_place tutorial.cpp, but there is no launch file in the folder.
Although I referred the other launch file, the pick_place file did not work.

Why is there no launch file for pick_place?

Please help me.

How to "Allow External Comm" in Joystick Control Teleoperation

In the tutorial ,

In the Motion Planning plugin of Rviz, enable “Allow External Comm.” checkbox in the “Planning” tab. Enable the ‘Query Goal State’ robot display in the MoveIt! Motion Planning Plugins’s ‘Planning Request’ section.

I CANNOT find Allow External Comm checkbox.
My ros version is kinetic by the way.
Thanks, plz.

MoveIt Chomp interface : unused args [planner]

I am trying to use CHOMP motion planning as per the tutorial given in http://docs.ros.org/kinetic/api/moveit_tutorials/html/doc/chomp_interface_tutorial.html.
I added the line 'arg name="planner" value="chomp" ' under the move_group.launch as mentioned (Previously my demo.launch file did not have this line at all). I get the following error

unused args [planner] for include of [/home/ash/TestCatkin_ws/src/panda_moveit_config/launch/move_group.launch]
The traceback for the exception was written to the log file

I am using ROS kinetic in ubuntu 16.04 and built MoveIt from source (http://moveit.ros.org/install/source/)
I am learning ROS and MoveIt for my project. Any help would be really appreciated

Thanks

How to get the goal state of Rviz by programming?

#55

Hi,bother again,I want to get the orange arm's state(just every joint's angle), could you tell me?
Because the orange's arm is goal state ,is not current state. So I can't get the state by move_group.getCurrentState().
Thanks!

A problem of moveit_setup_assistant ! process has died.

when I execute "roslaunch moveit_setup_assistant setup_assistant.launch" ,I got the error like follow:
=========================================================================REQUIRED process [moveit_setup_assistant-2] has died!
process has died [pid 11143, exit code -11, cmd /opt/ros/indigo/lib/moveit_setup_assistant/moveit_setup_assistant __name:=moveit_setup_assistant __log:=/home/cy/.ros/log/01d2166e-7071-11e7-b681-c4346b72034a/moveit_setup_assistant-2.log].
log file: /home/cy/.ros/log/01d2166e-7071-11e7-b681-c4346b72034a/moveit_setup_assistant-2*.log
Initiating shutdown!

[moveit_setup_assistant-2] killing on exit
[rosout-1] killing on exit
[master] killing on exit
shutting down processing monitor...
... shutting down processing monitor complete
done

please help me !!! thanks very much!!!!1

IKFast Plugin Tutorial errors

While following the instructions in the IKFast Plugin tutorial and trying to convert the PR2 URDF file found in pr2_common to Collada format, I receive the errors:

[ERROR] [1502306846.769705032]: No link elements found in urdf file [ERROR] [1502306846.769832718]: failed to open urdf file pr2.urdf.xacro

Not really sure what's causing this problem.

problem with catkin make

after I installed the pr2_moveit_config packege and git cloned the moveit_tutorials packege to my src in the working space i had a problem with the catkin_make. thats the problem thath it gave me:
[ 0%] Built target roscpp_generate_messages_lisp
[ 0%] [ 0%] Built target tf2_msgs_generate_messages_cpp
Built target roscpp_generate_messages_cpp
[ 0%] Built target diagnostic_msgs_generate_messages_py
[ 0%] Built target roscpp_generate_messages_py
[ 0%] Built target std_msgs_generate_messages_cpp
[ 0%] [ 0%] Built target std_msgs_generate_messages_lisp
Built target rosgraph_msgs_generate_messages_lisp
[ 0%] [ 0%] Built target rosgraph_msgs_generate_messages_py
Built target std_msgs_generate_messages_py
[ 0%] Built target rosgraph_msgs_generate_messages_cpp
[ 0%] [ 0%] [ 0%] Built target sensor_msgs_generate_messages_py
Built target geometry_msgs_generate_messages_cpp
Built target diagnostic_msgs_generate_messages_lisp
[ 0%] Built target sensor_msgs_generate_messages_cpp
[ 0%] [ 0%] Built target sensor_msgs_generate_messages_lisp
Built target geometry_msgs_generate_messages_py
[ 0%] Built target geometry_msgs_generate_messages_lisp
[ 0%] Built target actionlib_msgs_generate_messages_lisp
[ 0%] [ 0%] Built target trajectory_msgs_generate_messages_py
Built target nav_msgs_generate_messages_py
[ 0%] [ 0%] Built target actionlib_msgs_generate_messages_py
Built target diagnostic_msgs_generate_messages_cpp
[ 0%] Built target actionlib_msgs_generate_messages_cpp
[ 0%] [ 0%] [ 0%] Built target naoqi_bridge_msgs_generate_messages_lisp
Built target nav_msgs_generate_messages_lisp
Built target naoqi_bridge_msgs_generate_messages_py
[ 0%] [ 0%] Built target naoqi_bridge_msgs_generate_messages_cpp
Built target trajectory_msgs_generate_messages_lisp
[ 0%] [ 0%] Built target nav_msgs_generate_messages_cpp
Built target trajectory_msgs_generate_messages_cpp
[ 0%] Built target actionlib_generate_messages_cpp
[ 0%] [ 0%] [ 0%] Built target actionlib_generate_messages_lisp
Built target actionlib_generate_messages_py
Built target tf2_msgs_generate_messages_lisp
Scanning dependencies of target kinematic_model_tutorial
[ 0%] Built target tf2_msgs_generate_messages_py
Scanning dependencies of target ros_api_tutorial
Scanning dependencies of target motion_planning_api_tutorial
Scanning dependencies of target move_group_interface_tutorial
[ 1%] Building CXX object moveit_tutorials/doc/pr2_tutorials/kinematics/CMakeFiles/ros_api_tutorial.dir/src/ros_api_tutorial.cpp.o
[ 3%] [ 5%] Building CXX object moveit_tutorials/doc/pr2_tutorials/kinematics/CMakeFiles/kinematic_model_tutorial.dir/src/kinematic_model_tutorial.cpp.o
Building CXX object moveit_tutorials/doc/pr2_tutorials/planning/CMakeFiles/motion_planning_api_tutorial.dir/src/motion_planning_api_tutorial.cpp.o
[ 6%] Building CXX object moveit_tutorials/doc/pr2_tutorials/planning/CMakeFiles/move_group_interface_tutorial.dir/src/move_group_interface_tutorial.cpp.o
/home/ariel/catkin_ws/src/moveit_tutorials/doc/pr2_tutorials/planning/src/move_group_interface_tutorial.cpp:37:62: fatal error: moveit/move_group_interface/move_group_interface.h: No such file or directory
#include <moveit/move_group_interface/move_group_interface.h>
^
compilation terminated.
make[2]: *** [moveit_tutorials/doc/pr2_tutorials/planning/CMakeFiles/move_group_interface_tutorial.dir/src/move_group_interface_tutorial.cpp.o] Error 1
make[1]: *** [moveit_tutorials/doc/pr2_tutorials/planning/CMakeFiles/move_group_interface_tutorial.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
Linking CXX executable /home/ariel/catkin_ws/devel/lib/moveit_tutorials/kinematic_model_tutorial
[ 6%] Built target kinematic_model_tutorial
Linking CXX executable /home/ariel/catkin_ws/devel/lib/moveit_tutorials/ros_api_tutorial
[ 6%] Built target ros_api_tutorial
Linking CXX executable /home/ariel/catkin_ws/devel/lib/moveit_tutorials/motion_planning_api_tutorial
[ 6%] Built target motion_planning_api_tutorial
make: *** [all] Error 2
Invoking "make -j4 -l4" failed

what is missing that it cant compile?

Task Space Goals

Hi there,

Thank you for the tutorial. Is there an existing class method in the robot_state class that supports working in the task space of the robot?
The documentation doesn't say anything about it.

Unable to set end-effector link and There is no end-effector to get pose of in Pyhton API

I am using two UR10 arms (named 'hong' and 'kong') to perform simultaneous manipulation. My SRDF looks something like this (although I have tried different combinations for placing end-effector link inside the groups):

 <group name="hong_arm">
    <joint name="hong_shoulder_pan_joint" />
    <joint name="hong_shoulder_lift_joint" />
    <joint name="hong_elbow_joint" />
    <joint name="hong_wrist_1_joint" />
    <joint name="hong_wrist_2_joint" />
    <joint name="hong_wrist_3_joint" />
    <group name="hong_ee_link" />
</group>
<group name="kong_arm">
    <joint name="kong_shoulder_pan_joint" />
    <joint name="kong_shoulder_lift_joint" />
    <joint name="kong_elbow_joint" />
    <joint name="kong_wrist_1_joint" />
    <joint name="kong_wrist_2_joint" />
    <joint name="kong_wrist_3_joint" />
    <group name="kong_ee_link" />

</group>
<group name="dual_arm">
    <group name="hong_arm" />
    <group name="kong_arm" />
</group>
<group name="hong_ee_link">
    <link name="hong_ee_link" />
</group>
<group name="kong_ee_link">
    <link name="kong_ee_link" />
</group>
<!--END EFFECTOR: Purpose: Represent information about an end effector.-->
<end_effector name="hong_ee_link" parent_link="hong_ee_link" group="hong_ee_link" />
<end_effector name="kong_ee_link" parent_link="kong_ee_link" group="kong_ee_link" />

The problem is that on RVIZ I can move the two arms simulatanously, but when it comes to moving through Python API, the 'group.get_end_effector_link' returns an empty string whereas 'group.set_end_effector_link' returns 'unable to set end effector link'. Needless to say, the current effector pose function also returns an error.

And also, the current joint values for one arm are fine, but for the other arm are zero. Although sometimes both are fine.

I am just curious as to why this works fine on RVIZ but not through Python API.

sanity check: python tutorial cartesian path

I just went through the python tutorial and got unexpected results based on the cartesian section. The code I'm referring to is this:

waypoints = []

# start with the current pose
waypoints.append(group.get_current_pose().pose)

# first orient gripper and move forward (+x)
wpose = geometry_msgs.msg.Pose()
wpose.orientation.w = 1.0
wpose.position.x = waypoints[0].position.x + 0.1
wpose.position.y = waypoints[0].position.y
wpose.position.z = waypoints[0].position.z
waypoints.append(copy.deepcopy(wpose))

# second move down
wpose.position.z -= 0.10
waypoints.append(copy.deepcopy(wpose))

# third move to the side
wpose.position.y += 0.05
waypoints.append(copy.deepcopy(wpose))

Intuitively I assumed the code was creating a sort of three stage move, one where x is offset by 0.1m, then z by 0.1m, and finally y by 0.05m. Finally, the gist in my mind for this call was constructing a series of 1cm step-sized points passing through all three of our positions:

(plan3, fraction) = group.compute_cartesian_path(
                               waypoints,   # waypoints to follow
                               0.01,        # eef_step
                               0.0)         # jump_threshold

I created an abridged version of the original .py file which only initializes and creates the cartesian path. I used group.execute() so that the robot position would be updated and allow me to compare the poses. My branch is here and you can see the example code I'm using here. Lastly, I made a screen capture you can see here.

Reproduce:

### using my py_cartesian_example of moveit_tutorials
roslaunch pr2_moveit_config demo.launch
rosrun moveit_tutorials move_group_python_interface_tutorial_abridged.py

Pose initial:

pose: 
  position: 
    x: 0.585315333893
    y: 0.188
    z: 1.25001048644

Pose after appending the waypoint segments and doing group.compute_cartesian_path():

pose: 
  position: 
    x: 0.635315107739
    y: 0.188
    z: 1.25001038313

The code led me to believe the final should be y = 0.238 and z = 1.15.

Is this the expected behavior?

Moveit_Chomp motion planning with franka robot arm

I am trying to use chomp motion planner with 7-DOF franka robot arm (https://frankaemika.github.io/docs/installation.html). Followed the tutorial for chomp interface in http://docs.ros.org/kinetic/api/moveit_tutorials/html/doc/chomp_interface_tutorial.html. The chomp motion planner is working with the fanuc robot but an error comes up with franka.
Using ROS kinetic, Ubuntu 16.04. Built MoveIt from source.
screenshot from 2018-04-25 18-19-24

screenshot from 2018-04-25 18-30-40

@davetcoleman @v4hn : Any help please. I am stuck in my project.

bad PR / commit practice

Obviously, since a while, you guys at PickNik only file PRs against the PickNik fork of this repo, but then fast-forward the ros-planning repo as well (probably this was done only recently). This leads to commits, here, in the main repo that refer to misleading PR IDs, e.g. 85814db referring to #55, which is completely unrelated (because they actually refer to PRs in PickNik's fork).
Please stop doing so and instead file PRs directly against the main repo at ros-planning.

The second drawback of this practice is, that you didn't notice that the moveit_tutorials package is broken in Travis since two months: https://travis-ci.org/ros-planning/moveit_tutorials/branches.
Please fix this asap. Since @davetcoleman added the tutorials package to the travis build of the main moveit repo in melodic, this is now failing too.

Please add some clarifying info to MoveGroup tutorial

I find these lines extremely confusing. Could someone could unpack them into something more readable / understandable? Maybe the first is a really efficient way to do it, but it doesn't seem appropriate for a tutorial. JointModelGroup and RobotModel aren't discussed at all so the tutorial also seems very incomplete.

offending lines:
https://github.com/ros-planning/moveit_tutorials/blob/kinetic-devel/doc/pr2_tutorials/planning/src/move_group_interface_tutorial.cpp#L145

https://github.com/ros-planning/moveit_tutorials/blob/kinetic-devel/doc/pr2_tutorials/planning/src/move_group_interface_tutorial.cpp#L187

This portion could also use some clarification:
https://github.com/ros-planning/moveit_tutorials/blob/indigo-devel/doc/pr2_tutorials/planning/src/move_group_interface_tutorial.cpp#L167

I had thought that z_axis_tolerance = 3.14159 would mean that I just want the joint parallel to the floor, but making this change causes the solution to fail every time. What do these tolerances actually do and how would you use them to do something like "keep joint parallel to floor?"

Err while movint right_arm in "Move Group Python Interface Tutorial"

Hi,

I was doing some tests with this file:
https://github.com/ros-planning/moveit_tutorials/blob/kinetic-devel/doc/pr2_tutorials/planning/scripts/move_group_python_interface_tutorial.py

And in line 76 where you chose which arm do you want to use (right or left) there is some strange behaviour when you change from left to right_arm

After changing this arm, on the 2nd visualization the program FAILS with this output:

Traceback (most recent call last):
  File "./group2.py", line 238, in <module>
    move_group_python_interface_tutorial()
  File "./group2.py", line 175, in move_group_python_interface_tutorial
    group.set_joint_value_target(group_variable_values)
  File "/opt/ros/indigo/lib/python2.7/dist-packages/moveit_commander/move_group.py", line 196, in set_joint_value_target
    raise MoveItCommanderException("Error setting joint target. Is the target within bounds?")
moveit_commander.exception.MoveItCommanderException: Error setting joint target. Is the target within bounds?
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

The program is only able to run plan1 with the option (right_arm) as I mentioned before

Pick and place not working

Hi,
I am very new to Moveit. I am following your tutorials. But I stucked at pick_place tutorial.
When I run the pick_and_place_tutorial.cpp file,
Table and objects are appearing in Moveit.
But after that it is showing error like

[ WARN] [1504262805.028268117]: Fail: ABORTED: No motion plan found. No execution attempted.
[ WARN] [1504262806.029454847]: Fail: ABORTED: Must specify group in motion plan request

Please help me to solve this issue.

Thanks
Sai kiran

travis rake error

Travis fails for this repo with some unrelated rake error.

See e.g. #19 :

0.09s$ rake
rake aborted!
No Rakefile found (looking for: rakefile, Rakefile, rakefile.rb, Rakefile.rb)
/home/travis/.rvm/gems/ruby-1.9.3-p551/bin/ruby_executable_hooks:15:in eval' /home/travis/.rvm/gems/ruby-1.9.3-p551/bin/ruby_executable_hooks:15:in

'
(See full trace by running task with --trace)
The command "rake" exited with 1.
Done. Your build exited with 1.

lib version so.0.9.4 is not available for kinect unbuntu

/usr/bin/ld: warning: libmoveit_trajectory_execution_manager.so.0.9.4, needed by /opt/ros/kinetic/lib/libmoveit_move_group_interface.so, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libmoveit_planning_scene_monitor.so.0.9.4, needed by /opt/ros/kinetic/lib/libmoveit_move_group_interface.so, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libmoveit_robot_model.so.0.9.4, needed by /opt/ros/kinetic/lib/libmoveit_move_group_interface.so, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libmoveit_transforms.so.0.9.4, needed by /opt/ros/kinetic/lib/libmoveit_move_group_interface.so, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libmoveit_robot_state.so.0.9.4, needed by /opt/ros/kinetic/lib/libmoveit_move_group_interface.so, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libmoveit_kinematic_constraints.so.0.9.4, needed by /opt/ros/kinetic/lib/libmoveit_move_group_interface.so, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libmoveit_robot_model_loader.so.0.9.4, needed by /opt/ros/kinetic/lib/libmoveit_common_planning_interface_objects.so, not found (try using -rpath or -rpath-link)
/opt/ros/kinetic/lib/libmoveit_move_group_interface.so: undefined reference to `planning_scene_monitor::CurrentStateMonitor::waitForCurrentState(ros::Time, double) const'
collect2: error: ld returned 1 exit status
myworkcell_core/CMakeFiles/myworkcell_node.dir/build.make:180: recipe for target '/home/aspa1/catkin_ws/devel/lib/myworkcell_core/myworkcell_node' failed
make[2]: *** [/home/aspa1/catkin_ws/devel/lib/myworkcell_core/myworkcell_node] Error 1
CMakeFiles/Makefile2:7956: recipe for target 'myworkcell_core/CMakeFiles/myworkcell_node.dir/all' failed
make[1]: *** [myworkcell_core/CMakeFiles/myworkcell_node.dir/all] Error 2
Makefile:138: recipe for target 'all' failed
make: *** [all] Error 2
Invoking "make -j4 -l4" failed

Hi, I want to build a new node from my project by using moveit_group class to control IRB120 rabb. But When I use the function like
moveit::planning_interface::MoveGroupInterface move_group(PLANNING_GROUP); from header of
#include <moveit/move_group_interfacemove_group_interface.h>
it could not pass the catkin_make. It looked like the version of the library was not right. I got lost. Cou you help me? Thanks!

move_group_interface_tutorial

I installed the moveit_tutorials using the git clone command ... however when I try to run:

roslaunch moveit_tutorials move_group_interface_tutorial.launch

as the movegroup tutorial suggests, there is an error that no launch file exists. And there is no launch directory in moveit_tutorials, so that makes sense. Is this tutorial up to date? I'm using ros kinetic. Thanks.

Document how to use Gazebo with MoveIt!

We need a tutorial that discusses using ROS Control with Gazebo to plan in MoveIt!.

A really out of date version is here but I recommend it not be followed because most of it is wrong.

Slight tweak to ros_visualization tutorial (Scene Robot -> Show Robot Visual)

Hello,

Just going through the tutorials and saw this bit:

The display states for each of these visualizations can be toggled on and off using checkboxes.

  1. The start state using the "Query Start State" checkbox in the "Planning Request" tab.
  2. The goal state using the "Query Goal State" checkbox in the "Planning Request" tab.
  3. The planning scene robot using the "Show Scene Robot" checkbox in the "Scene Robot" tab.
  4. The planned path using the "Show Robot Visual" checkbox in the "Planned Path" tab.

If I'm correct that the third should be Show Robot Visual, I can submit a PR.

What I see in RViz:

scene_robot

update on Setup Assistant Tutorial

I found a fix to the Setup Assistant Tutorial.
When I followed it and tried the next MoveIt! RViz Plugin Tutorial,
the interactive marker didn't show up, and there were errors saying
the arm is not a chain, sothe solver cannot work.

From googling I found the workaround here,
https://groups.google.com/forum/#!topic/moveit-users/Sou7saUo6mY
I had to unselect 2 joints in the arm group,
"r_forearm_cam_frame_joint" and "r_forearm_cam_optical_frame_joint".

The resulting 9 joint set is same as described in tutorial,
I suppose the cam joints were added afterward.
So the sentence should be updated like
Click on r_shoulder_pan_joint, hold down the Shift button on your keyboard and then click on the r_wrist_roll_joint.
to
Click on r_shoulder_pan_joint, hold down the Ctrl button on your keyboard and then click each joint down to the r_wrist_roll_joint, except for two joints named "r_forearm_cam*".

that would be like this:
image

Please check out.
Uroko

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.