环境搭建

安装ROS2环境

参考 ROS2 环境搭建

mycobot_ros2安装

参考 ultraArm P1 mycobot_ros2安装

执行下面命令安装 ultraArm P1 ROS2 代码:

$ cd ~/colcon_ws/src
# For the humble branch
$ git clone -b p1-humble https://github.com/elephantrobotics/mycobot_ros2.git
# For the foxy branch
$ git clone -b p1 https://github.com/elephantrobotics/mycobot_ros2.git
$ cd ~/colcon_ws
$ colcon build
$ source ~/colcon_ws/install/setup.bash
$ sudo echo 'source ~/colcon_ws/install/setup.bash' >> ~/.bashrc

控制机械臂

注意:pymycobot 驱动库的版本必须大于4.0.4

使用前准备

在使用案例功能之前,请先确认以下硬件和环境准备齐全:

  • 硬件设备

    • ultraArm P1 机械臂
    • 电源适配器
    • USB Type-C串口线
  • 软件与环境

    • PC虚拟机 ubuntu 20.04系统
    • 已安装 Python 3.6 及以上版本
    • 已安装 pymycobot 库(通过 pip install pymycobot 终端命令安装)
    • 确保 ultraArm P1 已正确接通电源、串口线,并且虚拟机系统能检测到串口号。

    • 验证:验证机械臂串口是否存在,终端输入:

      ls /dev/tty*
      

      如果输出的串口信息有 /dev/ttyACM* 或者 /dev/ttyUSB*,表示串口已被检测到。

    • 串口权限: 如果串口存在,需要赋予可执行权限:

      sudo chmod 777 /dev/ttyUSB*
      # 或者
      sudo chmod 777 /dev/ttyACM*
      

1 滑块控制

打开命令行并运行:

# 默认串口名为"/dev/ttyUSB0",波特率为1000000.
ros2 launch ultraarm_p1 slider_control.launch.py port:=/dev/ttyUSB0 baud:=1000000

它会打开 rviz2 和一个滑块组件,你会看到类似下面的内容:

然后,您可以在 rviz2 中通过拖动滑块来控制模型的移动。真实的 ultraArm 机器人也会随之移动。

请注意:由于在命令输入的同时机械臂会移动到模型目前的位置,在您使用命令之前请确保 rviz 中的模型没有出现穿模现象

不要在连接机械臂后做出快速拖动滑块的行为,防止机械臂损坏

2 模型跟随

除了上面的控制,我们也可以让模型跟随真实的机械臂运动

打开一个命令行运行:

# 默认串口名为"/dev/ttyUSB0",波特率为1000000.
ros2 launch ultraarm_p1 mycobot_follow.launch.py port:=/dev/ttyUSB0 baud:=1000000

运行成功后,需要按住机器末端LED按钮才能拖拽关节移动,终端输出信息如下:

