一文学会MoveIt Setup Assistant搭建moveit2机械臂模型

news2024/12/23 9:32:10

文章目录

  • 前言
  • 一、MoveIt Setup Assistant 是什么?
  • 二、搭建步骤
    • 拉取相关repo
    • 创建项目文档
      • 编辑moveit_description文件夹
      • 编辑moveit_config文件夹
    • MoveIt Setup Assistant 配置
      • Launch moveit_setup_assistant
      • 配置干涉关系
      • 配置planning groups
      • 配置ros2 controller
      • 配置moveit controller
      • 配置用户
      • 配置生成路径
    • 运行仿真
      • 修改 moveit config 文件夹
  • 总结


前言

之前写了一篇文章《从零开始搭建一个moveit2简单机械臂模型》如何通过urdf文件搭建一个简单机械臂模型并调用rviz做显示。本文将通过MoveIt Setup Assistant来搭建一个机械臂,这台机械臂将包含urdf同时配置好srdf,动力学模型,init pose,ompl参数等文件。


一、MoveIt Setup Assistant 是什么?

MoveIt Setup Assistant 是 MoveIt 软件包的一部分,它是一个用于配置机器人和 MoveIt 的可视化工具。通过 MoveIt Setup Assistant,用户可以添加机器人的 URDF 模型以及定义其运动学参数和限制。还可以使用该工具创建运动规划场景,包括环境、终端姿态、插值器和碰撞检测等。MoveIt Setup Assistant 使用户可以快速轻松地设置 MoveIt,以便进行运动规划和控制。

二、搭建步骤

本文采用yaskawa motoman 搭建机械臂模型,选用型号为gp110
模型gitlab repo https://github.com/ros-industrial/motoman

拉取相关repo

命令如下:

mkdir moveit_robot_resources
cd moveit_robot_resources
git clone git@gitlab.com:ros-industrial/motoman.git

创建项目文档

命令如下:

cd moveit_robot_resources
ros2 pkg create --build-type ament_cmake gp110_moveit_config
ros2 pkg create --build-type ament_cmake gp110_moveit_description

编辑moveit_description文件夹

文件夹结构如下:

gp110_moveit_description
├── CMakeLists.txt
├── meshes
│   ├── collision
│   │   ├── base_link.stl
│   │   ├── link_1_s.stl
│   │   ├── link_2_l.stl
│   │   ├── link_3_u.stl
│   │   ├── link_4_r.stl
│   │   ├── link_5_b.stl
│   │   └── link_6_t.stl
│   └── visual
│       ├── base_link.stl
│       ├── link_1_s.stl
│       ├── link_2_l.stl
│       ├── link_3_u.stl
│       ├── link_4_r.stl
│       ├── link_5_b.stl
│       └── link_6_t.stl
├── package.xml
└── urdf

拷贝motoman/motoman_gp110_support/meshes/gp110中的collinsionvisual文件夹到gp110_moveit_description/meshes

修改CMakeLists.txt

cmake_minimum_required(VERSION 3.8)
# 修改名字按照如下格式,moveit_resources_*_moveit_config前后缀要保留
project(moveit_resources_gp110_moveit_config)

if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
  add_compile_options(-Wall -Wextra -Wpedantic)
endif()

# find dependencies
find_package(ament_cmake REQUIRED)
# uncomment the following section in order to fill in
# further dependencies manually.
# find_package(<dependency> REQUIRED)

ament_package()
# 关键增加下边一行
install(DIRECTORY meshes urdf DESTINATION share/${PROJECT_NAME})

修改package.xml

<?xml version="1.0"?>
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3">
  <name>moveit_resources_gp110_moveit_config</name>
  <version>0.0.0</version>
  <description>TODO: Package description</description>
  <maintainer email="example@example.com">dev</maintainer>
  <license>TODO: License declaration</license>

  <buildtool_depend>ament_cmake</buildtool_depend>

  <export>
    <build_type>ament_cmake</build_type>
  </export>
