睿尔曼超轻量仿人机械臂ROS系列-ROS第二篇 使用Moveit控制Gazebo中的机械臂

目录

简介

配置说明

6.2 仿真与真实机械臂配置

6.2.1 MoveIt!端的配置

6.2.2机器人端的配置

6.2.3启动文件arm_65_bringup_moveit.launch

6.3运行效果


简介

        MoveIt!与Gazebo的联合仿真,其主要思路为搭建ros_control和MoveIt!的桥梁。先在MoveIt!端配置关节和传感器接口yaml文件,将其加载到rviz端;再在机器人端配置ros_control和接口yaml文件,将机器人加载到Gazebo。最后同时启动加载有ros_control的Gazebo和加载有MoveIt的rviz,达到联合仿真的目的。

配置说明

1. 仿真与真实机械臂配置

1.1 MoveIt!端的配置

① 控制器配置文件controllers_gazebo.yaml controllers_gazebo.yaml在rm_65_moveit_config/config目录下,代码如下:

controller_manager_ns: controller_manager
controller_list:
  - name: arm/arm_joint_controller
    action_ns: follow_joint_trajectory
    type: FollowJointTrajectory
    default: true
    joints:
      - joint1
      - joint2
      - joint3
      - joint4
      - joint5
      - joint6

② 修改启动文件rm_65_moveit_controller_manager.launch.xml

        修改rm_65_moveit_config功能包中的rm_65_moveit_controller_manager.launch.xml,配置加载刚才创建的controllers_gazebo.yaml文件到参数服务器,代码如下:

<launch>
<arg name="execution_type" default="FollowJointTrajectory" />

<!-- loads moveit_controller_manager on the parameter server which is taken as argument
if no argument is passed, moveit_simple_controller_manager will be set -->
<arg name="moveit_controller_manager" default="moveit_simple_controller_manager/MoveItSimpleControllerManager" />
<param name="moveit_controller_manager" value="$(arg moveit_controller_manager)"/>

<!-- load controller_list -->
<arg name="use_controller_manager" default="true" />
<param name="use_controller_manager" value="$(arg use_controller_manager)" />

<!-- loads ros_controllers to the param server -->
<!-- <rosparam file="$(find rm_65_moveit_config)/config/ros_controllers.yaml"/> -->
<!-- <rosparam file="$(find rm_65_moveit_config)/config/controllers.yaml"/> -->
<rosparam file="$(find rm_65_moveit_config)/config/controllers_gazebo.yaml"/>
</launch>

③ 启动文件moveit_planning_execution.launch

                moveit_planning_execution.launch是在rm_65_moveit_config/launch目录下新创建的启动文件,用以加载MoveIt和rviz,最后运行关节状态发布器,用以向Gazebo中发布指令,代码如下:

<launch>
 # The planning and execution components of MoveIt! configured to 
 # publish the current configuration of the robot (simulated or real)
 # and the current state of the world as seen by the planner
 <include file="$(find rm_65_moveit_config)/launch/move_group.launch">
  <arg name="publish_monitored_planning_scene" value="true" />

 </include>
 # The visualization component of MoveIt!
 <include file="$(find rm_65_moveit_config)/launch/moveit_rviz.launch"/>

  <!-- We do not have a robot connected, so publish fake joint states -->
  <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher">
    <param name="/use_gui" value="false"/> 
    <rosparam param="/source_list">[/arm/joint_states]</rosparam>
  </node>
</launch>

1.2机器人端的配置

  • 关节轨迹控制器

        MoveIt!完成运动规划后的输出接口是一个命名为“FollowJointTrajectory”的action,其中包含了一系列规划好的路径点轨迹,这些信息可以通过ros_control为我们提供的一个名为“Joint Trajectory Controller”的控制器插件转换成Gazebo中机器人需要的joint位置。

① 配置文件rm_65_trajectory_control.yaml

        “FollowJointTrajectory”控制器的使用首先需要一个配置文件对机械臂六个轴的轨迹控制配置控制参数,即rm_gazebo/config目录下的rm_65_trajectory_control.yaml配置文件,代码如下:

arm:
  arm_joint_controller:
    type: "position_controllers/JointTrajectoryController"
    joints:
      - joint1
      - joint2
      - joint3
      - joint4
      - joint5
      - joint6

    gains:
      joint1:   {p: 1000.0, i: 0.0, d: 0.1, i_clamp: 0.0}
      joint2:   {p: 1000.0, i: 0.0, d: 0.1, i_clamp: 0.0}
      joint3:   {p: 1000.0, i: 0.0, d: 0.1, i_clamp: 0.0}
      joint4:   {p: 1000.0, i: 0.0, d: 0.1, i_clamp: 0.0}
      joint5:   {p: 1000.0, i: 0.0, d: 0.1, i_clamp: 0.0}
      joint6:   {p: 1000.0, i: 0.0, d: 0.1, i_clamp: 0.0}

② 控制器启动文件 

        通过一个launch文件加载Joint Trajectory Controller,即rm_gazebo/launch目录下的arm_65_trajectory_controller.launch文件,代码如下:

<launch>
    <rosparam file="$(find rm_gazebo)/config/rm_65_trajectory_control.yaml" command="load"/>
    <node name="arm_controller_spawner" pkg="controller_manager" type="spawner" respawn="false"
          output="screen" ns="/arm" args="arm_joint_controller"/>
</launch>
  • 关节状态控制器

        关节状态控制器是一个可选插件,主要作用是发布机器人的关节状态和TF变换,否则在rviz的Fixed Frame设置中看不到下拉列表中的坐标系选项,只能手动输入,但是依然可以正常使用。

