# How to control cobot arm on Limo in both ROS1 and ROS2?

**URL:** <https://discourse.openrobotics.org/t/how-to-control-cobot-arm-on-limo-in-both-ros1-and-ros2/38395>\
**Category:** ROS General\
**Tags:** ros2\
**Created:** [June 30, 2024, 5:38am UTC](https://discourse.openrobotics.org/t/how-to-control-cobot-arm-on-limo-in-both-ros1-and-ros2/38395 "2024-06-30T05:38:04Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Agilex\_Robotics](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.openrobotics.org/agilex_robotics/32/10554_2.png) [@Agilex\_Robotics](https://discourse.openrobotics.org/u/Agilex_Robotics)\
**Post date:** [June 30, 2024, 5:38am UTC](https://discourse.openrobotics.org/t/how-to-control-cobot-arm-on-limo-in-both-ros1-and-ros2/38395/1 "2024-06-30T05:38:04Z")

</div>

Limo Cobot is a Limo series robot equipped with a cobot arm base on Limo Pro base. More details please visit: [LIMO PRO](https://global.agilex.ai/products/limo-pro)

 ![LIMO-Cobot](https://us1.discourse-cdn.com/flex022/uploads/ros/original/3X/8/4/8405085febc5d4d146f483b369e0d2473ae38c03.jpeg)

Limo Cobot(Pro) can be integrated with both ROS1 and ROS2. In this project the instructions of how to control cobot robotic arm in both ROS1 and ROS2 will be introduced.

# Set connection between robot and arm

The Cobot robot has two control methods.

First, you can directly call the API interface to control the robot by assigning six joint angles. This method allows users to directly specify the robot’s motion trajectory and posture, thereby accurately controlling its movements.

Second, Cobot also supports control using MoveIt. Users can set the target point, and MoveIt calculates the six joint angles and sends these angles to the robot. This method is more flexible and can achieve more complex motion planning and control by setting the target point, while also being able to adapt to different work scenarios and needs.

Whether calling the API interface directly or using MoveIt, the Cobot robot can provide efficient and accurate robot control to meet the needs of users in different scenarios.

Open the robot and enter the following interface, where communication configuration is required. Select Transponder and click OK.

 ![通讯模式1](https://us1.discourse-cdn.com/flex022/uploads/ros/original/3X/5/e/5e16ef73d8cff9750fa4639cf0cbabe4b47f2cef.jpeg)

Then, choose USB UART and click ok.

 ![通讯模式2](https://us1.discourse-cdn.com/flex022/uploads/ros/original/3X/1/2/120e74022294162cd176c2e3aff626b2f30e9c67.jpeg)

When ‘Atom:ok’ shows, the connection is successfull.

 ![通讯模式3](https://us1.discourse-cdn.com/flex022/uploads/ros/original/3X/a/b/ab14b46b3f7d3c3df2ced70091daeb5fcb8707b9.png)

# Control cobot robotic arm:

### Control the Robot Arm Using Sliders

Start the slider control node. Open a new terminal, and enter the command in the terminal:

```auto
ros2 launch mycobot_280 slider_control.launch.py port:=/dev/ttyACM0 baud:=115200

```

In ros1, please run:

```auto
roslaunch mycobot_280 slider_control.launch

```

and then, run

```auto
rosrun mycobot_280 slider_control.py _port:=/dev/ttyACM0 _baud:=115200

```

to start the real arm.

 ![slider](https://us1.discourse-cdn.com/flex022/uploads/ros/original/3X/2/1/21919ba8368d3bd809e09af1865df35805ea47b5.png)  
The angles of the six axes of the real robot arm can be controlled through the slider control interface.

### The model follows the real robot arm

To start the model following the robot arm function, open a new terminal and enter:

```auto
 ros2 launch mycobot_280 mycobot_follow.launch.py 

```

In **ros1** :  
Start the robot model, open a new terminal, and enter in the terminal:

```auto
roslaunch mycobot_280 mycobot_follow.launch

```

Start the model follow node:

```auto
rosrun mycobot_280 follow_display.py _port:=/dev/ttyACM0 _baud:=115200

```

After successful startup, the robot arm will be unlocked. At this time, you can use your hand to bend the robot arm, and the model in rviz will follow and move.

 ![follow](https://us1.discourse-cdn.com/flex022/uploads/ros/original/3X/e/d/ed64c16053a99f76eade5895b35b23c286d2de9a.png)

Return back to rivz. The model in rviz will follow the real robotic arm.

### GUI control robotic arm

Use a simple GUI interface to control the movement of the robotic arm. Start a new terminal and enter the command in the terminal:

```auto
ros2 launch mycobot_280 simple_gui.launch.py

```

In ros1, run:

```auto
roslaunch mycobot_280 simple_gui.launch

```

After starting up successfully, you can enter the angle information or position information of each joint in the GUI interface.

 ![gui](https://us1.discourse-cdn.com/flex022/uploads/ros/original/3X/9/9/99fd3dac55e8e3e506ed499705aa68d885a186bc.png)  
After setting the angle of the robot arm axis, click the SET button and the robot arm will move to the set position. JAW and pimp are the switches corresponding to the gripper and suction pump device respectively.  
 ![image](https://us1.discourse-cdn.com/flex022/uploads/ros/original/3X/5/8/58d0681fab30ae56d2496423bebf98c1158e99ae.png)

### Keyboard control

```auto
ros2 launch mycobot_280 teleop_keyboard.launch.py

```

After running this, a interface will appear.

 ![image-20240419151616765](https://us1.discourse-cdn.com/flex022/uploads/ros/original/3X/8/a/8ab3939c059160170ec85dc3463cb2c68a14dea8.png)  
Next, open another terminal and run:

```auto
ros2 run mycobot_280 teleop_keyboard

```

You can see the output:

```auto
Mycobot Teleop Keyboard Controller
---------------------------
Movimg options(control coordinations [x,y,z,rx,ry,rz]):
              w(x+)

    a(y-) s(x-) d(y+)

    z(z-) x(z+)

u(rx+) i(ry+) o(rz+)
j(rx-) k(ry-) l(rz-)

Gripper control:
    g - open
    h - close

Other:
    1 - Go to init pose
    2 - Go to home pose
    3 - Resave home pose
    q - Quit

currently: speed: 10 change percent: 2

```

 ![image-20240419151757761](https://us1.discourse-cdn.com/flex022/uploads/ros/original/3X/e/0/e065bd3c49802707f0f1db34c5be0f46cdbc7438.png)  
In this terminal, you can control the state of the robot arm and move the robot arm by pressing keys in the terminal.

In ros1:  
Use the keyboard to control the machine. Open a new terminal and enter the following in the terminal:

```bash
roslaunch mycobot_280 teleop_keyboard.launch

```

Wait for the terminal to display ready and then open a command line:

```bash
rosrun mycobot_280 teleop_keyboard.py

```

After the startup is successful, you can use the keys w a s d to control the movement of the robot arm.

### Moveit control

Open a new terminal and run:

```auto
ros2 launch mycobot_280_moveit demo.launch.py 

```

After running, the following RVIZ interface will appear:

 ![image-20240419151941761](https://us1.discourse-cdn.com/flex022/uploads/ros/original/3X/5/e/5ee9893fd7c38a7dafda65eda60a708e18021ab7.png)  
To control the real robot arm through Moveit, you need to enable another command:

```auto
ros2 run mycobot_280 sync_plan 

```

Then you can drag the model on the Moveit to control the real robotic arm.

In ros1:  
Start the moveit robot control node, open a new terminal, and enter in the terminal:

```bash
roslaunch limo_cobot_moveit_config demo.launch

```

Start the real robot synchronization node:

```bash
rosrun mycobot_280_moveit sync_plan.py _port:=/dev/ttyACM0 _baud:=115200

```

# Move and grab in ROS1

In the mobile grabbing function, use move\_base to navigate the Limo robot to the target point location. Once the robot reaches the target position, it triggers the robot arm to perform a grabbing motion by calling the API interface of the robot arm, realizing the complete process of the mobile grabbing function. This combination of navigation and robotic arm control allows the robot to move in dynamic environments and perform grasping tasks.

（1）Open a new terminal, and enter the command to launch the LiDAR：

```auto
roslaunch limo_bringup limo_start.launch pub_odom_tf:=false

```

（2）Open a new terminal, and enter the command to start the navigation.

```auto
roslaunch limo_bringup limo_navigation_diff.launch

```

Record first position.

 ![cobot_1_1](https://us1.discourse-cdn.com/flex022/uploads/ros/original/3X/7/b/7bb8911677a2b54279b8596652c95ae69d012ba7.png)  
Drive Limo to the grabbing location and record the second location.  
 ![cobot_2_2](https://us1.discourse-cdn.com/flex022/uploads/ros/original/3X/a/9/a901d120e2eb147a7d7f65343aee0f8926825c86.png)  
Fill in the data in /home/agilex/agilex\_ws/src/set\_nav\_point/more\_task\_node.py as shown in the figure.  
First one:  
 ![cobot_3](https://us1.discourse-cdn.com/flex022/uploads/ros/original/3X/3/1/314cb641826d661df7bc16b81c2905e912c95cd4.jpeg)  
Second one:  
 ![cobot_4](https://us1.discourse-cdn.com/flex022/uploads/ros/original/3X/e/5/e5770cfcd934f9443d6cd769e4b50df8a21fc6e3.jpeg)

（3）Start the mobile grabbing function node. Open a new terminal, and enter the command in the terminal:

```auto
rosrun set_nav_point more_task_node.py

```

After successful startup, Limo will go to the grabbing location. After arriving, the robotic arm will perform the grabbing action.

# About Limo

If you are interested in Limo or have some technical questions about it, feel free to join [Discord](https://discord.gg/BrNT9Tyq) or [Discord](https://discord.gg/9V356dFe). Let’s talk about it!

---

<div class="post-metadata">

**Author:** ![Joey\_Wu](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.openrobotics.org/joey_wu/32/22074_2.png) [@Joey\_Wu](https://discourse.openrobotics.org/u/Joey_Wu)\
**Post date:** [July 3, 2024, 9:21am UTC](https://discourse.openrobotics.org/t/how-to-control-cobot-arm-on-limo-in-both-ros1-and-ros2/38395/2 "2024-07-03T09:21:21Z")

</div>

Thanks for sharing this case.

---

<div class="post-metadata">

**Author:** ![Sakina\_Ali](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.openrobotics.org/sakina_ali/32/24329_2.png) [@Sakina\_Ali](https://discourse.openrobotics.org/u/Sakina_Ali)\
**Post date:** [March 12, 2025, 7:19pm UTC](https://discourse.openrobotics.org/t/how-to-control-cobot-arm-on-limo-in-both-ros1-and-ros2/38395/3 "2025-03-12T19:19:15Z")

</div>

Hi, can you give the discord invite again? the ones here are expired

---

<div class="post-metadata">

**Author:** ![Raakilde](https://avatars.discourse-cdn.com/v4/letter/r/6f9a4e/32.png) [@Raakilde](https://discourse.openrobotics.org/u/Raakilde)\
**Post date:** [February 5, 2026, 6:37pm UTC](https://discourse.openrobotics.org/t/how-to-control-cobot-arm-on-limo-in-both-ros1-and-ros2/38395/4 "2026-02-05T18:37:41Z")

</div>

Hi - my Limo Cobot with the 280 arm starts up the simulation, when running this command.

But the physcial arm doesn’t move. Any hints to whats wrong?