</package>

拷贝motoman/motoman_resources/urdf中的common_colors.xacrocommon_materials.xacro到config目录
拷贝motoman/motoman_gp110_support/urdf/gp110_macro.xacro到config目录

编辑moveit_config文件夹

文件结构如下:

gp110_moveit_config
├── CMakeLists.txt
├── config
│   ├── common_colors.xacro
│   ├── common_materials.xacro
│   ├── gp110_macro.xacro
│   └── gp110.urdf.xacro
|   └── robot.urdf.xacro
├── launch
└── package.xml
└── .setup_assistant

修改CMakeLists.txt

cmake_minimum_required(VERSION 3.8)
project(moveit_resources_gp110_moveit_config)

if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
  add_compile_options(-Wall -Wextra -Wpedantic)
endif()

# find dependencies
find_package(ament_cmake REQUIRED)
# uncomment the following section in order to fill in
# further dependencies manually.
# find_package(<dependency> REQUIRED)

ament_package()

install(DIRECTORY config launch DESTINATION share/${PROJECT_NAME})

修改package.xml

<?xml version="1.0"?>
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3">
  <name>moveit_resources_gp110_moveit_config</name>
  <version>0.0.0</version>
  <description>TODO: Package description</description>
  <maintainer email="example@example.com">dev</maintainer>
  <license>TODO: License declaration</license>

  <buildtool_depend>ament_cmake</buildtool_depend>

  <exec_depend>moveit_resources_gp110_moveit_description</exec_depend>

  <export>
    <build_type>ament_cmake</build_type>
  </export>
</package>

创建gp110.urdf.xacro文件,其内容为:

<?xml version="1.0"?>
<robot xmlns:xacro="http://www.ros.org/wiki/xacro" name="gp110">
    <!-- Import robot arm -->
    <xacro:include filename="gp110_macro.xacro" />

    <!-- Set emviroment parameter. -->
    <xacro:motoman_gp110 prefix="" mesh_path_prefix="package://moveit_resources_gp110_moveit_description"/>

</robot>

修改gp110_macro.xacro为:
如下内容改了几句,后续均按照此规则修改。

<?xml version="1.0" ?>
<robot xmlns:xacro="http://ros.org/wiki/xacro">
	<!-- <xacro:macro name="motoman_gp110" params="prefix"> -->
  <xacro:macro name="motoman_gp110" params="prefix mesh_path_prefix">
  	<!-- <xacro:include filename="$(find motoman_resources)/urdf/common_materials.xacro"/> -->
    <xacro:include filename="common_materials.xacro"/>

    <!-- link list -->
    <link name="${prefix}base_link">
      <visual>
        <geometry>
        	 <!-- <mesh filename="package://motoman_gp110_support/meshes/gp110/visual/base_link.stl"/> -->
          <mesh filename="${mesh_path_prefix}/meshes/visual/base_link.stl"/>
        </geometry>
        <xacro:material_yaskawa_blue/>
      </visual>
      <collision>
        <geometry>
          <mesh filename="${mesh_path_prefix}/meshes/collision/base_link.stl"/>
        </geometry>
      </collision>
    </link>
    <link name="${prefix}link_1_s">
      <visual>
        <geometry>
          <mesh filename="${mesh_path_prefix}/meshes/visual/link_1_s.stl"/>
        </geometry>
        <xacro:material_yaskawa_blue/>
      </visual>
      <collision>
        <geometry>
          <mesh filename="${mesh_path_prefix}/meshes/collision/link_1_s.stl"/>
        </geometry>
      </collision>
    </link>
    
 ...

创建robot.urdf.xacro文件,其内容为:

<?xml version="1.0"?>
<robot xmlns:xacro="http://www.ros.org/wiki/xacro" name="robot">

    <!-- Import robot urdf file -->
    <xacro:include filename="$(find moveit_resources_gp110_moveit_description)/urdf/gp110.urdf" />