[INFO] [launch]: All log files can be found below /home/u20-ros2/.ros/log/2026-06-23-11-25-43-317882-u20ros2-VirtualBox-66930
[INFO] [launch]: Default logging verbosity is set to INFO
[INFO] [robot_state_publisher-1]: process started with pid [66933]
[INFO] [follow_display-2]: process started with pid [66935]
[INFO] [rviz2-3]: process started with pid [66937]
[robot_state_publisher-1] Parsing robot urdf xml string.
[robot_state_publisher-1] Link base_link had 1 children
[robot_state_publisher-1] Link J1_LINK had 2 children
[robot_state_publisher-1] Link J2_Link1 had 1 children
[robot_state_publisher-1] Link J2_Link4 had 3 children
[robot_state_publisher-1] Link FIX1 had 0 children
[robot_state_publisher-1] Link FIX3 had 1 children
[robot_state_publisher-1] Link J3_LIink2 had 1 children
[robot_state_publisher-1] Link J3_Link4 had 0 children
[robot_state_publisher-1] Link J3_Link1 had 1 children
[robot_state_publisher-1] Link J3_Link3 had 2 children
[robot_state_publisher-1] Link FIX2 had 0 children
[robot_state_publisher-1] Link J4_Link had 0 children
[robot_state_publisher-1] Link J2_Link2 had 1 children
[robot_state_publisher-1] Link J2_Link3 had 0 children
[robot_state_publisher-1] [INFO] [1782185143.625335126] [robot_state_publisher]: got segment FIX1
[robot_state_publisher-1] [INFO] [1782185143.626202936] [robot_state_publisher]: got segment FIX2
[robot_state_publisher-1] [INFO] [1782185143.626241164] [robot_state_publisher]: got segment FIX3
[robot_state_publisher-1] [INFO] [1782185143.626253165] [robot_state_publisher]: got segment J1_LINK
[robot_state_publisher-1] [INFO] [1782185143.626264141] [robot_state_publisher]: got segment J2_Link1
[robot_state_publisher-1] [INFO] [1782185143.626274697] [robot_state_publisher]: got segment J2_Link2
[robot_state_publisher-1] [INFO] [1782185143.626284720] [robot_state_publisher]: got segment J2_Link3
[robot_state_publisher-1] [INFO] [1782185143.626295035] [robot_state_publisher]: got segment J2_Link4
[robot_state_publisher-1] [INFO] [1782185143.626305480] [robot_state_publisher]: got segment J3_LIink2
[robot_state_publisher-1] [INFO] [1782185143.626316226] [robot_state_publisher]: got segment J3_Link1
[robot_state_publisher-1] [INFO] [1782185143.626326972] [robot_state_publisher]: got segment J3_Link3
[robot_state_publisher-1] [INFO] [1782185143.626337387] [robot_state_publisher]: got segment J3_Link4
[robot_state_publisher-1] [INFO] [1782185143.626347371] [robot_state_publisher]: got segment J4_Link
[robot_state_publisher-1] [INFO] [1782185143.626357635] [robot_state_publisher]: got segment base_link
[robot_state_publisher-1] [INFO] [1782185143.626367669] [robot_state_publisher]: got segment world
[rviz2-3] [INFO] [1782185144.256258636] [rviz2]: Stereo is NOT SUPPORTED
[rviz2-3] [INFO] [1782185144.257317648] [rviz2]: OpenGl version: 3.1 (GLSL 1.4)
[rviz2-3] [INFO] [1782185144.373166398] [rviz2]: Stereo is NOT SUPPORTED
[rviz2-3] Parsing robot urdf xml string.
[follow_display-2] [INFO] [1782185145.077858147] [follow_display]: port:/dev/ttyUSB0, baud:1000000
[follow_display-2] [INFO] [1782185145.669663514] [follow_display]: Please press the LED button at the end of the machine to drag the joint.
[follow_display-2] 请按下机器末端LED按钮进行关节拖拽运动
[follow_display-2] 
[follow_display-2] [INFO] [1782185145.737143104] [follow_display]: Publishing ...

它将打开 rviz 以显示模型跟随效果 。此时拖动真实机械臂关节,仿真模型将会跟随真实机械臂运动。

3 GUI 控制

在前者的基础上,本软件包还提供了一个简单的图形用户界面控制接口。这种方法意味着真正的机械臂是相互连接的,请连接到 ultraArm。

打开命令行:

# 默认串口名为"/dev/ttyUSB0",波特率为115200.
ros2 launch ultraarm_p1 simple_gui.launch.py port:=/dev/ttyUSB0 baud:=115200

运行成功后,终端信息输出如下:

