SkillAgentSearch skills...

Mobipick

ROS configuration files (URDF description, Gazebo launch files, MoveIt config, bringup launch files) for the Mobipick robot (MiR 100 base, UR5 arm, Robotiq 2 Finger Gripper + Force-Torque Sensor, Orbbec Astra Mini S 3D camera).

Install / Use

/learn @DFKI-NI/Mobipick
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

mobipick

pipeline status

This repo contains ROS configuration files (URDF description, Gazebo launch files, MoveIt config, bringup launch files) for the Mobipick robot (MiR 100 base, UR5 arm, Robotiq 2 Finger Gripper + Force-Torque Sensor, Orbbec Astra Mini S 3D camera).

The Mobipick robot at the Hannover Messe

Package overview

  • mobipick_bringup: Launch and configuration files for the real Mobipick robot
  • mobipick_description: URDF description of the robot
  • mobipick_gazebo: Simulation specific launch and configuration files
  • mobipick_moveit_config: MoveIt! launch and configuration files
  • mobipick_pick_n_place: Some demo nodes that show off the MoveIt capabilities of the robot

Installation

First, install ROS. Then:

# create a catkin workspace and clone all required ROS packages
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src/
git clone -b noetic <URL of this repo>

mobipick/install-deps.sh
mobipick/build.sh

You can also optionally install the dependencies in dependencies-optional.rosinstall; simply uncomment the relevant line in install-deps.sh before running it.

You should add the following line to the end of your ~/.bashrc, and then close and reopen all terminals:

source ~/catkin_ws/devel/setup.bash

Note: Since we are using the devel space, some nodes still have the #!/usr/bin/env python shebang line. If this leads to an error, simply install the package python-is-python3.

Quick start

The following examples describe how to use the robot in simulation. For more information on how to use the real mobipick robot have a look at the README.md in mobipick_bringup.

Pick + Place with move_base demo (Berghoffstraße)

Video: Mobipick pick + place demo (Gazebo)

roslaunch mobipick_gazebo mobipick_moelk.launch
rosservice call /gazebo/unpause_physics
roslaunch mir_gazebo fake_localization.launch __ns:="mobipick" odom_frame_id:="mobipick/odom" base_frame_id:="mobipick/base_footprint"
roslaunch mir_navigation start_planner.launch map_file:=$(rospack find pbr_maps)/maps/moelk/pbr_robot_lab.yaml virtual_walls_map_file:=$(rospack find pbr_maps)/maps/moelk/pbr_robot_lab_virtual_walls.yaml  prefix:="mobipick/"
roslaunch mobipick_moveit_config moveit_planning_execution.launch
rviz -d $(rospack find mir_navigation)/rviz/navigation.rviz __ns:="mobipick"
roslaunch mobipick_pick_n_place mobipick_pick_n_place.launch simulation:=true
rosservice call /mobipick/continue_statemachine

There exists also an analogous demo using BehaviorTree.CPP instead of a state machine. The implementation doesn't support pausing as easily, however, so this functionality is removed. The graphical editor Groot is integrated in this demo. To see its visualization, run rosrun groot Groot and connect the monitor with default settings after the behavior tree started.

roslaunch mobipick_gazebo mobipick_moelk.launch
rosservice call /gazebo/unpause_physics
roslaunch mir_gazebo fake_localization.launch __ns:="mobipick" odom_frame_id:="mobipick/odom" base_frame_id:="mobipick/base_footprint"
roslaunch mir_navigation start_planner.launch map_file:=$(rospack find pbr_maps)/maps/moelk/pbr_robot_lab.yaml virtual_walls_map_file:=$(rospack find pbr_maps)/maps/moelk/pbr_robot_lab_virtual_walls.yaml  prefix:="mobipick/"
roslaunch mobipick_moveit_config moveit_planning_execution.launch
rviz -d $(rospack find mir_navigation)/rviz/navigation.rviz __ns:="mobipick"
roslaunch mobipick_pick_n_place moveit_macros.launch
roslaunch mobipick_pick_n_place mobipick_pick_n_place_bt.launch simulation:=true
rosrun groot Groot  # and connect the monitor with default settings

For both state machine and behavior tree version, optionally execute rosservice call /mobipick/simulate_user_interaction during the user interaction step to fake taking the power drill.

Pick + Place demo (MoveIt! demo mode)

Video: Mobipick pick + place demo (Gazebo)

roslaunch mobipick_moveit_config demo.launch
roslaunch mobipick_pick_n_place mobipick_pick_n_place.launch simulation:=true object_source:=static
rosservice call /mobipick/continue_statemachine
  • Make sure that the parameter use_sim_time is set to false.
  • You can play around with different planning pipelines, which you can select in the the "MotionPlanning" pane in RViz under "Context".
    • ompl is a collection of sampling-based motion planning algorithms and is used in the pick_n_place demos. ompl is the default in MoveIt.
    • chomp is a gradient-based trajectory optimization procedure that can be used instead of a motion planner.
    • ompl_chomp uses the OMPL planning pipeline, but adds the CHOMP planning adapter.
    • pilz_industrial_motion_planner is a simplistic motion planning pipeline that works for simple motions. It is somewhat hard to control from RViz, but the PTP planner works.