</robot>

xacro生成urdf文件:

cd moveit_robot_resources
xacro gp110_moveit_config/config/gp110.urdf.xacro -o gp110_moveit_description/urdf/gp110.urdf
check_urdf gp110_moveit_description/urdf/gp110.urdf

robot name is: gp110
---------- Successfully Parsed XML ---------------
root Link: base_link has 2 child(ren)
    child(1):  base
    child(2):  link_1_s
        child(1):  link_2_l
            child(1):  link_3_u
                child(1):  link_4_r
                    child(1):  link_5_b
                        child(1):  link_6_t
                            child(1):  flange
                                child(1):  tool0

修改.setup_assistant

moveit_setup_assistant_config:
  urdf:
    package: moveit_resources_gp110_moveit_config
    relative_path: config/robot.urdf.xacro
  srdf:
    relative_path: config/robot.srdf
  package_settings:
    author_name: binglee
    author_email: lilinxin75@gmail.com
    generated_timestamp: 1686213224
  control_xacro:
    command:
      - position
    state:
      - position
      - velocity
  modified_urdf:
    xacros:
      - control_xacro
  control_xacro:
    command:
      - position
    state:
      - position
      - velocity

编译项目:

$ colcon build --packages-up-to --cmake-args -DCMAKE_BUILD_TYPE=Release

Starting >>> moveit_resources_gp110_moveit_description
Finished <<< moveit_resources_gp110_moveit_description [0.14s]                  
Starting >>> moveit_resources_gp110_moveit_config
Finished <<< moveit_resources_gp110_moveit_config [0.07s]                  

Summary: 2 packages finished [0.28s]

$ . install/setup.bash 

MoveIt Setup Assistant 配置

Launch moveit_setup_assistant

ros2 launch moveit_setup_assistant setup_assistant.launch.py

在这里插入图片描述

配置干涉关系

这里直接用默认关系
在这里插入图片描述

配置planning groups

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
点击Add Kin. Chain如下所示
在这里插入图片描述

配置ros2 controller

在这里插入图片描述

配置moveit controller

在这里插入图片描述

配置用户

在这里插入图片描述

配置生成路径

在这里插入图片描述

生成项目文件

在这里插入图片描述

在这里插入图片描述
现在退出即可

运行仿真

修改 moveit config 文件夹

修改robot.urdf.xacro文件

<?xml version="1.0"?>
<robot xmlns:xacro="http://www.ros.org/wiki/xacro" name="robot">
    <xacro:arg name="initial_positions_file" default="initial_positions.yaml" />

    <!-- Import robot urdf file -->
    <!-- 修改此行如下 <xacro:include filename="$(find moveit_resources_gp110_moveit_config)/config/robot.urdf.xacro" /> -->
    <xacro:include filename="$(find moveit_resources_gp110_moveit_description)/urdf/gp110.urdf" />

    <!-- Import control_xacro -->
    <xacro:include filename="robot.ros2_control.xacro" />


    <xacro:robot_ros2_control name="FakeSystem" initial_positions_file="$(arg initial_positions_file)"/>

</robot>

修改CMakeLists.txt文件

cmake_minimum_required(VERSION 3.22)
# project(gp110_moveit_config)
project(moveit_resources_gp110_moveit_config)

find_package(ament_cmake REQUIRED)

ament_package()

install(DIRECTORY launch DESTINATION share/${PROJECT_NAME}
  PATTERN "setup_assistant.launch" EXCLUDE)
install(DIRECTORY config DESTINATION share/${PROJECT_NAME})
install(FILES .setup_assistant DESTINATION share/${PROJECT_NAME})

修改package.xml文件