[INFO] [launch]: Default logging verbosity is set to INFO
[INFO] [robot_state_publisher-1]: process started with pid [23417]
[INFO] [listen_real_service-2]: process started with pid [23419]
[INFO] [simple_gui-3]: process started with pid [23421]
[INFO] [rviz2-4]: process started with pid [23423]
[robot_state_publisher-1] Parsing robot urdf xml string.
[robot_state_publisher-1] Link base_link had 1 children
[robot_state_publisher-1] Link J1_LINK had 2 children
[robot_state_publisher-1] Link J2_Link1 had 1 children
[robot_state_publisher-1] Link J2_Link4 had 3 children
[robot_state_publisher-1] Link FIX1 had 0 children
[robot_state_publisher-1] Link FIX3 had 1 children
[robot_state_publisher-1] Link J3_LIink2 had 1 children
[robot_state_publisher-1] Link J3_Link4 had 0 children
[robot_state_publisher-1] Link J3_Link1 had 1 children
[robot_state_publisher-1] Link J3_Link3 had 2 children
[robot_state_publisher-1] Link FIX2 had 0 children
[robot_state_publisher-1] Link J4_Link had 0 children
[robot_state_publisher-1] Link J2_Link2 had 1 children
[robot_state_publisher-1] Link J2_Link3 had 0 children
[robot_state_publisher-1] [INFO] [1764754690.688488026] [robot_state_publisher]: got segment FIX1
[robot_state_publisher-1] [INFO] [1764754690.692047048] [robot_state_publisher]: got segment FIX2
[robot_state_publisher-1] [INFO] [1764754690.692120163] [robot_state_publisher]: got segment FIX3
[robot_state_publisher-1] [INFO] [1764754690.692146702] [robot_state_publisher]: got segment J1_LINK
[robot_state_publisher-1] [INFO] [1764754690.692163713] [robot_state_publisher]: got segment J2_Link1
[robot_state_publisher-1] [INFO] [1764754690.692178420] [robot_state_publisher]: got segment J2_Link2
[robot_state_publisher-1] [INFO] [1764754690.692192827] [robot_state_publisher]: got segment J2_Link3
[robot_state_publisher-1] [INFO] [1764754690.692207404] [robot_state_publisher]: got segment J2_Link4
[robot_state_publisher-1] [INFO] [1764754690.692222431] [robot_state_publisher]: got segment J3_LIink2
[robot_state_publisher-1] [INFO] [1764754690.692237529] [robot_state_publisher]: got segment J3_Link1
[robot_state_publisher-1] [INFO] [1764754690.692255362] [robot_state_publisher]: got segment J3_Link3
[robot_state_publisher-1] [INFO] [1764754690.692276822] [robot_state_publisher]: got segment J3_Link4
[robot_state_publisher-1] [INFO] [1764754690.692296618] [robot_state_publisher]: got segment J4_Link
[robot_state_publisher-1] [INFO] [1764754690.692311626] [robot_state_publisher]: got segment base_link
[robot_state_publisher-1] [INFO] [1764754690.692326063] [robot_state_publisher]: got segment world
[rviz2-4] [INFO] [1764754692.337228590] [rviz2]: Stereo is NOT SUPPORTED
[rviz2-4] [INFO] [1764754692.337892341] [rviz2]: OpenGl version: 3.1 (GLSL 1.4)
[rviz2-4] [INFO] [1764754692.677950762] [rviz2]: Stereo is NOT SUPPORTED
[listen_real_service-2] [INFO] [1764754693.745880907] [listen_real_service]: port:/dev/ttyUSB0, baud:1000000
[rviz2-4] Parsing robot urdf xml string.

然后在GUI界面输入相关角度和坐标信息,点击对应按钮,即可实现真实机器与仿真模型的同步运动

4 键盘控制

ultraarm_p1 包中添加了键盘控制功能,并在 rviz2 中实时同步。 该功能依赖于 python Api,因此请确保与真正的机械臂连接。

打开命令行并运行:

# 默认串口名为"/dev/ttyUSB0",波特率为1000000.
ros2 launch ultraarm_p1 teleop_keyboard.launch.py port:=/dev/ttyUSB0 baud:=1000000

运行效果如下:

命令行中将会输出 ultraArm 信息,如下:

