Harnessing the Power of ROS and MoveIt in Robotic Arm Manipulation

  • Introduction

    This article will document my experience using myCobot 280 M5stack in ROS. Why use ROS? Because when it comes to robotics, it's hard to avoid the ROS operating system.
    Today is our first time using this system. Today, I will start with an introduction to ROS, the configuration of the environment, and the use of mycobot280 in ROS.


    ROS (Robot Operating System) is a flexible framework for writing robot software. It is a semi-open source project that provides researchers and developers with a set of tools and libraries to help them create various robot applications. ROS is mainly used for research and development of various robot systems, such as autonomous vehicles, service robots, industrial robots, drones, etc. It makes the development of robots more efficient and enhances the functionality and flexibility of robots. The two most notable modules in the ROS operating system are navigation and robotic arm control (moveit). Moveit allows users to quickly build robotic arm models and implement robotic arm control, such as modeling, kinematic solution, motion planning, obstacle avoidance, and more. Given such a powerful system, I want to use it to simulate some functions of the robotic arm, such as obstacle avoidance, path planning, etc.
    alt text

    Environment configuration

    ROS primarily supports operating systems like Ubuntu (Linux) and Mac OS (with partial support). The most common usage is on the Ubuntu system. My computer is installed with Ubuntu 18.04 version. The corresponding ROS version for Ubuntu 18 is Melodic. Different versions of Ubuntu correspond to different ROS versions.


    Since my computer has already had the system and ROS environment installed, I won’t record each step here. The main focus will be on the operations within ROS. For the installation of the Ubuntu system and the setup of the ROS environment, you can search on Google. The ROS official website also has detailed installation tutorials.
    The scenario I’m using today involves controlling a robotic arm with MoveIt, so the demand for computer hardware is not high. Please note that if you are using features like SLAM radar navigation, you might need a higher-spec computer to handle the computational power. The standard to check whether ROS has been successfully installed is to open the terminal and type “roscore”. If the content that appears is the same as the image below, it means the installation was successful.
    alt text
    Let’s use the ROS!


    To create a robotic arm in ROS and use some path planning features, you need to perform the following steps:

    • list itemCreate a URDF file, which is the model of the robotic arm.

    • list itemLoad the URDF file into the ROS server.

    • list itemUse RViz for visualization.

    • list itemCreate a MoveIt configuration package.

    • list itemUse MoveIt for motion planning.

    Creating a URDF file

    Creating a URDF file First, we need to create a URDF (Unified Robot Description Format) file for the robotic arm. This file is crucial as it describes the properties of the robotic arm, such as joints, links, and sensors, in the form of a 3D model. Since the product is the myCobot 280 M5Stack robotic arm from Elephant Robotics, Elephant Robotics has provided a URDF file for the myCobot 280 on Github, which describes some physical properties of the robotic arm.
    How to generate a URDF file:
    You need to use CAD software to create the model, ensuring that the 3D model you create matches the actual size of the robotic arm. Because the exported model needs to be in a format that ROS can accept, it is usually a DAE (Collada) file.
    alt text
    alt text

    Load URDF to ROS server

    Create a ROS package
    To create a package to store the URDF file, execute the following code in the terminal:

    catkin_create_pkg mycobot_description rospy std_msgs sensor_msgs

    Here, ‘rospy’, ‘std_msgs’, and ‘sensor_msgs’ are dependency packages in ROS. Add the generated URDF file to the mycobot_description/urdf directory.

    Create a launch file
    In the mycobot_description/launch directory, create a file named load_urdf.launch and add the following content to it.

    <launch>  <param name="robot_description" command="$(find xacro)/xacro.py $(find mycobot_description)/urdf/mycobot.urdf.xacro" /></launch>

    Lanuch ROS file
    Open the terminal and enter the following command:

    roslaunch my_robot_description load_urdf.launch

    After running, we can see the model we created in RViz.
    alt text

    Configure MoveIt

    Start MoveIt Setup Assistant:

    In a terminal, run the following command to start MoveIt Setup Assistant:

    roslaunch moveit_setup_assistant setup_assistant.launch

    alt text
    Load URDF in MoveIt In the main interface of MoveIt Setup Assistant, click the “Create New MoveIt Configuration Package” button. Then, in the pop-up dialogue box, select my URDF file (in the ROS parameter robot_description). Click the “Load Files” button to load your URDF file. If the image as shown below appears, it means the file has been loaded successfully.
    alt text

    Configure Robot

    Configure your robot according to your needs. Here are a few configurations briefly introduced:

    • Self-Collisions: MoveIt will automatically calculate the self-collision matrix of your robot. You can
      click the “Regenerate Default Collision Matrix” button to generate a default self-collision matrix.
    • Virtual Joints: You can define virtual joints for your robot. Virtual joints are often used to connect your robot to the world.
    • Planning Groups: You can define the planning groups of your robot. Planning groups are a set of joints and links that need to move together. For example, you can create a planning group that includes all arm joints.
    • Robot Poses: You can define preset poses for your robot. These preset poses can be reused in planning.

    After the configuration is completed, a .launch file will be generated, and we can use the robotic arm in moveit by running it.
    alt text
    Let’s see how the moveit function performs path planning. By dragging the coordinates of the end of the robotic arm, we can make changes to the movement of the robotic arm, and also randomly generate paths.
    alt text
    Object obstacle avoidance

    We add an obstacle in MoveIt for the robotic arm to avoid. We add a cube, so the robotic arm will navigate around it when it follows its trajectory.
    alt text
    In addition to this, MoveIt has many features. For instance, motion planning, which can perform path planning for multi-joint robots, avoid collisions, and also use various motion planning algorithms like RRT, EST, LBKPIECE, etc. It also includes collision detection, which can carry out complex 3D collision detection, including self-collision and environmental collision (obstacles). Furthermore, it offers simulation capabilities, and can be integrated with the Gazebo robot simulator for realistic physical simulation, among other features.


    MoveIt provides a comprehensive set of tools for research into the motion planning and control of robotic arms, eliminating the need to build complex motion planning systems from scratch. This allows developers to focus more of their energy on implementing specific application functions, rather than on solving underlying motion planning and control problems. Overall, ROS and MoveIt provide strong support for the development of robotic technology. They not only reduce development difficulties and improve development efficiency, but also promote innovation and application in robotic technology. Whether you are a researcher in robotic technology or a developer in practical applications, ROS and MoveIt will be indispensable tools for you.

    In the future, I will continue to explore more robotic arm projects and share my findings and achievements from time to time. If you find any errors in this article, feel free to communicate with me. If you like this article, your likes and comments will be the greatest support for me!