<?xml version="1.0"?>
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3">
  <!-- <name>gp110_moveit_config</name> -->
  <name>moveit_resources_gp110_moveit_config</name>
  <version>0.3.0</version>
  <description>
     An automatically generated package with all the configuration and launch files for using the robot with the MoveIt Motion Planning Framework
  </description>
  <maintainer email="lilinxin75@gmail.com">binglee</maintainer>

  <license>BSD</license>

  <url type="website">http://moveit.ros.org/</url>
  <url type="bugtracker">https://github.com/ros-planning/moveit2/issues</url>
  <url type="repository">https://github.com/ros-planning/moveit2</url>

  <author email="lilinxin75@gmail.com">binglee</author>

  <buildtool_depend>ament_cmake</buildtool_depend>

  <exec_depend>moveit_ros_move_group</exec_depend>
  <exec_depend>moveit_kinematics</exec_depend>
  <exec_depend>moveit_planners</exec_depend>
  <exec_depend>moveit_simple_controller_manager</exec_depend>
  <exec_depend>joint_state_publisher</exec_depend>
  <exec_depend>joint_state_publisher_gui</exec_depend>
  <exec_depend>tf2_ros</exec_depend>
  <exec_depend>xacro</exec_depend>
  <!-- The next 2 packages are required for the gazebo simulation.
       We don't include them by default to prevent installing gazebo and all its dependencies. -->
  <!-- <exec_depend>joint_trajectory_controller</exec_depend> -->
  <!-- <exec_depend>gazebo_ros_control</exec_depend> -->
  <exec_depend>controller_manager</exec_depend>
  <exec_depend>moveit_configs_utils</exec_depend>
  <exec_depend>moveit_resources_gp110_moveit_description</exec_depend>
  <exec_depend>moveit_ros_move_group</exec_depend>
  <exec_depend>moveit_ros_visualization</exec_depend>
  <exec_depend>moveit_ros_warehouse</exec_depend>
  <exec_depend>moveit_setup_assistant</exec_depend>
  <exec_depend>robot_state_publisher</exec_depend>
  <exec_depend>rviz2</exec_depend>
  <exec_depend>rviz_common</exec_depend>
  <exec_depend>rviz_default_plugins</exec_depend>
  <exec_depend>tf2_ros</exec_depend>
  <exec_depend>warehouse_ros_mongo</exec_depend>
  <exec_depend>xacro</exec_depend>


  <export>
      <build_type>ament_cmake</build_type>
  </export>
</package>

修改launch 文件,每个launch均修改如下,为避免这一步最好在前期是packages使用moveit_resources_gp110_moveit_config创建
在这里插入图片描述编译:

$ colcon build --packages-up-to --cmake-args -DCMAKE_BUILD_TYPE=Release
Starting >>> moveit_resources_gp110_moveit_description
Finished <<< moveit_resources_gp110_moveit_description [0.10s]                  
Starting >>> moveit_resources_gp110_moveit_config
Finished <<< moveit_resources_gp110_moveit_config [0.13s]                  

Summary: 2 packages finished [0.30s]

$ . install/setup.bash

运行:

$ ros2 launch moveit_resources_gp110_moveit_config demo.launch.py 

在这里插入图片描述
插入一个简单的轨迹规划如下:

在这里插入图片描述


总结

以上就是今天要讲的内容,本文记录了全套使用MoveIt Setup Assistant搭建机械臂的过程,中间也遇到一些问题,在本文中都有说说明。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/624003.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一个 TCP 连接可以发送多少个 HTTP 请求

第一个问题 第二个问题 第三个问题 第四个问题 第五个问题 曾经有这么一道面试题&#xff1a;从 URL 在浏览器被被输入到页面展现的过程中发生了什么&#xff1f; 相信大多数准备过的同学都能回答出来&#xff0c;但是如果继续问&#xff1a;收到的 HTML 如果包含几十个图…

优质高效!阿里内部超高质量的k8s+Jenkins笔记,技术与实战齐飞

