1. 环境准备与基础概念
在开始遨博协作机器人的ROS开发前,我们需要先搭建好开发环境。这里推荐使用Ubuntu 18.04 LTS和ROS Melodic的组合,这是目前最稳定的ROS版本之一。如果你是新手,建议直接使用这个组合,避免踩坑。
首先,我们需要安装ROS基础包和Gazebo仿真环境。打开终端,执行以下命令:
sudo apt-get install ros-melodic-desktop-full sudo apt-get install ros-melodic-gazebo-ros-pkgs ros-melodic-gazebo-ros-control安装完成后,我们可以测试下Gazebo是否能正常运行:
roslaunch gazebo_ros empty_world.launch如果看到Gazebo的空白界面弹出,说明安装成功。这里有个小技巧:如果在虚拟机中运行Gazebo出现闪退,可以尝试关闭3D图形加速功能。具体操作是在VMware设置中取消"加速3D图形"选项。
对于遨博机器人的开发,我们还需要安装MoveIt!这个强大的运动规划框架:
sudo apt-get install ros-melodic-moveitMoveIt!是ROS中用于机械臂运动规划的核心工具包,它集成了运动学求解、碰撞检测、轨迹规划等功能。在实际项目中,我们90%的机械臂控制需求都可以通过MoveIt!来实现。
2. 遨博机器人的Gazebo仿真
2.1 搭建仿真环境
要让遨博机器人在Gazebo中动起来,我们需要准备几个关键文件:
- URDF模型文件:描述机器人的物理结构和外观
- Gazebo插件:为机器人添加物理属性和传感器
- MoveIt!配置文件:用于运动规划
遨博官方通常提供了完整的仿真包,我们可以直接使用。假设我们已经有了aubo_description(描述文件)和aubo_gazebo(仿真启动文件)这两个包,启动仿真的命令如下:
roslaunch aubo_gazebo aubo_e5_gazebo_control.launch这个命令会启动Gazebo并加载遨博E5机械臂模型。你可能遇到的第一个问题是模型加载缓慢,这是因为Gazebo默认会从在线模型库下载资源。解决方法是将常用模型提前下载到本地,存放在~/.gazebo/models目录下。
2.2 与MoveIt!的联合仿真
单纯的Gazebo仿真还不够,我们需要结合MoveIt!来实现运动规划。启动MoveIt!和Gazebo的联合仿真:
roslaunch aubo_e5_moveit_config moveit_planning_execution.launch robot_ip:=127.0.0.1 roslaunch aubo_gazebo aubo_e5_gazebo_control.launch这里有个关键点:两个launch文件需要在不同的终端中运行,且robot_ip参数必须设置为127.0.0.1(本地回环地址)。
在RViz界面中,你会看到机械臂的模型。通过拖动交互式标记(那个彩色的小球),可以设置目标位姿。点击"Plan"按钮,MoveIt!会计算出一条无碰撞的运动轨迹;点击"Execute",这条轨迹就会被发送到Gazebo中的仿真机械臂执行。
3. 控制真实遨博机器人
3.1 网络配置
从仿真切换到真实机器人,第一步是确保网络连接正确。遨博机器人的控制柜和开发电脑最好通过网线直连,避免使用路由器或交换机,这样可以减少网络延迟对控制的影响。
在遨博示教器上配置网络:
- 进入【设置】-【网络】
- 选择正确的网卡
- 设置IP地址(如192.168.1.40)
- 设置子网掩码(255.255.255.0)
- 设置网关(192.168.1.1)
电脑端的IP需要设置在同一网段,比如192.168.1.100。配置完成后,用ping命令测试连通性,延迟应该低于1ms。
3.2 通过ROS控制真实机械臂
控制真实机器人的launch命令与仿真类似,只是需要指定真实机器人的IP地址:
roslaunch aubo_e5_moveit_config moveit_planning_execution.launch robot_ip:=192.168.1.40启动后,RViz中的机械臂姿态应该与真实机械臂同步。这时在RViz中规划轨迹并执行,真实机械臂就会跟随运动。
安全提示:在测试阶段,建议将机械臂的速度限制调低,并在旁边准备好急停按钮。虽然MoveIt!有碰撞检测功能,但安全第一总是没错的。
4. MoveIt!轨迹规划与SDK接口
4.1 轨迹规划原理
MoveIt!的轨迹规划主要依赖以下几个组件:
- 运动学插件(默认使用KDL)
- 碰撞检测(使用FCL库)
- 轨迹优化算法
规划一条轨迹的基本流程是:
- 设置目标位姿(位置+姿态)
- 调用规划器计算路径
- 优化轨迹(平滑处理、速度规划等)
- 执行轨迹
我们可以通过编程接口来实现自动化控制。下面是一个简单的Python示例,让机械臂移动到预定义的位置:
import moveit_commander robot = moveit_commander.RobotCommander() group = moveit_commander.MoveGroupCommander("manipulator") # 设置目标关节角度 joint_goal = [0, -1.57, 1.57, 0, 0, 0] group.go(joint_goal, wait=True) group.stop()4.2 SDK接口开发
遨博机器人提供了专门的SDK,用于将MoveIt!规划的轨迹透传给底层控制器。SDK的主要功能包括:
- 实时接收关节轨迹
- 轨迹插值处理
- 安全监控
- 状态反馈
一个典型的SDK接口调用流程如下:
// 初始化SDK AuboSDK::init(robot_ip); // 设置控制模式 AuboSDK::setControlMode(AuboSDK::POSITION_MODE); // 发送轨迹 AuboSDK::sendTrajectory(trajectory); // 获取状态反馈 RobotState state = AuboSDK::getRobotState();在实际项目中,我们需要特别注意轨迹的实时性。ROS默认的话题通信可能有几十毫秒的延迟,对于高速运动的机械臂,建议使用actionlib或者直接通过SDK提供的实时接口来传输轨迹。
5. 性能优化与调试技巧
5.1 运动速度调节
遨博机器人的运动速度可以在MoveIt!的配置文件中调整。打开joint_limits.yaml文件,可以看到每个关节的速度和加速度限制:
shoulder_joint: has_velocity_limits: true max_velocity: 1.0 # 弧度/秒 has_acceleration_limits: true max_acceleration: 0.5 # 弧度/秒²调整这些参数时要注意:
- 不要一次性增加太多,建议每次增加10%-20%
- 高速度下更容易出现振动,需要配合PID参数调整
- 实际最大速度还受机械臂本身的物理限制
5.2 常见问题排查
- 规划失败:检查目标位姿是否可达,碰撞物体是否设置正确
- 轨迹抖动:可能是运动学求解器精度不够,可以尝试换用Trac-IK插件
- 通信延迟:检查网络状况,考虑使用实时操作系统(RT-Preempt)
- SDK连接失败:确认防火墙设置,检查SDK版本是否匹配
一个实用的调试技巧是使用rqt_graph查看节点间的连接关系,这能帮助快速定位通信问题。
6. 进阶开发:自定义运动学插件
如果默认的KDL运动学求解器不能满足需求,我们可以开发自定义插件。以Trac-IK为例,安装方法如下:
sudo apt-get install ros-melodic-trac-ik-kinematics-plugin然后在MoveIt!配置文件中修改运动学插件:
<param name="kinematics_solver" value="trac_ik_kinematics_plugin/TRAC_IKKinematicsPlugin"/> <param name="kinematics_solver_timeout" value="0.005"/>自定义插件的开发需要继承kinematics_base::KinematicsBase类,实现以下关键方法:
- getPositionIK:逆运动学求解
- getPositionFK:正运动学求解
- searchPositionIK:带约束的逆运动学求解
开发完成后,将插件注册到ROS系统中,就可以像内置插件一样使用了。