The new location as of August 5th, 2016 is https://github.com/ros-planning/moveit
See migration notes for more details.
Please do not open new pull requests or issues in this old location.
THIS REPO HAS MOVED TO https://github.com/ros-planning/moveit
The new location as of August 5th, 2016 is https://github.com/ros-planning/moveit
See migration notes for more details.
Please do not open new pull requests or issues in this old location.
It's required in moveit/moveit_ros#692.
If the branches are ready to be released, I can make releases. Right now I see #56 that seems better included for the new release?
Let me know.
Thanks!
I just made indigo-devel
the default branch on Github. @gavanderhoorn is master
ready to be deleted?
Running catkin_lint
on a recently (re)generated ikfast plugin package:
X_moveit_plugins: CMakeLists.txt(4): warning: find_package(Eigen) before find_package(cmake_modules)
This makes sense: FindEigen.cmake
is part of the cmake_modules
package, which should be find_package()
-ed first. It should then also become a build_depend
of the plugin package.
I've recently run into an issue that I wanted to put to the greater moveit_ikfast
audience in the hopes of guidance on the best path to fix my issue: @gavanderhoorn @davetcoleman @jrgnicho
The scenario is this:
We generate an IKFast solution for a given kinematic chain, say base_link
to tool0
. This plugin will work for planning with respect to tool0
. Now let's say that I will add a new frame tool_tip
with a fixed transformation relative to tool0
and I wish to plan for this. I change the URDF and MoveIt SRDF configuration to add this new link to the move group, but I do not regenerate the IK. The kinematics will still solve poses as if tool0
was the active point. The plugin remains blissfully unaware of this discrepancy and will tell you that the solver tip frame is tool_tip
.
Can you confirm that this behaviour is expected? If so, what do you see as the proposed solution.
It seems as if there is some need to encode the underlying IKFast's base & tool frames into the plugin and perform relevant translations there.
I'm trying to get my IKFast plugin to build under Ubuntu 14.04 and ROS Indigo debian install. I am using the source install of moveit_ikfast because of a bug in the debian version that has been fixed in source but not yet pushed to the debs.
As for OpenRave, I am using a source install from the master branch which compiles fine and generates my .cpp file.
After creating my empty plugin package, running catkin_make yields the following error which causes the plugin not to be built:
/home/patrick/catkin_ws/src/pi_robot_ikfast_right_arm_plugin/src/pi_robot_right_arm_ikfast_moveit_plugin.cpp:178:42: error: ‘kinematics::KinematicsResult’ has not been declared
The rest of the output is as follows:
kinematics::KinematicsResult& result,
^
/home/patrick/catkin_ws/src/pi_robot_ikfast_right_arm_plugin/src/pi_robot_right_arm_ikfast_moveit_plugin.cpp:302:41: error: ‘kinematics::DiscretizationMethod’ has not been declared
bool sampleRedundantJoint(kinematics::DiscretizationMethod method, std::vector<double>& sampled_joint_vals) const;
^
/home/patrick/catkin_ws/src/pi_robot_ikfast_right_arm_plugin/src/pi_robot_right_arm_ikfast_moveit_plugin.cpp: In constructor ‘ikfast_kinematics_plugin::IKFastKinematicsPlugin::IKFastKinematicsPlugin()’:
/home/patrick/catkin_ws/src/pi_robot_ikfast_right_arm_plugin/src/pi_robot_right_arm_ikfast_moveit_plugin.cpp:139:5: error: ‘supported_methods_’ was not declared in this scope
supported_methods_.push_back(kinematics::DiscretizationMethods::NO_DISCRETIZATION);
^
/home/patrick/catkin_ws/src/pi_robot_ikfast_right_arm_plugin/src/pi_robot_right_arm_ikfast_moveit_plugin.cpp:139:46: error: ‘kinematics::DiscretizationMethods’ has not been declared
supported_methods_.push_back(kinematics::DiscretizationMethods::NO_DISCRETIZATION);
^
/home/patrick/catkin_ws/src/pi_robot_ikfast_right_arm_plugin/src/pi_robot_right_arm_ikfast_moveit_plugin.cpp:140:46: error: ‘kinematics::DiscretizationMethods’ has not been declared
supported_methods_.push_back(kinematics::DiscretizationMethods::ALL_DISCRETIZED);
^
/home/patrick/catkin_ws/src/pi_robot_ikfast_right_arm_plugin/src/pi_robot_right_arm_ikfast_moveit_plugin.cpp:141:46: error: ‘kinematics::DiscretizationMethods’ has not been declared
supported_methods_.push_back(kinematics::DiscretizationMethods::ALL_RANDOM_SAMPLED);
^
/home/patrick/catkin_ws/src/pi_robot_ikfast_right_arm_plugin/src/pi_robot_right_arm_ikfast_moveit_plugin.cpp: In member function ‘void ikfast_kinematics_plugin::IKFastKinematicsPlugin::setSearchDiscretization(const std::map<int, double>&)’:
/home/patrick/catkin_ws/src/pi_robot_ikfast_right_arm_plugin/src/pi_robot_right_arm_ikfast_moveit_plugin.cpp:456:3: error: ‘redundant_joint_discretization_’ was not declared in this scope
redundant_joint_discretization_.clear();
^
/home/patrick/catkin_ws/src/pi_robot_ikfast_right_arm_plugin/src/pi_robot_right_arm_ikfast_moveit_plugin.cpp: At global scope:
/home/patrick/catkin_ws/src/pi_robot_ikfast_right_arm_plugin/src/pi_robot_right_arm_ikfast_moveit_plugin.cpp:1058:56: error: ‘kinematics::KinematicsResult’ has not been declared
kinematics::KinematicsResult& result,
^
/home/patrick/catkin_ws/src/pi_robot_ikfast_right_arm_plugin/src/pi_robot_right_arm_ikfast_moveit_plugin.cpp: In member function ‘bool ikfast_kinematics_plugin::IKFastKinematicsPlugin::getPositionIK(const std::vector<geometry_msgs::Pose_<std::allocator<void> > >&, const std::vector<double>&, std::vector<std::vector<double> >&, int&, const kinematics::KinematicsQueryOptions&) const’:
/home/patrick/catkin_ws/src/pi_robot_ikfast_right_arm_plugin/src/pi_robot_right_arm_ikfast_moveit_plugin.cpp:1066:12: error: request for member ‘kinematic_error’ in ‘result’, which is of non-class type ‘int’
result.kinematic_error = kinematics::KinematicErrors::SOLVER_NOT_ACTIVE;
^
/home/patrick/catkin_ws/src/pi_robot_ikfast_right_arm_plugin/src/pi_robot_right_arm_ikfast_moveit_plugin.cpp:1066:42: error: ‘kinematics::KinematicErrors’ has not been declared
result.kinematic_error = kinematics::KinematicErrors::SOLVER_NOT_ACTIVE;
^
/home/patrick/catkin_ws/src/pi_robot_ikfast_right_arm_plugin/src/pi_robot_right_arm_ikfast_moveit_plugin.cpp:1073:12: error: request for member ‘kinematic_error’ in ‘result’, which is of non-class type ‘int’
result.kinematic_error = kinematics::KinematicErrors::EMPTY_TIP_POSES;
^
/home/patrick/catkin_ws/src/pi_robot_ikfast_right_arm_plugin/src/pi_robot_right_arm_ikfast_moveit_plugin.cpp:1073:42: error: ‘kinematics::KinematicErrors’ has not been declared
result.kinematic_error = kinematics::KinematicErrors::EMPTY_TIP_POSES;
^
/home/patrick/catkin_ws/src/pi_robot_ikfast_right_arm_plugin/src/pi_robot_right_arm_ikfast_moveit_plugin.cpp:1080:12: error: request for member ‘kinematic_error’ in ‘result’, which is of non-class type ‘int’
result.kinematic_error = kinematics::KinematicErrors::MULTIPLE_TIPS_NOT_SUPPORTED;
^
/home/patrick/catkin_ws/src/pi_robot_ikfast_right_arm_plugin/src/pi_robot_right_arm_ikfast_moveit_plugin.cpp:1080:42: error: ‘kinematics::KinematicErrors’ has not been declared
result.kinematic_error = kinematics::KinematicErrors::MULTIPLE_TIPS_NOT_SUPPORTED;
^
/home/patrick/catkin_ws/src/pi_robot_ikfast_right_arm_plugin/src/pi_robot_right_arm_ikfast_moveit_plugin.cpp:1105:16: error: ‘const struct kinematics::KinematicsQueryOptions’ has no member named ‘discretization_method’
if(options.discretization_method == kinematics::DiscretizationMethods::NO_DISCRETIZATION &&
^
/home/patrick/catkin_ws/src/pi_robot_ikfast_right_arm_plugin/src/pi_robot_right_arm_ikfast_moveit_plugin.cpp:1105:53: error: ‘kinematics::DiscretizationMethods’ has not been declared
if(options.discretization_method == kinematics::DiscretizationMethods::NO_DISCRETIZATION &&
^
/home/patrick/catkin_ws/src/pi_robot_ikfast_right_arm_plugin/src/pi_robot_right_arm_ikfast_moveit_plugin.cpp:1114:16: error: request for member ‘kinematic_error’ in ‘result’, which is of non-class type ‘int’
result.kinematic_error = kinematics::KinematicErrors::IK_SEED_OUTSIDE_LIMITS;
^
/home/patrick/catkin_ws/src/pi_robot_ikfast_right_arm_plugin/src/pi_robot_right_arm_ikfast_moveit_plugin.cpp:1114:46: error: ‘kinematics::KinematicErrors’ has not been declared
result.kinematic_error = kinematics::KinematicErrors::IK_SEED_OUTSIDE_LIMITS;
^
/home/patrick/catkin_ws/src/pi_robot_ikfast_right_arm_plugin/src/pi_robot_right_arm_ikfast_moveit_plugin.cpp:1123:38: error: ‘const struct kinematics::KinematicsQueryOptions’ has no member named ‘discretization_method’
if(!sampleRedundantJoint(options.discretization_method,sampled_joint_vals))
^
/home/patrick/catkin_ws/src/pi_robot_ikfast_right_arm_plugin/src/pi_robot_right_arm_ikfast_moveit_plugin.cpp:1125:14: error: request for member ‘kinematic_error’ in ‘result’, which is of non-class type ‘int’
result.kinematic_error = kinematics::KinematicErrors::UNSUPORTED_DISCRETIZATION_REQUESTED;
^
/home/patrick/catkin_ws/src/pi_robot_ikfast_right_arm_plugin/src/pi_robot_right_arm_ikfast_moveit_plugin.cpp:1125:44: error: ‘kinematics::KinematicErrors’ has not been declared
result.kinematic_error = kinematics::KinematicErrors::UNSUPORTED_DISCRETIZATION_REQUESTED;
^
/home/patrick/catkin_ws/src/pi_robot_ikfast_right_arm_plugin/src/pi_robot_right_arm_ikfast_moveit_plugin.cpp:1191:14: error: request for member ‘kinematic_error’ in ‘result’, which is of non-class type ‘int’
result.kinematic_error = kinematics::KinematicErrors::OK;
^
/home/patrick/catkin_ws/src/pi_robot_ikfast_right_arm_plugin/src/pi_robot_right_arm_ikfast_moveit_plugin.cpp:1191:44: error: ‘kinematics::KinematicErrors’ has not been declared
result.kinematic_error = kinematics::KinematicErrors::OK;
^
/home/patrick/catkin_ws/src/pi_robot_ikfast_right_arm_plugin/src/pi_robot_right_arm_ikfast_moveit_plugin.cpp:1200:10: error: request for member ‘kinematic_error’ in ‘result’, which is of non-class type ‘int’
result.kinematic_error = kinematics::KinematicErrors::NO_SOLUTION;
^
/home/patrick/catkin_ws/src/pi_robot_ikfast_right_arm_plugin/src/pi_robot_right_arm_ikfast_moveit_plugin.cpp:1200:40: error: ‘kinematics::KinematicErrors’ has not been declared
result.kinematic_error = kinematics::KinematicErrors::NO_SOLUTION;
^
/home/patrick/catkin_ws/src/pi_robot_ikfast_right_arm_plugin/src/pi_robot_right_arm_ikfast_moveit_plugin.cpp: At global scope:
/home/patrick/catkin_ws/src/pi_robot_ikfast_right_arm_plugin/src/pi_robot_right_arm_ikfast_moveit_plugin.cpp:1204:63: error: ‘bool ikfast_kinematics_plugin::IKFastKinematicsPlugin::sampleRedundantJoint’ is not a static member of ‘class ikfast_kinematics_plugin::IKFastKinematicsPlugin’
bool IKFastKinematicsPlugin::sampleRedundantJoint(kinematics::DiscretizationMethod method, std::vector<double>& sampled_joint_vals) const
^
/home/patrick/catkin_ws/src/pi_robot_ikfast_right_arm_plugin/src/pi_robot_right_arm_ikfast_moveit_plugin.cpp:1204:51: error: ‘DiscretizationMethod’ is not a member of ‘kinematics’
bool IKFastKinematicsPlugin::sampleRedundantJoint(kinematics::DiscretizationMethod method, std::vector<double>& sampled_joint_vals) const
^
/home/patrick/catkin_ws/src/pi_robot_ikfast_right_arm_plugin/src/pi_robot_right_arm_ikfast_moveit_plugin.cpp:1204:111: error: expected primary-expression before ‘&’ token
bool IKFastKinematicsPlugin::sampleRedundantJoint(kinematics::DiscretizationMethod method, std::vector<double>& sampled_joint_vals) const
^
/home/patrick/catkin_ws/src/pi_robot_ikfast_right_arm_plugin/src/pi_robot_right_arm_ikfast_moveit_plugin.cpp:1204:113: error: ‘sampled_joint_vals’ was not declared in this scope
bool IKFastKinematicsPlugin::sampleRedundantJoint(kinematics::DiscretizationMethod method, std::vector<double>& sampled_joint_vals) const
^
/home/patrick/catkin_ws/src/pi_robot_ikfast_right_arm_plugin/src/pi_robot_right_arm_ikfast_moveit_plugin.cpp:1204:131: error: expression list treated as compound expression in initializer [-fpermissive]
bool IKFastKinematicsPlugin::sampleRedundantJoint(kinematics::DiscretizationMethod method, std::vector<double>& sampled_joint_vals) const
^
/home/patrick/catkin_ws/src/pi_robot_ikfast_right_arm_plugin/src/pi_robot_right_arm_ikfast_moveit_plugin.cpp:1204:133: error: expected ‘,’ or ‘;’ before ‘const’
bool IKFastKinematicsPlugin::sampleRedundantJoint(kinematics::DiscretizationMethod method, std::vector<double>& sampled_joint_vals) const
^
/home/patrick/catkin_ws/src/pi_robot_ikfast_right_arm_plugin/src/pi_robot_right_arm_ikfast_moveit_plugin.cpp:1258:101: error: expected ‘}’ at end of input
PLUGINLIB_EXPORT_CLASS(ikfast_kinematics_plugin::IKFastKinematicsPlugin, kinematics::KinematicsBase);
^
make[2]: *** [pi_robot_ikfast_right_arm_plugin/CMakeFiles/pi_robot_right_arm_moveit_ikfast_plugin.dir/src/pi_robot_right_arm_ikfast_moveit_plugin.cpp.o] Error 1
make[1]: *** [pi_robot_ikfast_right_arm_plugin/CMakeFiles/pi_robot_right_arm_moveit_ikfast_plugin.dir/all] Error 2
make: *** [all] Error 2
Invoking "make -j4 -l4" failed
It would be nice if we had tests for this component of MoveIt!, as suggested in moveit/moveit_core#216
Hi!
All in all similar to #54 however I'm using ROS Jade on trusty. So the jade branch should be the right one for me.
Any suggestions?
Output as follows:
[...]
[100%] Built target moveit_setup_assistant
/media/jph/linuxOnlyData/spacebot/src/crustcrawler_arm/moveit_ik_plugin/src/arm_manipulator_ikfast_moveit_plugin.cpp:178:42: error: ‘kinematics::KinematicsResult’ has not been declared
kinematics::KinematicsResult& result,
^
/media/jph/linuxOnlyData/spacebot/src/crustcrawler_arm/moveit_ik_plugin/src/arm_manipulator_ikfast_moveit_plugin.cpp:302:41: error: ‘kinematics::DiscretizationMethod’ has not been declared
bool sampleRedundantJoint(kinematics::DiscretizationMethod method, std::vector<double>& sampled_joint_vals) const;
^
/media/jph/linuxOnlyData/spacebot/src/crustcrawler_arm/moveit_ik_plugin/src/arm_manipulator_ikfast_moveit_plugin.cpp: In constructor ‘ikfast_kinematics_plugin::IKFastKinematicsPlugin::IKFastKinematicsPlugin()’:
/media/jph/linuxOnlyData/spacebot/src/crustcrawler_arm/moveit_ik_plugin/src/arm_manipulator_ikfast_moveit_plugin.cpp:139:5: error: ‘supported_methods_’ was not declared in this scope
supported_methods_.push_back(kinematics::DiscretizationMethods::NO_DISCRETIZATION);
^
/media/jph/linuxOnlyData/spacebot/src/crustcrawler_arm/moveit_ik_plugin/src/arm_manipulator_ikfast_moveit_plugin.cpp:139:46: error: ‘kinematics::DiscretizationMethods’ has not been declared
supported_methods_.push_back(kinematics::DiscretizationMethods::NO_DISCRETIZATION);
^
/media/jph/linuxOnlyData/spacebot/src/crustcrawler_arm/moveit_ik_plugin/src/arm_manipulator_ikfast_moveit_plugin.cpp:140:46: error: ‘kinematics::DiscretizationMethods’ has not been declared
supported_methods_.push_back(kinematics::DiscretizationMethods::ALL_DISCRETIZED);
^
/media/jph/linuxOnlyData/spacebot/src/crustcrawler_arm/moveit_ik_plugin/src/arm_manipulator_ikfast_moveit_plugin.cpp:141:46: error: ‘kinematics::DiscretizationMethods’ has not been declared
supported_methods_.push_back(kinematics::DiscretizationMethods::ALL_RANDOM_SAMPLED);
^
/media/jph/linuxOnlyData/spacebot/src/crustcrawler_arm/moveit_ik_plugin/src/arm_manipulator_ikfast_moveit_plugin.cpp: In member function ‘void ikfast_kinematics_plugin::IKFastKinematicsPlugin::setSearchDiscretization(const std::map<int, double>&)’:
/media/jph/linuxOnlyData/spacebot/src/crustcrawler_arm/moveit_ik_plugin/src/arm_manipulator_ikfast_moveit_plugin.cpp:456:3: error: ‘redundant_joint_discretization_’ was not declared in this scope
redundant_joint_discretization_.clear();
^
/media/jph/linuxOnlyData/spacebot/src/crustcrawler_arm/moveit_ik_plugin/src/arm_manipulator_ikfast_moveit_plugin.cpp: At global scope:
/media/jph/linuxOnlyData/spacebot/src/crustcrawler_arm/moveit_ik_plugin/src/arm_manipulator_ikfast_moveit_plugin.cpp:1058:56: error: ‘kinematics::KinematicsResult’ has not been declared
kinematics::KinematicsResult& result,
^
/media/jph/linuxOnlyData/spacebot/src/crustcrawler_arm/moveit_ik_plugin/src/arm_manipulator_ikfast_moveit_plugin.cpp: In member function ‘bool ikfast_kinematics_plugin::IKFastKinematicsPlugin::getPositionIK(const std::vector<geometry_msgs::Pose_<std::allocator<void> > >&, const std::vector<double>&, std::vector<std::vector<double> >&, int&, const kinematics::KinematicsQueryOptions&) const’:
/media/jph/linuxOnlyData/spacebot/src/crustcrawler_arm/moveit_ik_plugin/src/arm_manipulator_ikfast_moveit_plugin.cpp:1066:12: error: request for member ‘kinematic_error’ in ‘result’, which is of non-class type ‘int’
result.kinematic_error = kinematics::KinematicErrors::SOLVER_NOT_ACTIVE;
^
/media/jph/linuxOnlyData/spacebot/src/crustcrawler_arm/moveit_ik_plugin/src/arm_manipulator_ikfast_moveit_plugin.cpp:1066:42: error: ‘kinematics::KinematicErrors’ has not been declared
result.kinematic_error = kinematics::KinematicErrors::SOLVER_NOT_ACTIVE;
^
/media/jph/linuxOnlyData/spacebot/src/crustcrawler_arm/moveit_ik_plugin/src/arm_manipulator_ikfast_moveit_plugin.cpp:1073:12: error: request for member ‘kinematic_error’ in ‘result’, which is of non-class type ‘int’
result.kinematic_error = kinematics::KinematicErrors::EMPTY_TIP_POSES;
^
/media/jph/linuxOnlyData/spacebot/src/crustcrawler_arm/moveit_ik_plugin/src/arm_manipulator_ikfast_moveit_plugin.cpp:1073:42: error: ‘kinematics::KinematicErrors’ has not been declared
result.kinematic_error = kinematics::KinematicErrors::EMPTY_TIP_POSES;
^
/media/jph/linuxOnlyData/spacebot/src/crustcrawler_arm/moveit_ik_plugin/src/arm_manipulator_ikfast_moveit_plugin.cpp:1080:12: error: request for member ‘kinematic_error’ in ‘result’, which is of non-class type ‘int’
result.kinematic_error = kinematics::KinematicErrors::MULTIPLE_TIPS_NOT_SUPPORTED;
^
/media/jph/linuxOnlyData/spacebot/src/crustcrawler_arm/moveit_ik_plugin/src/arm_manipulator_ikfast_moveit_plugin.cpp:1080:42: error: ‘kinematics::KinematicErrors’ has not been declared
result.kinematic_error = kinematics::KinematicErrors::MULTIPLE_TIPS_NOT_SUPPORTED;
^
/media/jph/linuxOnlyData/spacebot/src/crustcrawler_arm/moveit_ik_plugin/src/arm_manipulator_ikfast_moveit_plugin.cpp:1105:16: error: ‘const struct kinematics::KinematicsQueryOptions’ has no member named ‘discretization_method’
if(options.discretization_method == kinematics::DiscretizationMethods::NO_DISCRETIZATION &&
^
/media/jph/linuxOnlyData/spacebot/src/crustcrawler_arm/moveit_ik_plugin/src/arm_manipulator_ikfast_moveit_plugin.cpp:1105:53: error: ‘kinematics::DiscretizationMethods’ has not been declared
if(options.discretization_method == kinematics::DiscretizationMethods::NO_DISCRETIZATION &&
^
/media/jph/linuxOnlyData/spacebot/src/crustcrawler_arm/moveit_ik_plugin/src/arm_manipulator_ikfast_moveit_plugin.cpp:1114:16: error: request for member ‘kinematic_error’ in ‘result’, which is of non-class type ‘int’
result.kinematic_error = kinematics::KinematicErrors::IK_SEED_OUTSIDE_LIMITS;
^
/media/jph/linuxOnlyData/spacebot/src/crustcrawler_arm/moveit_ik_plugin/src/arm_manipulator_ikfast_moveit_plugin.cpp:1114:46: error: ‘kinematics::KinematicErrors’ has not been declared
result.kinematic_error = kinematics::KinematicErrors::IK_SEED_OUTSIDE_LIMITS;
^
/media/jph/linuxOnlyData/spacebot/src/crustcrawler_arm/moveit_ik_plugin/src/arm_manipulator_ikfast_moveit_plugin.cpp:1123:38: error: ‘const struct kinematics::KinematicsQueryOptions’ has no member named ‘discretization_method’
if(!sampleRedundantJoint(options.discretization_method,sampled_joint_vals))
^
/media/jph/linuxOnlyData/spacebot/src/crustcrawler_arm/moveit_ik_plugin/src/arm_manipulator_ikfast_moveit_plugin.cpp:1125:14: error: request for member ‘kinematic_error’ in ‘result’, which is of non-class type ‘int’
result.kinematic_error = kinematics::KinematicErrors::UNSUPORTED_DISCRETIZATION_REQUESTED;
^
/media/jph/linuxOnlyData/spacebot/src/crustcrawler_arm/moveit_ik_plugin/src/arm_manipulator_ikfast_moveit_plugin.cpp:1125:44: error: ‘kinematics::KinematicErrors’ has not been declared
result.kinematic_error = kinematics::KinematicErrors::UNSUPORTED_DISCRETIZATION_REQUESTED;
^
/media/jph/linuxOnlyData/spacebot/src/crustcrawler_arm/moveit_ik_plugin/src/arm_manipulator_ikfast_moveit_plugin.cpp:1191:14: error: request for member ‘kinematic_error’ in ‘result’, which is of non-class type ‘int’
result.kinematic_error = kinematics::KinematicErrors::OK;
^
/media/jph/linuxOnlyData/spacebot/src/crustcrawler_arm/moveit_ik_plugin/src/arm_manipulator_ikfast_moveit_plugin.cpp:1191:44: error: ‘kinematics::KinematicErrors’ has not been declared
result.kinematic_error = kinematics::KinematicErrors::OK;
^
/media/jph/linuxOnlyData/spacebot/src/crustcrawler_arm/moveit_ik_plugin/src/arm_manipulator_ikfast_moveit_plugin.cpp:1200:10: error: request for member ‘kinematic_error’ in ‘result’, which is of non-class type ‘int’
result.kinematic_error = kinematics::KinematicErrors::NO_SOLUTION;
^
/media/jph/linuxOnlyData/spacebot/src/crustcrawler_arm/moveit_ik_plugin/src/arm_manipulator_ikfast_moveit_plugin.cpp:1200:40: error: ‘kinematics::KinematicErrors’ has not been declared
result.kinematic_error = kinematics::KinematicErrors::NO_SOLUTION;
^
/media/jph/linuxOnlyData/spacebot/src/crustcrawler_arm/moveit_ik_plugin/src/arm_manipulator_ikfast_moveit_plugin.cpp: At global scope:
/media/jph/linuxOnlyData/spacebot/src/crustcrawler_arm/moveit_ik_plugin/src/arm_manipulator_ikfast_moveit_plugin.cpp:1204:63: error: ‘bool ikfast_kinematics_plugin::IKFastKinematicsPlugin::sampleRedundantJoint’ is not a static member of ‘class ikfast_kinematics_plugin::IKFastKinematicsPlugin’
bool IKFastKinematicsPlugin::sampleRedundantJoint(kinematics::DiscretizationMethod method, std::vector<double>& sampled_joint_vals) const
^
/media/jph/linuxOnlyData/spacebot/src/crustcrawler_arm/moveit_ik_plugin/src/arm_manipulator_ikfast_moveit_plugin.cpp:1204:51: error: ‘DiscretizationMethod’ is not a member of ‘kinematics’
bool IKFastKinematicsPlugin::sampleRedundantJoint(kinematics::DiscretizationMethod method, std::vector<double>& sampled_joint_vals) const
^
/media/jph/linuxOnlyData/spacebot/src/crustcrawler_arm/moveit_ik_plugin/src/arm_manipulator_ikfast_moveit_plugin.cpp:1204:111: error: expected primary-expression before ‘&’ token
bool IKFastKinematicsPlugin::sampleRedundantJoint(kinematics::DiscretizationMethod method, std::vector<double>& sampled_joint_vals) const
^
/media/jph/linuxOnlyData/spacebot/src/crustcrawler_arm/moveit_ik_plugin/src/arm_manipulator_ikfast_moveit_plugin.cpp:1204:113: error: ‘sampled_joint_vals’ was not declared in this scope
bool IKFastKinematicsPlugin::sampleRedundantJoint(kinematics::DiscretizationMethod method, std::vector<double>& sampled_joint_vals) const
^
/media/jph/linuxOnlyData/spacebot/src/crustcrawler_arm/moveit_ik_plugin/src/arm_manipulator_ikfast_moveit_plugin.cpp:1204:131: error: expression list treated as compound expression in initializer [-fpermissive]
bool IKFastKinematicsPlugin::sampleRedundantJoint(kinematics::DiscretizationMethod method, std::vector<double>& sampled_joint_vals) const
^
/media/jph/linuxOnlyData/spacebot/src/crustcrawler_arm/moveit_ik_plugin/src/arm_manipulator_ikfast_moveit_plugin.cpp:1204:133: error: expected ‘,’ or ‘;’ before ‘const’
bool IKFastKinematicsPlugin::sampleRedundantJoint(kinematics::DiscretizationMethod method, std::vector<double>& sampled_joint_vals) const
^
/media/jph/linuxOnlyData/spacebot/src/crustcrawler_arm/moveit_ik_plugin/src/arm_manipulator_ikfast_moveit_plugin.cpp:1258:101: error: expected ‘}’ at end of input
PLUGINLIB_EXPORT_CLASS(ikfast_kinematics_plugin::IKFastKinematicsPlugin, kinematics::KinematicsBase);
^
make[2]: *** [crustcrawler_arm/moveit_ik_plugin/CMakeFiles/arm_manipulator_moveit_ikfast_plugin.dir/src/arm_manipulator_ikfast_moveit_plugin.cpp.o] Error 1
make[1]: *** [crustcrawler_arm/moveit_ik_plugin/CMakeFiles/arm_manipulator_moveit_ikfast_plugin.dir/all] Error 2
make: *** [all] Error 2
Invoking "make -j4 -l4" failed
$ rosrun moveit_ikfast create_ikfast_moveit_plugin.py korus arm korus_moveit_ikfast_plugin /home/marcus/.openrave/kinematics.e949180cc0c529f8201273314f70614a/ikfast61.TranslationZAxisAngle4D.0_2_3_4_f1.cpp
IKFast Plugin Generator
Loading robot from 'korus_moveit_config' package ...
Creating plugin in 'korus_moveit_ikfast_plugin' package ...
found 3 planning groups: arm, gripper, head
found group 'arm'
found source code generated by IKFast version 61
ERROR: can't find template file at '/opt/ros/hydro/share/moveit_ikfast/templates/ikfast61_moveit_plugin_template.cpp'
From a generated CMakeLists.txt
:
catkin_package(
LIBRARIES
DEPENDS
moveit_core
pluginlib
roscpp
tf_conversions
)
Shouldn't all the packages listed under DEPENDS
really be CATKIN_DEPENDS
?
The current package generated by moveit_ikfast
is not easily used as a library. Some ikfast functionality, such as returning multiple IK results, may be useful. Because such functionality is outside the IK plugin definition, it is not generally available. The following is a list of issues that prevent a generated package from being included as a library:
Seems #29 introduced a bug in the package manifest generation: run_depends
dependencies are missing from the manifest in newly generated plugin packages.
Kuka has weired ideas about axis of rotation, with j1, j4, and j6 being left-handed while j2, j3 and j5 are normal right handed. ikfast fails to generate a solution for j1 being left-handed (ie axis of rotation is negative). See rdiankov/openrave#385 for a upstream bug report. I worked around this by creating a ikfast solution with a right handed j1 and flipping values in IKFastKinematicsPlugin::getPositionIK.
Do you think I should generalize my hack and open a pull request? Read in a value from parameter server and flip j1 according to this? (it does not seem necessary to flip other axis)
see my kuka_experimental fork for the current hack
https://github.com/simonschmeisser/kuka_experimental/blob/hydro-devel/kuka_kr60ha_moveit_plugins/src/kuka_kr60ha_manipulator_ikfast_moveit_plugin.cpp
Based on this email to the moveit-users group.
The current CMakeLists.txt
template installs the contents of the include
directory of generated plugin packages into ROS_ROOT/include
upon invocation of catkin_make install
.
Following the latest Groovy Debian update (ros_comm version 1.9.47), my moveit_ikfast plugins no longer build. Below is a sample output when I run catkin_make:
Base path: /home/patrick/catkin_ws
Source space: /home/patrick/catkin_ws/src
Build space: /home/patrick/catkin_ws/build
Devel space: /home/patrick/catkin_ws/devel
Install space: /home/patrick/catkin_ws/install
-- Using CATKIN_DEVEL_PREFIX: /home/patrick/catkin_ws/devel
-- Using CMAKE_PREFIX_PATH: /home/patrick/catkin_ws/devel;/opt/ros/groovy
-- This workspace overlays: /home/patrick/catkin_ws/devel;/opt/ros/groovy
-- Using Debian Python package layout
-- Using CATKIN_ENABLE_TESTING: ON
-- Call enable_testing()
-- Using CATKIN_TEST_RESULTS_DIR: /home/patrick/catkin_ws/build/test_results
-- Found gtest sources under '/usr/src/gtest': gtests will be built
-- catkin 0.5.71
-- BUILD_SHARED_LIBS is on
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-- ~~ traversing 5 packages in topological order:
-- ~~ - moveit_ikfast
-- ~~ - moveit_plugins (metapackage)
-- ~~ - moveit_simple_controller_manager
-- ~~ - pedestal_pi_head
-- ~~ - pedestal_pi_right_arm
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-- +++ processing catkin package: 'moveit_ikfast'
-- ==> add_subdirectory(moveit_ikfast)
-- +++ processing catkin metapackage: 'moveit_plugins'
-- ==> add_subdirectory(moveit_plugins/moveit_plugins)
-- +++ processing catkin package: 'moveit_simple_controller_manager'
-- ==> add_subdirectory(moveit_plugins/moveit_simple_controller_manager)
-- +++ processing catkin package: 'pedestal_pi_head'
-- ==> add_subdirectory(pedestal_pi_head)
-- Eigen found (include: /usr/include/eigen3)
-- A library with BLAS API found.
-- A library with LAPACK API found.
-- +++ processing catkin package: 'pedestal_pi_right_arm'
-- ==> add_subdirectory(pedestal_pi_right_arm)
-- Eigen found (include: /usr/include/eigen3)
-- A library with BLAS API found.
-- A library with LAPACK API found.
-- Configuring done
-- Generating done
-- Build files have been written to: /home/patrick/catkin_ws/build
[ 33%] [ 66%] [100%] Building CXX object pedestal_pi_right_arm/CMakeFiles/pedestal_pi_no_gripper_right_arm_moveit_ikfast_plugin.dir/src/pedestal_pi_no_gripper_right_arm_ikfast_moveit_plugin.cpp.o
Building CXX object moveit_plugins/moveit_simple_controller_manager/CMakeFiles/moveit_simple_controller_manager.dir/src/moveit_simple_controller_manager.cpp.o
Building CXX object pedestal_pi_head/CMakeFiles/pedestal_pi_no_gripper_head_moveit_ikfast_plugin.dir/src/pedestal_pi_no_gripper_head_ikfast_moveit_plugin.cpp.o
Linking CXX shared library /home/patrick/catkin_ws/devel/lib/libmoveit_simple_controller_manager.so
[100%] Built target moveit_simple_controller_manager
In file included from /opt/ros/groovy/include/class_loader/class_loader_core.h:39:0,
from /opt/ros/groovy/include/class_loader/class_loader_register_macro.h:33,
from /opt/ros/groovy/include/class_loader/class_loader.h:39,
from /opt/ros/groovy/include/pluginlib/class_list_macros.h:40,
from /home/patrick/catkin_ws/src/pedestal_pi_head/src/pedestal_pi_no_gripper_head_ikfast_moveit_plugin.cpp:827:
/opt/ros/groovy/include/class_loader/meta_object.h: In member function ‘B* class_loader::class_loader_private::MetaObject<C, B>::create() const [with C = ikfast_kinematics_plugin::IKFastKinematicsPlugin, B = kinematics::KinematicsBase]’:
/home/patrick/catkin_ws/src/pedestal_pi_head/src/pedestal_pi_no_gripper_head_ikfast_moveit_plugin.cpp:828:559: instantiated from here
/opt/ros/groovy/include/class_loader/meta_object.h:193:17: error: cannot allocate an object of abstract type ‘ikfast_kinematics_plugin::IKFastKinematicsPlugin’
/home/patrick/catkin_ws/src/pedestal_pi_head/src/pedestal_pi_no_gripper_head_ikfast_moveit_plugin.cpp:64:7: note: because the following virtual functions are pure within ‘ikfast_kinematics_plugin::IKFastKinematicsPlugin’:
/opt/ros/groovy/include/moveit/kinematics_base/kinematics_base.h:90:16: note: virtual bool kinematics::KinematicsBase::getPositionIK(const Pose&, const std::vector&, std::vector&, moveit_msgs::MoveItErrorCodes&, const kinematics::KinematicsQueryOptions&) const
/opt/ros/groovy/include/moveit/kinematics_base/kinematics_base.h:108:16: note: virtual bool kinematics::KinematicsBase::searchPositionIK(const Pose&, const std::vector&, double, std::vector&, moveit_msgs::MoveItErrorCodes&, const kinematics::KinematicsQueryOptions&) const
/opt/ros/groovy/include/moveit/kinematics_base/kinematics_base.h:128:16: note: virtual bool kinematics::KinematicsBase::searchPositionIK(const Pose&, const std::vector&, double, const std::vector&, std::vector&, moveit_msgs::MoveItErrorCodes&, const kinematics::KinematicsQueryOptions&) const
/opt/ros/groovy/include/moveit/kinematics_base/kinematics_base.h:150:16: note: virtual bool kinematics::KinematicsBase::searchPositionIK(const Pose&, const std::vector&, double, std::vector&, const IKCallbackFn&, moveit_msgs::MoveItErrorCodes&, const kinematics::KinematicsQueryOptions&) const
/opt/ros/groovy/include/moveit/kinematics_base/kinematics_base.h:173:16: note: virtual bool kinematics::KinematicsBase::searchPositionIK(const Pose&, const std::vector&, double, const std::vector&, std::vector&, const IKCallbackFn&, moveit_msgs::MoveItErrorCodes&, const kinematics::KinematicsQueryOptions&) const
make[2]: *** [pedestal_pi_head/CMakeFiles/pedestal_pi_no_gripper_head_moveit_ikfast_plugin.dir/src/pedestal_pi_no_gripper_head_ikfast_moveit_plugin.cpp.o] Error 1
make[1]: *** [pedestal_pi_head/CMakeFiles/pedestal_pi_no_gripper_head_moveit_ikfast_plugin.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
In file included from /opt/ros/groovy/include/class_loader/class_loader_core.h:39:0,
from /opt/ros/groovy/include/class_loader/class_loader_register_macro.h:33,
from /opt/ros/groovy/include/class_loader/class_loader.h:39,
from /opt/ros/groovy/include/pluginlib/class_list_macros.h:40,
from /home/patrick/catkin_ws/src/pedestal_pi_right_arm/src/pedestal_pi_no_gripper_right_arm_ikfast_moveit_plugin.cpp:827:
/opt/ros/groovy/include/class_loader/meta_object.h: In member function ‘B* class_loader::class_loader_private::MetaObject<C, B>::create() const [with C = ikfast_kinematics_plugin::IKFastKinematicsPlugin, B = kinematics::KinematicsBase]’:
/home/patrick/catkin_ws/src/pedestal_pi_right_arm/src/pedestal_pi_no_gripper_right_arm_ikfast_moveit_plugin.cpp:828:569: instantiated from here
/opt/ros/groovy/include/class_loader/meta_object.h:193:17: error: cannot allocate an object of abstract type ‘ikfast_kinematics_plugin::IKFastKinematicsPlugin’
/home/patrick/catkin_ws/src/pedestal_pi_right_arm/src/pedestal_pi_no_gripper_right_arm_ikfast_moveit_plugin.cpp:64:7: note: because the following virtual functions are pure within ‘ikfast_kinematics_plugin::IKFastKinematicsPlugin’:
/opt/ros/groovy/include/moveit/kinematics_base/kinematics_base.h:90:16: note: virtual bool kinematics::KinematicsBase::getPositionIK(const Pose&, const std::vector&, std::vector&, moveit_msgs::MoveItErrorCodes&, const kinematics::KinematicsQueryOptions&) const
/opt/ros/groovy/include/moveit/kinematics_base/kinematics_base.h:108:16: note: virtual bool kinematics::KinematicsBase::searchPositionIK(const Pose&, const std::vector&, double, std::vector&, moveit_msgs::MoveItErrorCodes&, const kinematics::KinematicsQueryOptions&) const
/opt/ros/groovy/include/moveit/kinematics_base/kinematics_base.h:128:16: note: virtual bool kinematics::KinematicsBase::searchPositionIK(const Pose&, const std::vector&, double, const std::vector&, std::vector&, moveit_msgs::MoveItErrorCodes&, const kinematics::KinematicsQueryOptions&) const
/opt/ros/groovy/include/moveit/kinematics_base/kinematics_base.h:150:16: note: virtual bool kinematics::KinematicsBase::searchPositionIK(const Pose&, const std::vector&, double, std::vector&, const IKCallbackFn&, moveit_msgs::MoveItErrorCodes&, const kinematics::KinematicsQueryOptions&) const
/opt/ros/groovy/include/moveit/kinematics_base/kinematics_base.h:173:16: note: virtual bool kinematics::KinematicsBase::searchPositionIK(const Pose&, const std::vector&, double, const std::vector&, std::vector&, const IKCallbackFn&, moveit_msgs::MoveItErrorCodes&, const kinematics::KinematicsQueryOptions&) const
make[2]: *** [pedestal_pi_right_arm/CMakeFiles/pedestal_pi_no_gripper_right_arm_moveit_ikfast_plugin.dir/src/pedestal_pi_no_gripper_right_arm_ikfast_moveit_plugin.cpp.o] Error 1
make[1]: *** [pedestal_pi_right_arm/CMakeFiles/pedestal_pi_no_gripper_right_arm_moveit_ikfast_plugin.dir/all] Error 2
make: *** [all] Error 2
Invoking "make" failed
I'd like to try using these IK types. If implemented, I can try testing them to see if they work.
I see differences between indigo and jade for this package. Was the intention to sync them before doing a release? @jrgnicho
As per subject.
The generated CMakeLists.txt
does not take the planning group name into account when setting up the install rule for the *_plugin_description.xml
file. The group name is used when creating the plugin description file itself in create_ikfast_moveit_plugin.py
, causing errors upon trying to install the package.
The CMakeLists.txt
of generated packages contains the following line:
link_directories(${catkin_LIBRARY_DIRS})
This would seem to be unnecessary as catkin / cmake link all libraries using absolute paths. According to the docs, it could also lead to subtle bugs trying to find libraries and resolving symbols.
Can this line be removed from the generated CMakeLists.txt
? Or is it required to compile the plugin packages? Some simple tests suggest it is not.
As per title. See also ros-industrial/abb#52.
The generated CMakeLists.txt
contains:
find_package(LAPACK REQUIRED)
but the package manifest doesn't state this build_depend
.
I finally got around to updating Baxter's ikfast plugins using the new #37 but unfortuantly I have found that the change has caused the IK solver to be incredibly slow. I suspect the robot the PR was tested on had much less redudancy, and so no performance difference was experienced. With the 7dof Baxter arms I am finding that ikfast will loop through ~530 ik solutions each request, requiring the cost of each solution to be calculated. I dug deeper into the code and I found that the best "cheapest" solution is almost always found between 1 and 30 iterations - meaning the remaining 500 checks are a waste of time.
The MoveIt Motion Planning Plugin using IKFast is now almost unusable.
These are preliminary ideas, but with Baxter I have added the following logic:
You can see a messy hack for this in this commit:
davetcoleman/baxter_cpp@407d72d
Note that I also had to reduce the kinematic.yaml settings for better performance.
Even with these changes response time is slower for Baxter, though the solutions are much smoother/better.
The build files do not install templates/ikfast.h, so this package only works when people check out the source, not when they install the debian package.
The treatment of different IK types introduced in commit 50a7e29 spawns error messages like "You need to #define a IKTYPE_!" because nowhere in the process described in http://moveit.ros.org/wiki/Kinematics/IKFast any IKTYPE like IKTYPE_TRANSFORM_6D is defined in a generated source file.
I tried to track down the place where this define should be set, but couldn't figure out whether the error originally stems from the OpenRave IKFast package or from moveit_ikfast.
@nalt can you add a small bit of documentation about this new option you've added and how to turn it on? it should go on this page: http://docs.ros.org/hydro/api/moveit_ikfast/html/doc/ikfast_tutorial.html which you can edit here: https://github.com/ros-planning/moveit_ikfast/blob/indigo-devel/doc/ikfast_tutorial.rst
Also, in indigo-devel did you set the option to be enabled by default? Can we do that please?
Thanks!
So I've been building the software on the Descartes side necessary to interface with the changes in #57 and it's Jade equivalent.
One of the debug statements is built from a std::stringstream
, and in an optimized build of a workspace, running on a representative problem, this stringstream is eating more than 60% of the runtime involved with the IK calls.
All of this for:
ROS_DEBUG_NAMED("ikfast","Sol %d: %s", s, ss.str().c_str());
I recently run into issue with generating ikfast on ros-kinetic. I downloaded and compiled moveit_ikfast kinetic devel. I also generated my ikfast.cpp file and created ikfast plugin. When trying to build ikfast package I am getting following error.
In file included from /opt/ros/kinetic/include/moveit/macros/class_forward.h:40:0,
from /opt/ros/kinetic/include/moveit/kinematics_base/kinematics_base.h:42,
from /root/catkin_ws/src/abb/abb_irb1600_ikfast_plugin/src/abb_irb1600_mts_manipulator_ikfast_moveit_plugin.cpp:49:
/opt/ros/kinetic/include/moveit/macros/declare_ptr.h:52:16: error: ‘shared_ptr’ in namespace ‘std’ does not name a template type
typedef std::shared_ptr Name##Ptr;
^
/opt/ros/kinetic/include/moveit/macros/class_forward.h:51:3: note: in expansion of macro ‘MOVEIT_DECLARE_PTR’
MOVEIT_DECLARE_PTR(C, C);
^
/opt/ros/kinetic/include/moveit/kinematics_base/kinematics_base.h:137:1: note: in expansion of macro ‘MOVEIT_CLASS_FORWARD’
MOVEIT_CLASS_FORWARD(KinematicsBase);
^
/opt/ros/kinetic/include/moveit/macros/declare_ptr.h:53:16: error: ‘shared_ptr’ in namespace ‘std’ does not name a template type
typedef std::shared_ptr Name##ConstPtr;
^
/opt/ros/kinetic/include/moveit/macros/class_forward.h:51:3: note: in expansion of macro ‘MOVEIT_DECLARE_PTR’
MOVEIT_DECLARE_PTR(C, C);
^
/opt/ros/kinetic/include/moveit/kinematics_base/kinematics_base.h:137:1: note: in expansion of macro ‘MOVEIT_CLASS_FORWARD’
MOVEIT_CLASS_FORWARD(KinematicsBase);
^
abb/abb_irb1600_ikfast_plugin/CMakeFiles/abb_irb1600_mts_manipulator_moveit_ikfast_plugin.dir/build.make:62: recipe for target 'abb/abb_irb1600_ikfast_plugin/CMakeFiles/abb_irb1600_mts_manipulator_moveit_ikfast_plugin.dir/src/abb_irb1600_mts_manipulator_ikfast_moveit_plugin.cpp.o' failed
make[2]: *** [abb/abb_irb1600_ikfast_plugin/CMakeFiles/abb_irb1600_mts_manipulator_moveit_ikfast_plugin.dir/src/abb_irb1600_mts_manipulator_ikfast_moveit_plugin.cpp.o] Error 1
CMakeFiles/Makefile2:13767: recipe for target 'abb/abb_irb1600_ikfast_plugin/CMakeFiles/abb_irb1600_mts_manipulator_moveit_ikfast_plugin.dir/all' failed
make[1]: *** [abb/abb_irb1600_ikfast_plugin/CMakeFiles/abb_irb1600_mts_manipulator_moveit_ikfast_plugin.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
[100%] Built target binpicking_demo
Makefile:138: recipe for target 'all' failed
make: *** [all] Error 2
Invoking "make -j8 -l8" failed
Thank you for your help
My setup is Ubuntu 14.04 and ROS Indigo Debian install. I am using version 0.9 of OpenRave, source install since Debian packages for Ubuntu 14.04 are not yet available.
After building the .cpp file using OpenRave's ipfast.py utility, I get the following error when trying to build the plugin:
$ rosrun moveit_ikfast create_ikfast_moveit_plugin.py pi_robot right_arm pi_robot_ikfast_right_arm_plugin `pwd`/output_ikfast61.cpp
Warning: The default search has changed from OPTIMIZE_FREE_JOINT to now OPTIMIZE_MAX_JOINT!
IKFast Plugin Generator
Loading robot from 'pi_robot_moveit_config' package ...
Creating plugin in 'pi_robot_ikfast_right_arm_plugin' package ...
found 2 planning groups: right_arm, right_gripper
found group 'right_arm'
Traceback (most recent call last):
File "/opt/ros/indigo/lib/moveit_ikfast/create_ikfast_moveit_plugin.py", line 178, in <module>
solver_version = int(line_search.group(1))
ValueError: invalid literal for int() with base 10: '0x10000048'
My output_ikfast.cpp file can be found here.
IKFastKinematicsPlugin::getPositionFK(...) still relies on the IKTYPE_TRANSFORM_6D define which was otherwise eliminated by @mintar in pull request #13. Probably, GetIkType() would work here as well similar to #13.
I'd have removed it myself, but don't know what the implications are, so I'd rather let it to someone who is sure of what they are doing.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.