什么是k8s? Kubernetes是一个用于容器集群的自动化部署、扩容以及运维的开源平台。 k8s孕育的初衷是培育出一个组件及工具的生态&#xff0c;帮助大家减轻在公有云及私有云上运行应用的负担&#xff0c;换言之&#xff0c;使得大型分布式应用的构建和运维变得更加简单&#…

⛳前端进阶:SEO 全方位解决方案

&#x1f33b; 前言 SEO 代表搜寻引擎最佳化/搜寻引擎优化(英文全名Search Engine Optimization&#xff0c;简称SEO)&#xff0c;是指通过了解搜寻引擎的自然排名的算法逻辑&#xff0c;以提高目标网站在有关搜寻引擎内排名的方式。 网站的 SEO 至关重要&#xff0c;它可以让…

基于springboot的大学外卖系统源码数据库

源码资源在这里 https://download.csdn.net/download/2301_76965813/87881744 1 系统分析 1.1 需求分析 该系统的开发&#xff0c;主要是用在了各个订餐网站的系统&#xff0c;用户可以通过网站进行外卖订餐的信息挂了&#xff0c;并能够对客户进行外卖菜品的订单提交等。该…

X509证书解析详解

上传的证书文件&#xff0c;如何判断这个证书是否满足X509标准格式的呢&#xff1f; 下面是我阅读jdk源码&#xff0c;总结出的解析步骤。 jdk版本&#xff1a;jdk11 方法的入口 这是整个方法的起点&#xff0c;下面的步骤是根据这里方法调用跟踪到的&#xff0c;需要注意的是…

100种思维模型之细节效率思维模型-74

提及细节效率&#xff1f;也许很多人会有疑问&#xff0c;“效率”怎么跟“细节”挂上钩&#xff0c;注重“细节”了&#xff0c;还能有“高率”&#xff1f; 是的&#xff0c;细节能提高效率&#xff0c;注意某些细节&#xff0c;效率事半功倍。 01、何谓细节效率思维模型 一…

truncate导致慢查询根因竟然是“多此一举”

基本信息&#xff1a; 线上一个库5.7.25库经常出现大量慢查询&#xff0c;在再次出现时登陆数据库进行分析&#xff0c;通过show engine innodb status 内容&#xff0c;发线程全部在等一个锁&#xff0c;这个锁极可能来源于这个truncate table动作&#xff1a; ---TRANSACTIO…

【Flutter】widgets (5) Flutter 理解 Flutter 的 Stateful Widget 有状态组件

文章目录 一、前言二、Stateful Widget三、StatefulWidget和State类的关系四、创建StatefulWidget五、完整代码示例六、总结一、前言 在之前的教程中,我们掌握了Stateless Widgets,也就是无状态组件的基本用法。 但是,应用程序不是静态不变的,我们需要界面中用户的操作,…

OCP浸没式液冷基本规范(概述和信号完整性部分)

液冷技术概述和浸没式液体标准化的需求 数据中心行业主要考虑两种类型的液体冷却技术来推动节能和可持续发展&#xff0c;分别是冷板式和浸没式&#xff0c;每一种技术里的液体又包含单相和双相两种规格&#xff1a; 冷板技术与浸没技术的主要区别之一是&#xff0c;在浸没的情…

操作系统原理 —— 什么是基本分页存储管理?(二十二)

在操作系统中&#xff0c;一个新的进程需要载入内存当中执行&#xff0c;在装入的时候需要给该进程分配一定的运行内存&#xff0c;在之前的章节中讲解了连续分配的几种方式&#xff0c;比如&#xff1a;单一连续分配、固定分区分配、动态分区分配&#xff0c;还讲解了对应的动…

MySQL表相关操作

一、存储引擎介绍 存储引擎即表类型&#xff0c;mysql根据不同的表类型会有不同的处理机制 1、什么是存储引擎 mysql中建立的库 > 文件夹 库中建立的表 > 文件 现实生活中我们用来存储数据的文件有不同的类型&#xff0c;每种文件类型对应各自不同的处理机制&#x…

