Important announcement

Dear visitor,

Please note that this OpenCourseWare platform will be replaced at the end of 2026 by a new platform (under the same url ocw.tudelft.nl).

Courses and their contents that are currently available the platform will partly be migrated. URL’s for this content will change and content might be unavailable for some time. In addition, some courses will not be available anymore.

If you are linking to specific courses on this platform (for instance for your students), please take timely measures to avoid problems with access. Possible actions are:

  • Download the materials to your local platform (laptop, server)
  • For educators only (including TU Delft lecturers): Contact us at ocw@tudelft.nl and inform us what course you are using in what context (institute, program, period of use, number of students). We will research (in collaboration with the authors of the course) and decide if we will migrate the course, and if yes, can supply you with a new url.

Thank you.

4.5.3 Pick & Place: Part 2

Course subject(s) Module 4. Manipulation

In this lecture, we will continue with composing a simple pick and place pipeline with different MoveGroup APIs.

Testing our pick and place pipeline:

Start the factory simulation.
$roslaunch hrwros_gazebo hrwros_environment.launch

In a new terminal source our setup files.
$ source $HOME/hrwros_ws/devel/setup.bash
$ roscd hrwros_week4/scripts/

Uncomment the following function in .../hrwros_week4/scripts/simple_pick_place.py (#L84):
robot1_client.wait_for_result()

Make the script executable and run it.
$ chmod +x simple_pick_place.py
$ rosrun hrwros_week4 simple_pick_place.py

Now let’s test the nonblocking execution. Open up .../hrwros_week4/scripts/simple_pick_place.py:

Remove the following function and restart the script (#L84).
robot1_client.wait_for_result()

Results of first robot:

  • Preemption of the first goal
  • Only the second was executed

Results second robot:

  • Two separate clients which send information to the same server
  • Blocking

Waypoints:

  • Poses of robot end effector
  • Timing synchronisation results in an incorrect pose
      •  Issues with get_current_pose() API
      • Fixed with delay

current_pose = robot1_group.get_current_pose()
rospy.sleep(0.5)
current_pose = robot1_group.get_current_pose()

  • Waypoints should only consist of pose messages
  • Linear offsets with geometry_msgs.msg.Pose().

Pose stamped messages consists of timing and reference frame information along with the pose message type.  The extraction of the pose message can be done as following: current_pose.pose.position.x +0.10

Finally, we can add the newly created waypoint and the current pose.

Creative Commons License
Hello (Real) World with ROS - Robot Operating System by TU Delft OpenCourseWare is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
Based on a work at https://online-learning.tudelft.nl/courses/hello-real-world-with-ros-robot-operating-systems//.
Back to top
[sg_popup id=6]