环境搭建
安装ROS2环境
参考 ROS2 环境搭建
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.5, Moveit2仅支持 ROS2 Humble版本,请使用对应分支的代码运行
使用前准备
在使用案例功能之前,请先确认以下硬件和环境准备齐全:
硬件设备
- 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 follow_display.launch.py port:=/dev/ttyUSB0 baud:=1000000
运行成功后,需要按住机器末端LED按钮才能拖拽关节移动,终端输出信息类似如下:
[INFO] [launch]: Default logging verbosity is set to INFO
[INFO] [robot_state_publisher-1]: process started with pid [5769]
[INFO] [follow_display-2]: process started with pid [5771]
[INFO] [rviz2-3]: process started with pid [5773]
[robot_state_publisher-1] [INFO] [1782897634.730833624] [robot_state_publisher]: got segment CENTER_V_2_Link
[robot_state_publisher-1] [INFO] [1782897634.730996652] [robot_state_publisher]: got segment FIX2_Link
[robot_state_publisher-1] [INFO] [1782897634.731014841] [robot_state_publisher]: got segment J1_Link
[robot_state_publisher-1] [INFO] [1782897634.731027969] [robot_state_publisher]: got segment J2_2_Link
[robot_state_publisher-1] [INFO] [1782897634.731038692] [robot_state_publisher]: got segment J2_Link
[robot_state_publisher-1] [INFO] [1782897634.731049064] [robot_state_publisher]: got segment J3_4_Link
[robot_state_publisher-1] [INFO] [1782897634.731060058] [robot_state_publisher]: got segment J3_5_Link
[robot_state_publisher-1] [INFO] [1782897634.731070711] [robot_state_publisher]: got segment J3_Link
[robot_state_publisher-1] [INFO] [1782897634.731081424] [robot_state_publisher]: got segment J4_Link
[robot_state_publisher-1] [INFO] [1782897634.731092447] [robot_state_publisher]: got segment base_link
[robot_state_publisher-1] [INFO] [1782897634.731103350] [robot_state_publisher]: got segment center_Link
[robot_state_publisher-1] [INFO] [1782897634.731115737] [robot_state_publisher]: got segment center_v_1_Link
[robot_state_publisher-1] [INFO] [1782897634.731128053] [robot_state_publisher]: got segment fix1_Link
[robot_state_publisher-1] [INFO] [1782897634.731140169] [robot_state_publisher]: got segment world
[rviz2-3] Warning: Ignoring XDG_SESSION_TYPE=wayland on Gnome. Use QT_QPA_PLATFORM=wayland to run on Wayland anyway.
[rviz2-3] [INFO] [1782897635.323342993] [rviz2]: Stereo is NOT SUPPORTED
[rviz2-3] [INFO] [1782897635.323611102] [rviz2]: OpenGl version: 4.5 (GLSL 4.5)
[rviz2-3] [INFO] [1782897635.452264701] [rviz2]: Stereo is NOT SUPPORTED
[follow_display-2] [INFO] [1782897635.555144511] [follow_display]: port:/dev/ttyUSB0, baud:1000000
[follow_display-2] [INFO] [1782897636.166900478] [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] [1782897636.173036211] [follow_display]: Publishing ...
它将打开 rviz 以显示模型跟随效果 。此时拖动真实机械臂关节,仿真模型将会跟随真实机械臂运动。

3 GUI 控制
在前者的基础上,本软件包还提供了一个简单的图形用户界面控制接口。这种方法意味着真正的机械臂是相互连接的,请连接到 ultraArm。
打开命令行:
# 默认串口名为"/dev/ttyUSB0",波特率为1000000.
ros2 launch ultraarm_p1 simple_gui.launch.py port:=/dev/ttyUSB0 baud:=1000000

