我终于实现Moveit+gazbeo对机械臂的联合仿真控制了

这篇具有很好参考价值的文章主要介绍了我终于实现Moveit+gazbeo对机械臂的联合仿真控制了。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

      开发机械臂,别的问题都好商量,但是对于实体机械臂这个烧钱的东西来说,绝对是一大批开发者的拦路虎。方法总比困难多。对于没有实体机械臂只能进行仿真的人来说,gazebo可真是太香了。但是浏览了一众网上的的教程,一步一步跟着走了无数遍,最终面临的问题是Rviz中的机械臂动但是Gazebo中的机械臂一动不动。

苦心钻研,终于,在moveit_setupassistant生成的文件基础上,完成了moveit+gazboe的联合仿真。具体操作流程为:

我的环境:

linux:Ununtu 18.04

Ros:melodic+moveit1+gazbeo 9.0

1、准备URDF文件

  这里我用的是SW中导出的urdf模型,这里网上的教程很多,这里不赘述。

2、生成配置文件

保险起见,我把我的每一步配置都放着下面,其实网上很多教程都是 每位博主成功的历程,我们跟着一步一步操作,不能成功原因可能就是一些细节,但是这些细节真的很重要。

2.1 生成碰撞矩阵,这部分就是无脑操作 直接点击Generate collision matrix生成即可

ros gazebo与实际机械臂联调,机器人,c++,学习

2.2 添加虚拟关节,这部分的作用据说是防止机械臂在gazbeo中倾覆,但是我实验了一下吗,即使设置了也没有用,所以这步直接跳过

ros gazebo与实际机械臂联调,机器人,c++,学习

2.3 设定规划组

如果没有特殊要求,为了保证实现mvoeit+gazbeo 的联合仿真,大家就按照我的配置方式设置就行(别的方式我没试过,不知道能否成功)。ros gazebo与实际机械臂联调,机器人,c++,学习

 2.3 添加机械臂的位姿,这里可以在之后的控制中实现快速到达指定位置,我设置的是让各个关节都归零,位姿名称为home

ros gazebo与实际机械臂联调,机器人,c++,学习

2.3 End effectors Passie joints 这两步在当前的情境中没有用,所以直接跳过就行,直接配置ROS control

ros gazebo与实际机械臂联调,机器人,c++,学习

2.4  生成仿真文件,用这部分生成的urdf内容去替换我们原来的URDF文件,就是把生成的内容全部复制,将原来的机械臂urdf文件中的内容全部替换。

ros gazebo与实际机械臂联调,机器人,c++,学习

2.4 跳过3Dperception 填写作者信息后,直接导出配置文件。

3 修改配置文件

这一步是最重要的,都是细节问题,大家一定要细心,否则很容易失败

3.1 修改UREF文件

这部分修改的内容有两部分:在urdf文件开头添加如下内容,将机械臂和World固定起来,否则打开gazbeo的时候,机械臂会发生倾覆 触地的情况,

   <link name="world" />
    <joint name="fixed" type="fixed">
        <parent link="world" />
        <child link="base_link" />
    </joint>

第二部分是检查一下urdf文件中的gazbeo标签

<!--关节的传动设置-->
<transmission name="trans_joint_1">
        <type>transmission_interface/SimpleTransmission</type>
        <joint name="joint_1">
            <hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
        </joint>
        <actuator name="joint_1_motor">
            <hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
            <mechanicalReduction>1</mechanicalReduction>
        </actuator>
    </transmission>

<!--gazbeo控制器插件设置-->
<gazebo>
        <plugin name="ros_control" filename="libgazebo_ros_control.so">
            <robotNamespace>/</robotNamespace>
        </plugin>
 </gazebo>

3.2 修改ros_controller.xml文件,文件在生成的配置文件中的config文件夹下

我修改后的文件如下:

# Simulation settings for using moveit_sim_controllers
moveit_sim_hw_interface:
  joint_model_group: arm
  joint_model_group_pose: home
# Settings for ros_control_boilerplate control loop
generic_hw_control_loop:
  loop_hz: 300
  cycle_time_error_threshold: 0.01
# Settings for ros_control hardware interface
hardware_interface:
  joints:
    - joint_1
    - joint_2
    - joint_3
    - joint_4
    - joint_5
  sim_control_mode: 1  # 0: position, 1: velocity
# Publish all joint states
# Creates the /joint_states topic necessary in ROS
joint_state_controller:
  type: joint_state_controller/JointStateController
  publish_rate: 50