move_base demo (maze world)

roslaunch mobipick_gazebo mobipick_maze_world.launch
rosservice call /gazebo/unpause_physics   # or click the "start" button in the Gazebo GUI
roslaunch mir_gazebo fake_localization.launch __ns:="mobipick" odom_frame_id:="mobipick/odom" base_frame_id:="mobipick/base_footprint" delta_x:=-10.0 delta_y:=-10.0
ROS_NAMESPACE=mobipick rosrun mobipick_gazebo move_arm_to_home
roslaunch mir_navigation start_planner.launch \
    map_file:=$(rospack find mir_gazebo)/maps/maze.yaml prefix:="mobipick/" \
    virtual_walls_map_file:=$(rospack find mir_gazebo)/maps/maze_virtual_walls.yaml
rviz -d $(rospack find mir_navigation)/rviz/navigation.rviz __ns:="mobipick"

Now, you can use the "2D Nav Goal" tool in RViz to set a navigation goal for move_base.

move_base demo (MRK lab world)

roslaunch mobipick_gazebo mobipick_mrk_lab_world.launch
rosservice call /gazebo/unpause_physics   # or click the "start" button in the Gazebo GUI
roslaunch mir_gazebo fake_localization.launch __ns:="mobipick" odom_frame_id:="mobipick/odom" base_frame_id:="mobipick/base_footprint"
ROS_NAMESPACE=mobipick rosrun mobipick_gazebo move_arm_to_home
roslaunch mir_navigation start_planner.launch \
    map_file:=$(rospack find mobipick_gazebo)/maps/rh5_mrk_lab.yaml prefix:="mobipick/"
rviz -d $(rospack find mir_navigation)/rviz/navigation.rviz __ns:="mobipick"

Now, you can use the "2D Nav Goal" tool in RViz to set a navigation goal for move_base.

Pick + Place with demo (Smart Factory)

roslaunch mobipick_gazebo mobipick_smart_factory.launch
rosservice call /gazebo/unpause_physics
roslaunch mir_gazebo fake_localization.launch __ns:="mobipick" odom_frame_id:="mobipick/odom" base_frame_id:="mobipick/base_footprint" delta_yaw:=1.57 delta_x:=-11.77 delta_y:=-19.74
roslaunch mir_navigation start_planner.launch map_file:=$(rospack find mobipick_gazebo)/maps/smart_factory.yaml prefix:="mobipick/" with_virtual_walls:=true virtual_walls_map_file:=$(rospack find mobipick_gazebo)/maps/smart_factory_objects.yaml
roslaunch mobipick_moveit_config moveit_planning_execution.launch
rviz -d $(rospack find mir_navigation)/rviz/navigation.rviz __ns:="mobipick"
roslaunch mobipick_pick_n_place mobipick_pick_n_place.launch simulation:=true world_config:="smart_factory"
rosservice call /mobipick/continue_statemachine

Rosbridge with websockets

roslaunch rosbridge_server rosbridge_websocket.launch port:=9090

Using the arm velocity controller or position controller

If you want to use the velocity/position controller for the arm, add arm_controller:=velocity/position to any of the launch files, like so:

roslaunch mobipick_gazebo mobipick_table_world.launch arm_controller:=velocity # or arm_controller:=position
rosservice call /gazebo/unpause_physics   # or click the "start" button in the Gazebo GUI

Now you can send velocity commands to the arm directly, like this:

rostopic pub /arm_velocity_controller/command std_msgs/Float64MultiArray "data: [0.4, 0.1, -0.1, 0, 0, 0]"

In this configuration, MoveIt won't work however, since MoveIt requires the joint trajectory controller instead of the velocity controller (because MoveIt is a joint trajectory client).

You can switch to the arm trajectory controller like this:

rosrun controller_manager controller_manager stop arm_velocity_controller
rosrun controller_manager controller_manager start arm_controller

This also works the other way around, e.g. if you didn't add the arm_controller:=velocity argument to the launch file:

rosrun controller_manager controller_manager stop arm_controller
rosrun controller_manager controller_manager start arm_velocity_controller

If you prefer a graphical interface, try this:

rosrun rqt_controller_manager rqt_controller_manager

Updating the SRDF

Whenever the URDF of the robot changes, the SRDF has to be updated as well. Since we changed the URDF to xacro, the following process is necessary (assuming you are using the Mobipick robot from PBR-Osnabrück, for RIC-Bremen change "os" to "hb"):

roscd mobipick_moveit_config/conf
View on GitHub
GitHub Stars43
CategoryDevelopment
Updated14d ago
Forks2

Languages

C++

Security Score

75/100

Audited on Mar 9, 2026

No findings