首页 > 其他分享 >完整记录 ROS2 MoveIt! 项目编写过程

完整记录 ROS2 MoveIt! 项目编写过程

时间:2023-07-30 20:44:52浏览次数:31  
标签:description -- ur project ur5 MoveIt 编写 ROS2 moveit

目的是编写一个简单的项目,根据一个特定的机器人模型生成 moveit 配置文件,并根据配置文件模拟控制机器人,以学习为目的。这里使用的环境为 moveit2 humble。

创建一个名叫 ur5_project 的文件夹作为工作区,后续工作都在其中进行。

创建软件包 ur_description

没有找到现成能用的 UR5 Description 软件包,比较有名的 ros-industrial/universal_robot 为 ROS1 版本,不能直接使用,但是可以借用核心文件自己生成。

git clone https://github.com/ros-industrial/universal_robot.git

克隆仓库到本地,其中有个 ur_description 的文件夹即包含了各种模型。

创建一个新的 package,由于只是用来存放 urdf 等文件,没有代码,因此不需要添加依赖项,也不需要添加节点。

cd ur5_project/src
source /ros_entrypoint.sh
ros2 pkg create --build-type ament_cmake ur_description

注意

  • 如果反悔了想要修改包名,必须同时在 CMakeLists.txtpackage.xml 中修改,不可以只修改文件夹名称。

  • 另外,源软件包的名字为 ur_description,这里为了省事自己的软件包名也设为 ur_description,xacro 文件中有很多 $(find ur_description),如果软件包名不一致,需要进行调整。

    `<xacro:include filename="$(find ur_description)/urdf/inc/ur3e_macro.xacro"/>`
    

CMakeLists.txt 添加下面代码

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

编译及验证

$ cd ur5_project
$ colcon build --packages-select ur_description
Starting >>> ur_description
Finished <<< ur_description [1.45s]                  

Summary: 1 package finished [1.59s]

可以到 install 下进行检查,如果没问题的话,会看到 ur_description 包及其中的各项文件。
image

创建软件包 ur5_robot_moveit_config

可参考 Integration with a New Robot — MoveIt Documentation

首先确认需要的工具都已经安装好:

$ ros2 pkg list | grep moveit_setup_assistant
moveit_setup_assistant # 说明已安装
# 如果没有安装,执行命令安装需要的版本
$ sudo apt install  ros-humble-moveit ros-humble-moveit-setup-assistant -y
$ cd ur5_project
$ source ./install/setup.bash  # 这里保证前面生成的 description 包可以被找到
$ ros2 run moveit_setup_assistant moveit_setup_assistant

image
这里选择左侧按钮创建新的配置包,选择 ur_description/urdf/ur5.xacro 作为 urdf 路径,最后点击加载。
image

接下来是具体的设定,不详细解释,大概记录一下设定内容[1]

  • Self-Collisions -- Generate Collison Matrix
  • Virtual Joints -- Add Virtual Joint
    image
  • Planning Groups -- Add Group
    这里我选择用 Chain 的方式设定,直接从最开头到最末尾把所有的都选中
    image
  • ros2_controll URDF Modifications -- Add interfaces
  • ROS 2 Controllers -- Auto Add
  • MoveIt Controllers -- Auto Add
  • Author Information
  • 最后 Configuration Files 部分,路径设为 ur5_project/src/ur5_robot_moveit_config,Generate Package
    image

注:

  • 最佳的包名为 robot_name + "_moveit_config",在查看 xacro 文件后确认 robot_name 为 ur5_robot
  • 这里只是一个简单的实现,有些设置略过了。

image

编译及验证

$ cd ur5_project
$ colcon build --packages-select ur5_robot_moveit_config
Starting >>> ur5_robot_moveit_config
Finished <<< ur5_robot_moveit_config [1.20s]

Summary: 1 package finished [1.34s]
$ source ./install/setup.bash
$ ros2 pkg list | grep ur5_robot
ur5_robot_moveit_config  # 确认可以找到
$ ros2 launch ur5_robot_moveit_config demo.launch.py

运行默认生成的示例 launch file[2], 打开 Rviz 窗口验证。
image

创建自己的功能包 movemove

这里复现官方教程中的 Visualizing In RViz,但是用前面生成的 ur5_robot 模型。

$ cd ur5_project/src
$ ros2 pkg create \
	--build-type ament_cmake \
	--dependencies moveit_ros_planning_interface rclcpp moveit_visual_tools \
	--node-name move 
	movemove

包创建完成后添加依赖项:

  • package.xml: <depend>moveit_visual_tools</depend>
  • CMakeLists.txt:
    • find_package(moveit_visual_tools REQUIRED)
    • ament_target_dependencies 添加 moveit_visual_tools

src/move.cpp 中填充代码,调用 moveit interface 操作 ur5 模型,这里不详细介绍,可以直接复制官方教程中提供的代码[3],不过需要注意代码中的节点名以及机器人 planning group, link 相关的名称需要改掉。
添加 launch/run_launch.py,用于启动所有涉及到的节点。
添加 config/moveit.rviz,用于预设 Rviz,没有这个也没关系,可以先随便放一个,最后运行成功后按照需要调整,最后覆盖即可。