controller_list:
  - name: arm_controller
    action_ns: follow_joint_trajectory
    default: True
    type: FollowJointTrajectory
    joints:
      - joint_1
      - joint_2
      - joint_3
      - joint_4
      - joint_5
arm_controller:
  type: position_controllers/JointTrajectoryController
  joints:
      - joint_1
      - joint_2
      - joint_3
      - joint_4
      - joint_5
  constraints:
      goal_time: 0.6
      stopped_velocity_tolerance: 0.05
      joint_1: {trajectory: 0.1, goal: 0.1}
      joint_2 : {trajectory: 0.1, goal: 0.1}
      joint_3: {trajectory: 0.1, goal: 0.1}
      joint_4: {trajectory: 0.1, goal: 0.1}
      joint_5: {trajectory: 0.1, goal: 0.1}
  stop_trajectory_duration: 0.5
  state_publish_rate:  25
  action_monitor_rate: 1

 主要是在原本生成的文件最后添加了以下内容

arm_controller:
  type: position_controllers/JointTrajectoryController
  joints:
      - joint_1
      - joint_2
      - joint_3
      - joint_4
      - joint_5
  constraints:
      goal_time: 0.6
      stopped_velocity_tolerance: 0.05
      joint_1: {trajectory: 0.1, goal: 0.1}
      joint_2 : {trajectory: 0.1, goal: 0.1}
      joint_3: {trajectory: 0.1, goal: 0.1}
      joint_4: {trajectory: 0.1, goal: 0.1}
      joint_5: {trajectory: 0.1, goal: 0.1}
  stop_trajectory_duration: 0.5
  state_publish_rate:  25
  action_monitor_rate: 1

3.3 修改gazbeo.launch 文件,这个文件在配哦之文件的launch文件中

  <node name="spawn_gazebo_model" pkg="gazebo_ros" type="spawn_model" args="-urdf -param robot_description -model robot -x 0 -y 0 -z 0"
    respawn="false" output="screen" />

将以上内容改为以下内容,目的是将机械臂在gazebo中抬高0.4米,避免机械臂触地请路况

  <node name="spawn_gazebo_model" pkg="gazebo_ros" type="spawn_model" args="-urdf -param robot_description -model robot -x 0 -y 0 -z 0.4"
    respawn="false" output="screen" />

 3.4 修改ros_controller.launch 文件把 <!-- Load the controllers -->下加载控制器的方式改为以下内容,就是把我们在ros_controller.xml文件中配置的控制器在这里启动。

  <node name="controller_spawner" pkg="controller_manager" type="spawner" respawn="false"
    output="screen" args="spawn joint_state_controller arm_controller"/>

到此,该修改的内容就都结束了,提醒大家注意一下容易出错的地方,在修改所有XML格式文件的过程中,一定要注意对齐格式,有时候一个空格就会造成启动文件失败,这都是我踩过的坑啊。

最后启动以下命令,同时启动gazbeo和mvoeit,.拖动rviz中的机械臂 plan and execute,惊喜来了,gazebo中的机械臂动起来了!!!!

roslaunch (robot_name)_moveit_config demo_gazbeo.launch

运行rqt_graph命令查看节点关系,没错gazebo确确实实通过arm_controller这个控制器和move_groupl建立起连接了!

ros gazebo与实际机械臂联调,机器人,c++,学习

 大功告成。总结不容易,希望能帮大家少踩一些坑。

如果帮到了你,麻烦关注收藏一下呗,我们一起搞技术,嘿嘿文章来源地址https://www.toymoban.com/news/detail-800469.html