[INFO] [launch]: Default logging verbosity is set to INFO
[INFO] [robot_state_publisher-1]: process started with pid [26338]
[INFO] [listen_real_service-2]: process started with pid [26340]
[INFO] [rviz2-3]: process started with pid [26342]
[robot_state_publisher-1] Parsing robot urdf xml string.
[robot_state_publisher-1] Link base_link had 1 children
[robot_state_publisher-1] Link J1_LINK had 2 children
[robot_state_publisher-1] Link J2_Link1 had 1 children
[robot_state_publisher-1] Link J2_Link4 had 3 children
[robot_state_publisher-1] Link FIX1 had 0 children
[robot_state_publisher-1] Link FIX3 had 1 children
[robot_state_publisher-1] Link J3_LIink2 had 1 children
[robot_state_publisher-1] Link J3_Link4 had 0 children
[robot_state_publisher-1] Link J3_Link1 had 1 children
[robot_state_publisher-1] Link J3_Link3 had 2 children
[robot_state_publisher-1] Link FIX2 had 0 children
[robot_state_publisher-1] Link J4_Link had 0 children
[robot_state_publisher-1] Link J2_Link2 had 1 children
[robot_state_publisher-1] Link J2_Link3 had 0 children
[robot_state_publisher-1] [INFO] [1764756153.570946274] [robot_state_publisher]: got segment FIX1
[robot_state_publisher-1] [INFO] [1764756153.571195782] [robot_state_publisher]: got segment FIX2
[robot_state_publisher-1] [INFO] [1764756153.571221292] [robot_state_publisher]: got segment FIX3
[robot_state_publisher-1] [INFO] [1764756153.571237033] [robot_state_publisher]: got segment J1_LINK
[robot_state_publisher-1] [INFO] [1764756153.571251792] [robot_state_publisher]: got segment J2_Link1
[robot_state_publisher-1] [INFO] [1764756153.571266390] [robot_state_publisher]: got segment J2_Link2
[robot_state_publisher-1] [INFO] [1764756153.571280949] [robot_state_publisher]: got segment J2_Link3
[robot_state_publisher-1] [INFO] [1764756153.571295597] [robot_state_publisher]: got segment J2_Link4
[robot_state_publisher-1] [INFO] [1764756153.571310066] [robot_state_publisher]: got segment J3_LIink2
[robot_state_publisher-1] [INFO] [1764756153.571324303] [robot_state_publisher]: got segment J3_Link1
[robot_state_publisher-1] [INFO] [1764756153.571338611] [robot_state_publisher]: got segment J3_Link3
[robot_state_publisher-1] [INFO] [1764756153.571353450] [robot_state_publisher]: got segment J3_Link4
[robot_state_publisher-1] [INFO] [1764756153.571367488] [robot_state_publisher]: got segment J4_Link
[robot_state_publisher-1] [INFO] [1764756153.571382958] [robot_state_publisher]: got segment base_link
[robot_state_publisher-1] [INFO] [1764756153.571403939] [robot_state_publisher]: got segment world
[rviz2-3] [INFO] [1764756154.449688149] [rviz2]: Stereo is NOT SUPPORTED
[rviz2-3] [INFO] [1764756154.451433555] [rviz2]: OpenGl version: 3.1 (GLSL 1.4)
[rviz2-3] [INFO] [1764756154.611921792] [rviz2]: Stereo is NOT SUPPORTED
[listen_real_service-2] [INFO] [1764756155.102106356] [listen_real_service]: port:/dev/ttyUSB0, baud:1000000
[rviz2-3] Parsing robot urdf xml string.

接下来,打开另一个 命令行:

ros2 run ultraarm_p1 teleop_keyboard

您将在终端看到以下输出:

ultraArm P1 Teleop Keyboard Controller
---------------------------
Movimg options(control coordinations [x,y,z,rx]):
              w(x+)

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

    z(z-) x(z+)

    u(rx+)      j(rx-) 

+/- : Increase/decrease movement step size

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

currently:speed: 50    change percent: 5

在该终端中,您可以通过命令行中的按键控制机械臂的状态并移动机械臂。

注意:先输入2机械臂回到起始点之后,再进行其他坐标控制操作,终端会有如下提示:

[WARN] [1758001794.385321]: Coordinate control disabled. Please press '2' first.
[INFO] [1758001804.552778]: Home pose reached. Coordinate control enabled.
[INFO] [1758001817.069637]: Home pose reached. Coordinate control enabled.
[WARN] [1758001836.301070]: Returned to zero. Press '2' to enable coordinate control.
[WARN] [1758001848.830702]: Coordinate control disabled. Please press '2' first.
[INFO] [1758001863.383565]: Home pose reached. Coordinate control enabled.
[WARN] [1758001933.596504]: Returned to zero. Press '2' to enable coordinate control.
[WARN] [1758001942.051899]: Coordinate control disabled. Please press '2' first.

results matching ""

    No results matching ""