UR5机械臂仿真实例(二)moveit运动规划与gazebo仿真 [ubuntu20.04+ROSnoetic+gazebo11]

【UR5机械臂moveit运动规划与gazebo仿真】

1. 安装moveit

sudo apt install ros-noetic-moveit

2. 安装ur机器人的驱动

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/
catkin_make
source devel/setup.bash

3. 进入工作空间进行下载驱动

注意:ur5官方没有出noetic版本,而noetic不再包含ur_msgs包,需要单独下载。

cd ~/catkin_ws/
git clone https://github.com/UniversalRobots/Universal_Robots_ROS_Driver.git src/Universal_Robots_ROS_Driver
git clone -b calibration_devel https://github.com/fmauch/universal_robot.git src/fmauch_universal_robot
git clone https://github.com/ros-industrial/ur_msgs.git src/ur_msgs
rosdep update
rosdep install --from-paths src --ignore-src -y
catkin_make

下载后,打开src/fmauch_universal_robot/ur5_moveit_config/launch/moveit_rviz.launch,添加:

<node pkg="tf" type="static_transform_publisher" name="link_name" args="0 0 0 0 0 0 map odom 0" />

如果不添加tf状态广播,rviz启动后会在fixed frame栏中出现unknown frame map错误。

添加后moveit_rviz.launch的内容为:

<launch>

  <arg name="debug" default="false" />
  <arg unless="$(arg debug)" name="launch_prefix" value="" />
  <arg     if="$(arg debug)" name="launch_prefix" value="gdb --ex run --args" />

  <arg name="rviz_config" default="" />
  <arg     if="$(eval rviz_config=='')" name="command_args" value="" />
  <arg unless="$(eval rviz_config=='')" name="command_args" value="-d $(arg rviz_config)" />

  <node name="$(anon rviz)" launch-prefix="$(arg launch_prefix)" pkg="rviz" type="rviz" respawn="false"
        args="$(arg command_args)" output="screen">
  </node>

  <node pkg="tf" type="static_transform_publisher" name="link_name" args="0 0 0 0 0 0 map odom 0" />

</launch>

4. 启动gazebo仿真和moveit

打开终端测试,Alt+T可以在同一个窗口打开多个终端,打开终端记得source devel/setup.bash。

roslaunch ur_gazebo ur5_bringup.launch
roslaunch ur5_moveit_config ur5_moveit_planning_execution.launch sim:=true
roslaunch ur5_moveit_config moveit_rviz.launch config:=true

(1) ur5_bringup.launch:加载机器人参数、发布机器人状态、加载空白gazbeo世界、将model加载在gazbeo中、加载gazbeo中的控制器,并通过节点发布出来;

gazebo服务器在国外,使用起来可能会有些卡顿。

(2) ur5_moveit_planning_execution.launch:映射了控制器的命名空间,与gazebo_controller连接、启动move_group;

其中,“sim:=true”对应ur5_moveit_config/ur5_moveit_planning_execution.launch中下面这句代码。目的是将“/scaled_pos_joint_traj_controller/follow_joint_trajectory"重映射(remap)到"/pos_joint_traj_controller/follow_joint_trajectory",保持gazebo和moveit控制器的命名空间一致,实现两者的连接控制。"sim"即simulation,“sim:=true”即为启动仿真环境,若“sim:=false”(default)则为real robot。

<remap if="$(arg sim)" from="/scaled_pos_joint_traj_controller/follow_joint_trajectory" to="/pos_joint_traj_controller/follow_joint_trajectory"/>

(3) moveit_rviz.launch:启动rviz。

5. rviz设置

打开rviz后,将坐标系(Fixed Frame)改为base,点击Add添加RobotModel和MotionPlanning,将规划组(Planning Group)改为manipulator

拖动rviz中ur5机械臂末端的规划球至目标位置,或者在Joints里拖动关节角度(如果规划球拖不动机械臂,把Approx IK Solutions打勾)

点击plan进行运动轨迹规划,点击execute看到gazebo中机械臂按照轨迹运动

### 使用 MoveIt 控制 UR5 机器人进行路径规划运动控制 #### 配置环境 为了使 MoveIt 能够成功控制 UR5 机器人,需先确保 ROS 和 MoveIt 已经安装并配置好。对于特定于 UR5 的设置,在完成基本的 ROS 环境搭建之后,还需要下载 `universal_robot` 包以及 `ur_modern_driver` 来支持硬件接口[^2]。 #### 启动 MoveIt 并加载 UR5 模型 启动 MoveIt 设置助理 (MoveIt Setup Assistant),导入 UR5 描述文件来创建适合该型号的工作空间配置。这一步骤会自动生成一系列必要的 launch 文件和支持脚本以便后续使用[^3]。 #### 编写 C++ 或 Python 代码实现动作执行 编写一段简单的节点程序可以用来定义目标姿态并通过 MoveIt 接口发送给实际设备。以下是基于 C++ 实现的一个例子: ```cpp // 导入必要的头文件 #include <ros/ros.h> #include <moveit/move_group_interface/move_group_interface.h> int main(int argc, char **argv) { ros::init(argc, argv, "simple_move"); // 初始化 move group interface 对象 moveit::planning_interface::MoveGroupInterface move_group("manipulator"); geometry_msgs::Pose target_pose; // 设定目标位姿参数... target_pose.position.x = 0.5; target_pose.position.y = 0.1; target_pose.position.z = 0.7; // 设置末端执行器的目标位置为之前设定的姿态 move_group.setPoseTarget(target_pose); // 规划轨迹并尝试执行 bool success = (move_group.plan(my_plan) == moveit::planning_interface::MoveItErrorCode::SUCCESS); if(success){ move_group.move(); } } ``` 这段代码展示了如何利用 MoveIt 提供的 API 创建一个简单的客户端应用去指挥 UR5 移动到指定的位置上。需要注意的是这里只给出了单次定位的例子,而实际上可以根据需求连续地向不同地点发出指令以形成复杂的任务序列。
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值