到了这里,关于我终于实现Moveit+gazbeo对机械臂的联合仿真控制了的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 一文学会使用键盘控制moveit2机械臂模型

    在之前文章的基础上相信大家已经学会了如何搭建一个机械臂模型,那么我们如何对其进行控制呢,上网检索了一下没找到能清晰指导实现整套流程的文章,所以自己摸索着写了一篇希望能帮到大家 这篇文章会分享记录如何实现用键盘控制之前我们建立的gp110机械臂的全套流

    2024年02月11日
    浏览(40)
  • 水下机器人双机械手系统动态建模与控制仿真(Matlab代码实现)

    ​       目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 水下机器人-机械手系统(Underwater vehicle-manipulator systems, UVMS)可以完成除观测之外的水下采样、抓取、操作等任务,在海洋科学考察、海洋工程等领域得到广泛应用。通过对近年来国内外UVMS的研究现状

    2024年02月08日
    浏览(55)
  • 机械臂的雅克比矩阵推导

    p i = p i − 1 + R i − 1 r i − 1 , i i − 1 mathbf{p}_{i}=mathbf{p}_{i-1}+mathbf{R}_{i-1} mathbf{r}_{i-1, i}^{i-1} p i ​ = p i − 1 ​ + R i − 1 ​ r i − 1 , i i − 1 ​ p i − 1 mathbf{p}_{i-1} p i − 1 ​ 是 { i − 1 } {i-1} { i − 1 } 坐标系的原点的向量, p i mathbf{p}_{i} p i ​ 是 { i } {i} { i } 坐标系的原

    2024年02月15日
    浏览(60)
  • simulink与modelsim联合仿真buck闭环设计 主电路用simulink搭建,控制电路完全有verilog语言实现

    simulink与modelsim联合仿真buck闭环设计  主电路用simulink搭建,控制电路完全有verilog语言实现(包括DPWM,PI补偿器) 适用于验证基于fpga的电力电子变换器控制,由于控制回路完全由verilog语言编写,因此仿真验证通过,可直接下载进fpga板子,极大缩短了开发数字电源的研发周期。

    2024年01月16日
    浏览(43)
  • (7)机械臂的速度雅克比矩阵

    前面介绍了机器人的逆运动学解法又几何法和代数法得到的都是机器人逆运动学的解析解,但是由于解析解可能不存在,所以需要寻求新的方法。这里介绍速度级的雅克比方法(Jacobian)。雅克比方法求机器人的运动学逆解对于不同类型的机械臂求解过程是相同的,而且不要

    2024年02月01日
    浏览(41)
  • 机械臂的动力学分析-工业机器人

    工业机器人动力学研究采用的方法有很多,例如拉格朗日法、牛顿-欧拉法、高斯法、凯恩法等,在此重点介绍牛顿-欧拉法和拉格朗日法。牛顿-欧拉法需要从运动学出发求得加速度,并计算各内作用力。对于较复杂的系统,此种分析方法十分复杂与麻烦。而拉格朗日法,只需

    2023年04月08日
    浏览(42)
  • (6)六轴机械臂的运动学正、逆解

    下面在前面的ur5机械臂的DH参数基础是对其正逆解进行求解,为了后面能在MATLAB中利用stl文件进行实际显示,这里以标准DH参数为例进行讲解。( 修正DH参数在用plot3d函数是显示失败,不知道是不是这个函数只能显示标准dh参数的机械臂模型,有知道的网友可以在评论里告知一

    2023年04月09日
    浏览(51)
  • SolidWorks导出机械臂的URDF模型各个关节坐标系设置

    郑重提示 :为了记录自己在学习过程中遇到的问题,所以记录了这篇博客。。在后面学习的过程中发现 之前 这篇博客记录的导出URDF模型坐标系设置方法存在一些问题,不好写DH参数表,,更更要命的是,好些朋友都收藏了这篇博客, 为了不误导大家,再次对以下内容做出修

    2024年02月05日
    浏览(125)
  • Aloha 机械臂的学习记录3——AWE:Pycharm运行代码记录

    之前的博客创作了三偏关于Aloha_AWE的 liunx终端 指令运行代码的示例: Aloha 机械臂的学习记录——AWE:Bimanual Simulation Suite: https://blog.csdn.net/qq_54900679/article/details/134889183?spm=1001.2014.3001.5502 Aloha 机械臂的学习记录1——AWE:Bimanual Simulation Suite(Save waypoints) : https://blog.csdn.net/qq_5

    2024年01月24日
    浏览(61)
  • 6轴关节机械手仿真和控制QtQuick3D 和 CodeSys Robotics

    本工程利用QtQuick3D做上位机 ,基于CodeSys的控制器,使用 Robotics的库,进行6轴垂直机械手仿真和控制。 2.1.1程序组织 2.1.2代码 2.1.2.1 pro文件 2.1.2.2 armgeometry.h 2.1.2.3 armgeometry.cpp 2.1.2.4 plccomm.h 2.1.2.5 plccomm.cpp 2.1.2.6 main.cpp 2.1.2.7 main.qml 2.2.1 程序组织 2.2.2 程序代码 2.2.2.1 KinGroup 2.2

    2024年02月08日
    浏览(68)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包