① 关节状态控制器配置文件arm_gazebo_joint_states.yaml

arm_gazebo_joint_states.yaml配置文件在rm_gazebo/config目录下,代码如下:

arm:
  # Publish all joint states -----------------------------------
  joint_state_controller:
    type: joint_state_controller/JointStateController
    publish_rate: 50  

② 启动文件arm_gazebo_states.launch加载参数

arm_gazebo_states.launch文件在rm_gazebo/launch目录下,代码如下:

<launch>
    <!-- 将关节控制器的配置参数加载到参数服务器中 -->
    <rosparam file="$(find rm_gazebo)/config/arm_gazebo_joint_states.yaml" command="load"/>

    <node name="joint_controller_spawner" pkg="controller_manager" type="spawner" respawn="false"
          output="screen" ns="/arm" args="joint_state_controller" />

    <!-- 运行robot_state_publisher节点,发布tf  -->
    <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher"
        respawn="false" output="screen">
        <remap from="/joint_states" to="/arm/joint_states" />
    </node>
</launch>

1.3启动文件arm_65_bringup_moveit.launch

        顶层启动文件arm_65_bringup_moveit.launch在rm_gazebo/launch目录下,用以启动Gazebo,并且加载所有的控制器,最后启动MoveIt!,代码如下:

<launch>
    <!-- Launch Gazebo  -->
    <include file="$(find rm_gazebo)/launch/arm_world.launch" />

    <!-- ros_control arm launch file -->
    <include file="$(find rm_gazebo)/launch/arm_gazebo_states.launch" />   

    <!-- ros_control trajectory control dof arm launch file -->
    <include file="$(find rm_gazebo)/launch/arm_65_trajectory_controller.launch" />
    <!-- moveit launch file -->
    <include file="$(find rm_65_moveit_config)/launch/moveit_planning_execution.launch" />
</launch>

2. 运行效果

启动节点前,需要确保rm_65_moveit_config/launch/rm_65_moveit_controller_manager.launch.xml文件中配置加载到参数服务器的是controllers_gazebo.yaml文件,见图6-1:

图1-1 rm_65_moveit_controller_manager.launch.xml加载controllers_gazebo.yaml

执行以下命令运行MoveIt!和Gazebo: 

cd ~/ws_rmrobot
source devel/setup.bash
roslaunch rm_gazebo arm_65_bringup_moveit.launch

图1-2 RM65-B机器人在Gazebo中显示效果

启动后打开的rviz如图6-3所示:

图1-3 rviz启动界面

        在打开的rviz中,暂时还看不到任何机器人模型,甚至还会提示一些错误,接下来进行简单配置解决这些问题。

        首先将“Fixed Frame”修改成“base_link”;然后点击左侧插件列表栏中的“Add”按钮,将MotionPlanning加入控制窗口。此时应该可以看到机器人出现在右侧主界面中,Gazebo中机器人的姿态应该和rvize中的显示一致。操作如图6-4~6-6所示:

 图1-4 在rviz中将“Fixed Frame”修改成“base_link”

图1-5 rviz中将MotionPlanning加入控制窗口

图1-6 rviz中显示RM65-B机器人 

        接下来使用MoveIt!规划运动的几种方式就可以控制Gazebo中的机器人了,例如图6-7拖动机器人末端到一个位置,然后点击“Plan & Execute”按钮,可以看到rviz中机器人开始规划执行并且可以看到Gazebo中的机器人开始运动且与rviz中的机器人模型保持一致,如图6-8所示。        

图1-7 使用MoveIt!拖动规划执行 

 图1-8 Gazebo中机器人按rviz规划同步执行效果


  • 9
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
你可以使用ROS-Melodic和MoveIt来进行UR5机械臂的仿真控制。以下是一个基本的步骤: 1. 安装ROS-Melodic:请根据ROS官方文档的说明安装ROS-Melodic。确保你的系统满足所有的依赖项。 2. 安装MoveIt:在终端运行以下命令来安装MoveIt: ``` sudo apt-get install ros-melodic-moveit ``` 3. 配置工作空间:创建一个新的工作空间,并将其初始化为ROS工作空间。例如,你可以运行以下命令: ``` mkdir -p ~/catkin_ws/src cd ~/catkin_ws/ catkin_make ``` 4. 下载UR5机械臂包:在终端运行以下命令来下载UR5机械臂ROS软件包: ``` cd ~/catkin_ws/src git clone https://github.com/ros-industrial/universal_robot.git ``` 5. 下载MoveIt配置文件:在终端运行以下命令来下载MoveIt配置文件: ``` cd ~/catkin_ws/src git clone https://github.com/ros-planning/moveit_resources.git ``` 6. 构建和编译:在终端运行以下命令来构建和编译你的工作空间: ``` cd ~/catkin_ws/ catkin_make ``` 7. 启动仿真环境:在终端运行以下命令来启动UR5机械臂的仿真环境: ``` roslaunch ur_gazebo ur5.launch ``` 8. 启动MoveIt RViz:在终端运行以下命令来启动MoveIt RViz界面: ``` roslaunch ur5_moveit_config moveit_rviz.launch config:=true ``` 9. 进行控制:在RViz界面,你可以使用MoveIt插件来规划和控制UR5机械臂的运动。你可以设置目标位置、执行运动等。 这些是基本的步骤,可以帮助你开始使用ROS-Melodic和MoveIt进行UR5机械臂的仿真控制。你可以根据自己的需求进行进一步的定制和开发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值