基于LPP算法实现MNIST数据集降维

目录 1、作者介绍2、LPP算法简介2.1 基本概念及原理2.2 算法流程 3、LPP算法实现3.1 数据集简介3.2 代码实现3.2.1 完整代码3.2.2 运行结果 4、参考链接 1、作者介绍 刘晨雨&#xff0c;男&#xff0c;西安工程大学电子信息学院&#xff0c;2022级研究生 研究方向&#xff1a;…

低代码开发重要工具:jvs-rules 规则引擎功能介绍(四)

一、策略管理 JVS-Rules采用业务与技术分离的思路&#xff0c;业务人员可以配置和业务相关的内容&#xff0c;可以不考虑底层变量的配置&#xff0c;只需要配置对业务的描述&#xff0c;具体实现的变量绑定可以由技术人员参与&#xff0c;这里就体现了技术与业务规则可以解耦。…

值得收藏的20张小学语文思维导图

思维导图不仅在我们的工作生活中起到越来越重要的作用&#xff0c;也在悄无声息中进入到了我们小学生的课堂。 有需要的家长赶快帮自家的宝贝收藏起来吧&#xff01; 小学语文_ProcessOn思维导图流程图https://link.zhihu.com/?targethttps%3A//www.processon.com/template/s…

leetcode 二分查找小结

文章目录 题目34. 在排序数组中查找元素的第一个和最后一个位置240. 搜索二维矩阵378. 有序矩阵中第 K 小的元素287. 寻找重复数33. 搜索旋转排序数组 总结 题目 34. 在排序数组中查找元素的第一个和最后一个位置 原始思路&#xff1a; class Solution:def searchRange(self,…

Python实现的端午节吃棕子除五毒体感小游戏源码,利用Paddlehub制作的端午体感小游戏,根据摄像头识别的人脸进行控制

利用Paddlehub制作端午体感小游戏 前言 马上要端午节,所以干脆再重写一些逻辑,做个端午节定制小游戏吧. 端午特色 游戏的贴图全换成了端午节相关贴图:三种粽子造型 雄黄酒 以及五毒:蛇,壁虎,蜈蚣,蟾蜍,蟹子 其实五毒也是我在逛了粽子博物馆才看到的哈哈哈,所以虽…

Jmeter+jenkins+ant自动化测试环境搭建

环境&#xff1a;Windows 一、准备安装包 JDK:jdk1.8.0_191 Jmeter:apache-jmeter-5.0 ANT:apache-ant-1.10.7 Jenkins:Jenkins2.233 二、安装JDK 下载地址&#xff1a;https://www.oracle.com/java/technologies/javase-downloads.html 下载后一直下一步即可 1、配置…

模型服务文档自动生成,要素追溯关联、结构规范易读|ModelWhale 版本更新

整装待发的初夏&#xff0c;ModelWhale 持续聚焦 AI for Science&#xff0c;针对大模型等前沿带来了新一轮的版本更新&#xff0c;期待为你提供更好的使用体验。 本次更新中&#xff0c;ModelWhale 主要进行了以下功能迭代&#xff1a; • 新增 模型服务文档自动生成&#xf…

美团4.27---实习--【第三档】

1.什么时候重写equals和hashCode方法&#xff1f; /*因为Object中默认的equals方法&#xff0c;内部还是使用来比较对象在内存中的地址&#xff0c;所以结果位false*//*如果重写了equals方法&#xff0c;那么如果两个对象的属性值相同&#xff0c;那么程序会在第三步判断中返回…

Day_46快速排序

目录 一. 关于快速排序思路的产生 二. 快速排序的实现 1. 快速排序的实现 2. 快速排序的效率分析 三. 快速排序的代码实现 1. 快速排序 2. 快速排序核心代码&#xff1a; 四. 代码展示 五. 数据测试 六. 总结 一. 关于快速排序思路的产生 从现在开始&#xff0c;让我们假设…