别忘了在 CMakeLists.txt 中添加:

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

编译及验证

$ cd ur5_project
$ colcon build
Starting >>> ur_description
Starting >>> movemove
Finished <<< ur_description [0.32s]                                                      
Starting >>> ur5_robot_moveit_config
Finished <<< ur5_robot_moveit_config [0.28s]                 
[Processing: movemove]                             
Finished <<< movemove [36.2s]                       

Summary: 3 packages finished [36.4s]

新开一个终端,运行 launch file, 启动所有必要的节点:

$ cd ur5_project/
$ source ./install/setup.bash
$ ros2 launch movemove run_launch.py


打开了 Rviz 窗口,显示 ur5 模型,这里主要是确认 Displays 中有 Marker Array, Planning Scene, Trajectory 插件,以及 RvizVisualToolsGUI 打开。

另外打开一个终端,运行 move 节点(其实这个也可以一块写到 launch file 中)

$ cd ur5_project/
$ source ./install/setup.bash 
$ ros2 run movemove move


完结撒花

标签:description,--,ur,project,ur5,MoveIt,编写,ROS2,moveit
From: https://www.cnblogs.com/zkmjolnir/p/17591755.html

相关文章

  • 编写设备驱动之i2c_driver -9
    参考资料:Linux内核文档:Documentation\i2c\instantiating-devices.rstDocumentation\i2c\writing-clients.rstLinux内核驱动程序示例:drivers/eeprom/at24.c本节代码:GIT仓库中框架:IMX6ULL\source\04_I2C\02_i2c_driver_exampleSTM32MP157\source\A......
  • 3-2 编写一个函数 escape(s, t),将字符串 t 复制到字符串 s 中,并在复制 过程中将换行
    ArchlinuxGCC13.1.1 202304292023-07-3012:57:46星期日 点击查看代码#include<stdio.h>voidescape(chars[],chart[]){inti,j;i=j=0;while(t[i]!='\0'){switch(t[i]){case�......
  • 使用python基于boto3和tkintrer模块-编写一个AWS-EC2的管理器界面
    当我们管理自己AWS账号下的EC2资源时,一般都是登录到Console界面进行管理笔者自己的AWS经常是用于做一些实验时,才会去创建EC2,部署一些环境等,为了不用登录Console操作于是使用python,tkinter模块写了一个GUI的管理工具,先看一下整体界面如下:这个小工具,有创建EC2,查询EC2,删除指......
  • Adobe InCopy 2023 v18.3 (macOS, Windows) - 编写和副本编辑软件
    AdobeInCopy2023v18.3(macOS,Windows)-编写和副本编辑软件Acrobat、AfterEffects、Animate、Audition、Bridge、CharacterAnimator、Dimension、Dreamweaver、Illustrator、InCopy、InDesign、LightroomClassic、MediaEncoder、Photoshop、PremierePro、AdobeXD......
  • 使用Delphi编写DLL劫持内存补丁
    在有些破解程序时,不能暴力修改程序,修改后,程序就不能正常运行,因为很多程序启动时有自我的校验,但是当程序加载到内存后,在内存中修改相应的地方就可以达到破解的效果。那么怎样在不破坏程序的前提下,达到修改程序呢?当一个可执行文件运行时,Windows加载器将可执行模块映射到进程的地址......
  • Android JNI 编写方法
    JavaNativeInterface(JNI)标准是java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI是本地编程接口,它使得在Java虚拟机(VM)内部运行的Java代码能够与用其它编程语言(如C、C++和汇编语言)编写的应用程序和库进行交互操作。1.Java方式实现JNI,函数路径匹配......
  • python教程 入门学习笔记 第2天 第一个python程序 代码规范 用默认的IDLE (Python GUI
    四、第一个python程序1、用默认的IDLE(PythonGUI)编辑器编写2、在新建文件中写代码,在初始窗口中编译运行3、写完后保存为以.py扩展名的文件4、按F5键执行,在初始窗口观看运行结果5、代码规范:1)先保存再执行2)一句代码单独占一行3)语法中的符号,必须使用英文4)代码前面不能有......
  • 编写Linux内核模块
    Linux系统为应用程序提供了功能强大且容易扩展的API,但在某些情况下,与硬件交互或进行需要访问系统中特权信息的操作时,就需要一个内核模块。Linux内核模块是一段编译后的二进制代码,直接插入Linux内核中。在Ring0上运行。 1.安装开发环境(Ubuntu为例)sudoapt-getinsta......
  • 如何编写难以维护的React代码?耦合组件
    如何编写难以维护的React代码?耦合组件在许多项目中,我们经常会遇到一些难以维护的React代码。其中一种常见的情况是:子组件直接操作父组件方法,从而导致父子组件深度耦合。这样的实现让子组件过于依赖父组件的具体实现细节,使得代码难以维护和扩展。让我们来看一个例子:functionCom......
  • 如何编写难以维护的React代码?——滥用useEffect
    如何编写难以维护的React代码?——滥用useEffect在许多项目中,我们经常会遇到一些难以维护的React代码。其中一种常见的情况是滥用useEffect钩子,特别是在处理衍生状态时。让我们来看一个例子:constComponentA=({list})=>{const[filteredList,setFilteredList]=useSta......