1

We're a group of students working on our bachelor's degree, We encountered a problem where we need to generate a sequence of trajectory goals (pose,velocity,acc) (Collision free) for a 6 D.O.F robot arm using ROS's moveit while the robot model and collisions are set in Rviz's environment, the main objective is for the robot to hit a ball with a racket so that's why we need to send a sequence of goals so that it can apply the hitting force to the ball and not just go to the ball's position and have zero acc when reaching it.

Please, any help would be appreciated:)

  • Is the ball stationary when it's hit? Are there just keypoints that constitute your trajectory goals (e.g. start pose, pose at time of contact with ball, final pose). – adamconkey Oct 18 '18 at 05:21
  • At the time of hitting, the ball isn't stationary, and yes we have the three key points you mentioned. – Yousefaboelm3aty Oct 18 '18 at 18:15
  • How will you know what pose at contact time to plan for then if the ball is moving? – adamconkey Oct 18 '18 at 22:14
  • We will use deep learning to make a prediction on the ball trajectory given a sequence of frames( Binarized frames where the ball is white and the background is black) and the exact 3-D position of the ball at each frame in the beginning of the trajectory. We already implemented the ball 3-D tracking part, we use an active stereo camera for 3d positioning and using Template Matching to detect the ball but still some optimizations are needed to improve fps. The prediction algorithm is still under development. – Yousefaboelm3aty Oct 19 '18 at 02:08

1 Answers1

0

It looks like there are a couple possibilities. One is you can plan over Cartesian paths with MoveIt:

moveit::planning_interface::MoveGroup group("right_arm");
std::vector<geometry_msgs::Pose> waypoints;
geometry_msgs::Pose target_pose3 = start_pose;
geometry_msgs::Pose target_pose3 = waypoint_pose;
waypoint_pose.position.x += 0.2;
waypoints.push_back(waypoint_pose); // Add first waypoint 
waypoint_pose.position.y -= 0.2;
waypoints.push_back(waypoint_pose); // Add second waypoint

// Compute the Cartesian trajectory (stored in a RobotTrajectory)
moveit_msgs::RobotTrajectory trajectory;
group.computeCartesianPath(waypoints,
                           0.01,  // task space stepsize (meters)
                           0.0,   // jump threshold
                           trajectory);

The disadvantage there might be that I'm not sure you can specify desired velocities and accelerations at each waypoint, so if you have those constraints this option may not work for you.

Another option may be Descartes which does Cartesian path planning. There are tutorials here and here, and there's some discussion on Descartes/MoveIt! integration. This page looks like it has a lot of documentation on Descartes.

adamconkey
  • 4,104
  • 5
  • 32
  • 61
  • The Cartesian path method doesn't seem to solve the problem of specifying the goal velocity, but i don't know about Descartes, i will definitely check it out and see if it solves the problem. – Yousefaboelm3aty Oct 19 '18 at 02:16