运行成功后,终端信息类似输出如下:
[INFO] [launch]: Default logging verbosity is set to INFO
[INFO] [robot_state_publisher-1]: process started with pid [5633]
[INFO] [listen_real_service-2]: process started with pid [5635]
[INFO] [simple_gui-3]: process started with pid [5637]
[INFO] [rviz2-4]: process started with pid [5639]
[rviz2-4] Warning: Ignoring XDG_SESSION_TYPE=wayland on Gnome. Use QT_QPA_PLATFORM=wayland to run on Wayland anyway.
[robot_state_publisher-1] [INFO] [1782897458.761098704] [robot_state_publisher]: got segment CENTER_V_2_Link
[robot_state_publisher-1] [INFO] [1782897458.761844782] [robot_state_publisher]: got segment FIX2_Link
[robot_state_publisher-1] [INFO] [1782897458.761873800] [robot_state_publisher]: got segment J1_Link
[robot_state_publisher-1] [INFO] [1782897458.761889356] [robot_state_publisher]: got segment J2_2_Link
[robot_state_publisher-1] [INFO] [1782897458.761901756] [robot_state_publisher]: got segment J2_Link
[robot_state_publisher-1] [INFO] [1782897458.761913435] [robot_state_publisher]: got segment J3_4_Link
[robot_state_publisher-1] [INFO] [1782897458.761925475] [robot_state_publisher]: got segment J3_5_Link
[robot_state_publisher-1] [INFO] [1782897458.761937345] [robot_state_publisher]: got segment J3_Link
[robot_state_publisher-1] [INFO] [1782897458.761949345] [robot_state_publisher]: got segment J4_Link
[robot_state_publisher-1] [INFO] [1782897458.761961334] [robot_state_publisher]: got segment base_link
[robot_state_publisher-1] [INFO] [1782897458.761973074] [robot_state_publisher]: got segment center_Link
[robot_state_publisher-1] [INFO] [1782897458.761985133] [robot_state_publisher]: got segment center_v_1_Link
[robot_state_publisher-1] [INFO] [1782897458.761997133] [robot_state_publisher]: got segment fix1_Link
[robot_state_publisher-1] [INFO] [1782897458.762008001] [robot_state_publisher]: got segment world
[rviz2-4] [INFO] [1782897459.530810285] [rviz2]: Stereo is NOT SUPPORTED
[rviz2-4] [INFO] [1782897459.532338171] [rviz2]: OpenGl version: 4.5 (GLSL 4.5)
[rviz2-4] [INFO] [1782897459.735081745] [rviz2]: Stereo is NOT SUPPORTED
[listen_real_service-2] [INFO] [1782897459.748433553] [listen_real_service]: port:/dev/ttyUSB0, baud:1000000
然后在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 [5710]
[INFO] [listen_real_service-2]: process started with pid [5712]
[INFO] [rviz2-3]: process started with pid [5714]
[rviz2-3] Warning: Ignoring XDG_SESSION_TYPE=wayland on Gnome. Use QT_QPA_PLATFORM=wayland to run on Wayland anyway.
[robot_state_publisher-1] [INFO] [1782897547.311604561] [robot_state_publisher]: got segment CENTER_V_2_Link
[robot_state_publisher-1] [INFO] [1782897547.312407796] [robot_state_publisher]: got segment FIX2_Link
[robot_state_publisher-1] [INFO] [1782897547.312438681] [robot_state_publisher]: got segment J1_Link
[robot_state_publisher-1] [INFO] [1782897547.312453678] [robot_state_publisher]: got segment J2_2_Link
[robot_state_publisher-1] [INFO] [1782897547.312463870] [robot_state_publisher]: got segment J2_Link
[robot_state_publisher-1] [INFO] [1782897547.312473252] [robot_state_publisher]: got segment J3_4_Link
[robot_state_publisher-1] [INFO] [1782897547.312482782] [robot_state_publisher]: got segment J3_5_Link
[robot_state_publisher-1] [INFO] [1782897547.312492056] [robot_state_publisher]: got segment J3_Link
[robot_state_publisher-1] [INFO] [1782897547.312501694] [robot_state_publisher]: got segment J4_Link
[robot_state_publisher-1] [INFO] [1782897547.312510997] [robot_state_publisher]: got segment base_link
[robot_state_publisher-1] [INFO] [1782897547.312522356] [robot_state_publisher]: got segment center_Link
[robot_state_publisher-1] [INFO] [1782897547.312534625] [robot_state_publisher]: got segment center_v_1_Link
[robot_state_publisher-1] [INFO] [1782897547.312546815] [robot_state_publisher]: got segment fix1_Link
[robot_state_publisher-1] [INFO] [1782897547.312558520] [robot_state_publisher]: got segment world
[rviz2-3] [INFO] [1782897547.796778052] [rviz2]: Stereo is NOT SUPPORTED
[rviz2-3] [INFO] [1782897547.797056751] [rviz2]: OpenGl version: 4.5 (GLSL 4.5)
[rviz2-3] [INFO] [1782897547.940383311] [rviz2]: Stereo is NOT SUPPORTED
[listen_real_service-2] [INFO] [1782897548.081108792] [listen_real_service]: port:/dev/ttyUSB0, baud:1000000
接下来,打开另一个 命令行:
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.
5 moveit2 使用
注意: Moveit2仅支持 ROS2 Humble版本,请使用对应分支的代码运行。
mycobot_ros2 整合了 ultraArm P1 MoveIt2 部分。
打开命令行并运行:
ros2 launch ultraarm_p1_moveit2 demo.launch.py
运行效果如下:

终端将输出如下信息,代表成功启动moveit:
[move_group-2] You can start planning now!
[move_group-2]
[rviz2-3] [INFO] [1782897327.917527882] [move_group_interface]: Ready to take commands for planning group arm_group.
[rviz2-3] [INFO] [1782897328.400809896] [interactive_marker_display_100034309556640]: Service response received for initialization
基本路径规划操作如下:
如果想让真正的机械臂同步执行计划,则需要打开另一个命令行并运行:
# 默认串口名为"/dev/ttyUSB0",波特率为1000000.
ros2 launch ultraarm_p1_moveit2_control sync_plan.launch.py port:=/dev/ttyUSB0 baud:=1000000
修改运动速度
为了防止关节在实际机械臂运动过程中晃动,需要降低关节的运动速度。
- 修改机械臂 Python API 的速度参数,启动程序时增加速度参数,默认25。
ros2 launch ultraarm_p1_moveit2_control sync_plan.launch.py port:=/dev/ttyUSB0 baud:=1000000 speed:=25
- 在 Moveit RViz 界面中,修改速度和加速度的缩放比例。在这里,将其改为 0.1,然后保存当前配置。
ultraarm_p1_moveit2_control功能包默认配置 0.5。
