【学习笔记】ROS2纯小白 您所在的位置:网站首页 solidworks拖动模型 【学习笔记】ROS2纯小白

【学习笔记】ROS2纯小白

2023-03-29 17:03| 来源: 网络整理| 查看: 265

前言

把机器人导入运动规划比我想象中要复杂好多啊,中间多多少少走了很多弯路,光是sw2urdf就来来回回折腾了好几次。因为官方文档并没有按照操作顺序排,中间又混入了一些ROS1的东西,确实造成了一些理解上的困难。其实如果正常的话得到srdf之后就可以直接跑demo了,但是我却还以为要在RViz中以某种方式操作才能引入机器人模型,来来回回折腾了很长时间,还好最后还是把这个事情做完了(1,4,6关节的方向反了,不知道会不会成为严重的遗留问题),按照毕设极限的时间安排之后就应该开始做运动规划方面的工作了。

btw. 昨天去看了《玲芽之旅》,差强人意,新海诚离日本动画第一的交椅还是相距甚远,他的上限确实还是《秒速五厘米》...

前作原文档:鱼香ROS:以下工作部分成果共享在开源社区:MoveIt2 Setup Assistant

原本这里想要看源文档的,但是原文档里有很多内容是关于ROS1的,于是还是跟着小鱼做了几步。

前期准备

首先安装moveit2和配置助手(这一步是跟着小鱼做的):

sudo apt install ros-humble-moveit ros-humble-moveit-setup-assistant -y

下载机械臂功能包:

git clone https://github.com/fishros/elite_robot_ros2

之后build并source配置助手:

cd ~/elite_robot_ros2 colcon build source install/setup.bashStep1: Start

开启MoveIt2 Setup Assisstant:(一步是跟着小鱼做的)

ros2 run moveit_setup_assistant moveit_setup_assistant

打开窗口如下,窗口中有两个选项:Create New MoveIt Configuration Package 和 Edit Existing MoveIt Configuration Package

点击Create New MoveIt Configuration Package,进入如下界面:

点击 Browse 后选择ec66_description.urdf文件,这个文件在elite_robot_ros2/src/elite_description/urdf的目录下获得,选择并点击Open:

点击Load Files,导入文件:

Step2: Generate Self-Collision Matrix

默认的一些碰撞对可以被禁用以提高干涉检测效率,缩短检测时间。可以将总是干涉、绝对不会干涉、在其起始位置发生干涉、处于运动链相邻位置的连接件之间的干涉检测禁用掉。采样密度sampling density决定了对机器人位置进行多少次随机采样以检测自身干涉。默认的采样密度是10000次,如果采样密度高,则会花费更多算力;如果采样密度低,则会有更大可能将原本不该禁用的检测对禁用。干涉检测是并行完成的,这会节省处理时间。

点击左侧Self-Collisions 选栏,点击 Generate Collision Matrix 的按钮,几秒种后设置助手会呈现生成的Self-Collision Matrix。

其中会显示被禁用的干涉检测对和其被禁用的原因,点击选择,右图会呈现这些干涉检测对的位置:

Step3: Add Virtual Joints

虚拟关节 Virtual Joints ,最初用于将机器人连接到世界坐标系中,其代表了机器人基准坐标系在空间中的运动。Virtual Joints 可以是和世界系相对固定的,也可以是相对运动的(比如连接到小车上)。在官方文档中,Panda可以设置一个panda_link0来连接到世界坐标系,而鱼香ROS则是没有设置Virtual Joint。这里按官方文档操作。

点击左侧 Virtual Joints 选栏,点击 Add Virtual Joint 按钮;

将这一虚拟关节设置为virtual_joint;

将 Child Link 设置为base_link(Panda应该设置成panda_link0)

将 Parent Frame 设置为 world

将 Joint Type 设置为 fixed

点击 Save保存 ,可以看到关于 Virtual Joint 的如下信息:

Step4: Add Planning Groups

规划组 Planning Group 用于在描述机器人的不同组件,用于描述机械臂或者执行器。

点击 Planning Group 选栏;

点击 Add Group

此时窗口如下:

将机械臂elite_robot设为一个 Planning Group

在 Group Name 命名: elite_robo_arm;

在Kinematic Solver选择: kdl_kinamatics_plugin/KDLKinematicsPlugin 作为运动学求解器

Kin. Search Resolution and Kin. Search Timeout:保持默认值不变

点击 Add Joint 按钮。选中左侧所有机械臂关节添加到右侧。这些关节依次显示并以树的结构进行组织——这便于其选定特定序号的关节。

选中 virtual_joint ,按住shift键,再点击joint6,之后再点击 > 按键将左侧关节添加到右侧。

点击 Save 保存以上 Planning Group

> > > 类似地设置elite_robot_hand < <

此时,机器人位姿为其各个轴处于其行程中点处,可以拖动滑块获得一个满意的位姿,点击Save保存。

Step6: Label End Effectors

定义末端执行器之后可以整花活

点击 End Effectors 选栏;

点击 Add End Effector ;

在 End Effector Name 一栏中 填入 hand ;

在 Ned Effector Group 中选取 elite_robot_hand ;

将 Parent Link 设为 link6;

不填写 Parent Group;

点击Save 保存

Step 7: Add Passive Joints

被动关节是机器人中无法被直接控制其运动的关节,如支撑脚轮等。这将使规划器了解到这些关节无法被直接控制。本例中不涉及被动关节,故跳过。

Step 8: 3D Perception

3D Perception 是用于生成 YAML配置文件 sensor_3d.yaml 的参数的。

如 点云 Point Cloud 参数:

本例中不需要,直接选None

Step 9: Gazebo Simulation

可以生成与之兼容的urdf文件来使用Gazebo来仿真机器人(这一段因为没用上 全是直接搬的官方文档)

生成gazebo的空白世界:

roslaunch gazebo_ros empty_world.launch paused:=true use_sim_time:=false gui:=true throttled:=false recording:=false debug:=true

在世界中转入这一机器人:

rosrun gazebo_ros spawn_model -file -urdf -x 0 -y 0 -z 1 -model pandaStep 10: ROS Control

ROS control 是包括了控制器界面、控制器管理器、传输(?)和硬件界面,可见:

ROS控制器可用于生成仿真控制器以控驱动机器人各个关节的运动,这之后也为我们在ROS中提供了MoveIt的接口

点击 ROS 2 Controller 选栏;

点击 Add Controller ;

将 Controller Name 设置为 arm_position_controller;

将 Controller Type 设置为 position_controllers/JointPositionController ;

之后添加控制器关节,这一步可分别添加每个关节,也可一次添加全部关节,点击 Add Planning Group Joints;

选定elite_robot_arm点击>置于右侧;

点击 Save 保存

Step 11: Add Author Information

填写个人信息

Step 12: Generate Configuration Files

生成所有需要的配置文件——最后终于到这儿了呵呵呵

中间选栏中的内容是生成的文件或文件夹,可以选点查看其内容:

点击左侧 Configuration Files 选栏

选定保存路径新建文件夹并设定其为功能包名称,点击Open,所有生成文件将会保存在这里;

点击 Generate Package 按键,Setup Assistant将会在这一路径下生成。

cd ~/desktop/elite_robot_config/ tree . ├── CMakeLists.txt ├── config │ ├── ec66.ros2_control.xacro │ ├── ec66.srdf │ ├── ec66.urdf.xacro │ ├── initial_positions.yaml │ ├── joint_limits.yaml │ ├── kinematics.yaml │ ├── moveit.rviz │ ├── pilz_cartesian_limits.yaml │ └── ros2_controllers.yaml ├── launch │ ├── demo.launch.py │ ├── move_group.launch.py │ ├── moveit_rviz.launch.py │ ├── rsp.launch.py │ ├── setup_assistant.launch.py │ ├── spawn_controllers.launch.py │ ├── static_virtual_joint_tfs.launch.py │ └── warehouse_db.launch.py └── package.xml 2 directories, 19 files

可见elite_robot_config中的文件和以上 Setup Assistant 需要生成的文件一一对应。

插入知识点:URDF and SRDF

URDF (Unified Robot Description Format)是MoveIt的基础,是在ROS和ROS2中描述机器人的原始格式。URDF可以通过插件直接从SolidWorks中获得。SRDF (Semantic Robot Description Format)是在URDF的基础上进行的补充。其制定了关节组、默认位姿配置、碰撞检测信息和其他变换。可以使用Setup Assistant来将URDF配置为SRDF。

以下为URDF可用资源:

URDF ROS Wiki Page - The URDF ROS Wiki page is the source of most information about the URDF.URDF Tutorials - Tutorials for working with the URDF.SOLIDWORKS URDF Plugin - A plugin that lets you generate a URDF directly from a SOLIDWORKS model.在SolidWorks里修改模型并以URDF导出

参考博客:

参考视频:

1. 模型拆分

----以下步骤需要在win10系统下完成----

王博给我提供的了实验室环境模型,其中包括了KUKA_kr4机器人的模型。

其中的KUKA_kr4的模型为一整个.SLDPRT文件

这一SLDPRT中涉及到的机器人7个可动部分分别为7个不同的输入在操作时,仅报了某一个输入,删除其他输入,再另存为其他零件便可得到拆分后的机器人。

2. 模型装配

其中因为拆出来的零件全是有圆柱凸台特征的,所以装配时全部选择柱面同轴+底面共面进行装配。装配之后,便可得到各个关节可动的.SLDASM装配体模型。

因为毕设中机器人路径规划具体背景设定是焊接机器人,所以加上Tool焊枪(假):

3. 安装模型导出插件SW2URDF与配置

在下面网址下载SolidWorks模型导出URDF的插件SW2URDF:

需要注意的是,上面的网站说这一插件只能支持SolidWorks2018以下版本,其中SW2018必须升级5号服务包以上。(但后面github的title好像显示支持更高版本了,这里也就不一一实验了)这里因为我笔记本安装的是由 @喵星考拉 提供的SolidWorks2016,这里就不重装SW了。如果有需要请在B站自行寻找SW重装的参考视频。

不编译,直接下载.exe文件(留下了从linux回到windows喜极而泣的眼泪)

这里看起来支持SW2021了,不确定,再看看

下载后微软会认为这一文件有风险,需要确认安全并给予安装权限。

一路无脑确认完成安装。

这个时候再打开SolidWorks,就可以在 工具 > 插件 的选项中看到所需的导出工具

SW2URDF使用教程文档:

完成以下准备工作:

在SW中打开装配体将装配体摆弄成希望导出的姿势点击:工具 > 选项 > 默认模板 > √提示用户使用文件模板点击:工具 > Tools > Export as URDF

此时左侧出现边栏,说明SW2URDF安装运行正常,便可以开始设制模型的基准轴、link和joint了

4. 设制基准轴、连接Link与关节Joint

插入 > 参考几何体 > 基准轴

逐个选中圆柱面即可自动获得其轴线,确定即添加基准轴。

除基准轴之外,也要给机器人的基座增加一个坐标系,其z轴指向希望竖直的方向,否则导入URDF后会生成一个如下躺平的机器人:

点击:工具 > Tools > Export as URDF 打卡URDF输出界面 之后需要创造一个树状的关节结构

之后分别设置关节名、连接零件,最后更改子关节数目,如此将关节构成树状结构

之后就可以对下一关节也进行编辑

重复直至完成全部6个关节的配置

5. 检查设制,输出URDF文件

点击 Preview and Export ,之后就会自动生成坐标系:

其中,因为自动生成的坐标系方向不正确,需要将base_link的参考坐标系手动修改为一个自己建立的z轴向上,xy轴朝向需要方向的坐标系。

并弹出以下关节限制弹窗,根据KUKA提供的机器人用户手册逐一设制如下:

角度换算为弧度制 这里不一一列举了

点击next,此时SolidWorks会自动计算各个link的质量和转动惯量,此处可以设制link的其他性质,但在此不做修改,仅截图为例

在这里我们需要生成带网格文件的URDF文件,于是点击Export URDF and Meashes,然后选择保存路径

此时便可以观察指定路径生成了kuka_kr4_description的文件夹

如此便完成了一个URDF包的配置。

使用SetupAssistant将自制机器人由urdf转为srdf

----以下步骤需要在ubuntu22.04系统下完成----

1. 修改urdf包的格式并整合

需要注意的是,直接从SolidWorks中导出的机器人urdf文件中的 package.xml 和 CMakeLists.txt 都是为ROS1设计的,其依赖项中包含catkin和roslaunch等非ROS2包中的内容,需要对这些依赖项进行修改。

这里直接将鱼香ROS的 package.xml 和 CMakeLists.txt 拿来进行参考,将kuka_kr4_description/package.xml 和 kuka_kr4_description/CMakeLists.txt 修改为如下内容:

package.xml:

kuka_kr4_description 1.0.0

URDF Description package for kuka_kr4_config

This package contains configuration data, 3D models and launch files for kuka_kr4_config robot

StvLi BSD ament_cmake ament_lint_auto ament_lint_common ament_cmake

CMakeLists.txt:

cmake_minimum_required(VERSION 3.8) project(kuka_kr4_description) 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( REQUIRED) if(BUILD_TESTING) find_package(ament_lint_auto REQUIRED) # the following line skips the linter which checks for copyrights # comment the line when a copyright and license is added to all source files set(ament_cmake_copyright_FOUND TRUE) # the following line skips cpplint (only works in a git repo) # comment the line when this package is in a git repo and when # a copyright and license is added to all source files set(ament_cmake_cpplint_FOUND TRUE) ament_lint_auto_find_test_dependencies() endif() install( DIRECTORY config meshes urdf DESTINATION share/${PROJECT_NAME} ) ament_package()

之后,再将这一准备好的 kuka_kr4_description 包放置在~/elite_robot_ros2/src路径下

此时,elite_robot_ros2目录下的内容有:

. └── src ├── elite_description │ ├── CMakeLists.txt │ ├── config │ │ ├── joint_names_ec66_description.yaml │ │ └── urdf.rviz │ ├── meshes │ │ ├── ec612 │ │ │ ├── base_link.STL │ │ │ ├── link1.STL │ │ │ ├── link2.STL │ │ │ ├── link3.STL │ │ │ ├── link4.STL │ │ │ ├── link5.STL │ │ │ └── link6.STL │ │ ├── ec63 │ │ │ ├── base_link.STL │ │ │ ├── link1.STL │ │ │ ├── link2.STL │ │ │ ├── link3.STL │ │ │ ├── link4.STL │ │ │ ├── link5.STL │ │ │ └── link6.STL │ │ └── ec66 │ │ ├── base_link.STL │ │ ├── link1.STL │ │ ├── link2.STL │ │ ├── link3.STL │ │ ├── link4.STL │ │ ├── link5.STL │ │ └── link6.STL │ ├── package.xml │ └── urdf │ ├── ec612_description.urdf │ ├── ec63_description.urdf │ ├── ec66_description.dae │ ├── ec66_description.urdf │ └── gazebo │ ├── ec612_description.urdf │ ├── ec63_description.urdf │ └── ec66_description.urdf ├── elite_moveit2 │ └── elite_ec66_moveit_config │ ├── CMakeLists.txt │ ├── config │ │ ├── ec66.ros2_control.xacro │ │ ├── ec66.srdf │ │ ├── ec66.urdf.xacro │ │ ├── initial_positions.yaml │ │ ├── joint_limits.yaml │ │ ├── kinematics.yaml │ │ ├── moveit_controllers.yaml │ │ ├── moveit.rviz │ │ ├── pilz_cartesian_limits.yaml │ │ └── ros2_controllers.yaml │ ├── launch │ │ ├── demo.launch.py │ │ ├── move_group.launch.py │ │ ├── moveit_rviz.launch.py │ │ ├── rsp.launch.py │ │ ├── setup_assistant.launch.py │ │ ├── spawn_controllers.launch.py │ │ ├── static_virtual_joint_tfs.launch.py │ │ └── warehouse_db.launch.py │ └── package.xml └── kuka_kr4_description ├── CMakeLists.txt ├── config │ └── joint_names_kuka_kr4_description.yaml ├── export.log ├── launch │ ├── display.launch │ └── gazebo.launch ├── meshes │ ├── base_link.STL │ ├── link1.STL │ ├── link2.STL │ ├── link3.STL │ ├── link4.STL │ ├── link5.STL │ └── link6.STL ├── package.xml └── urdf ├── kuka_kr4_description.csv └── kuka_kr4_description.urdf 18 directories, 67 files

其中,elite_description目录下的是鱼香ROS提供的几个示例机器人模型;elite_moveit2目录下 的是包括urdf转srdf的SetupAssistant等即将使用的功能包;主要关注kuka_kr4_description目录下的内容:

kuka_kr4_description/urdf 目录下的即为马上要调用的urdf文件和csv描述表格;

kuka_kr4_description/meshes 目录下的是之后用于各个link的可视化和碰撞检测的stl 3D模型;

其他的不管;

之后,也要在elite_moveit2目录下的package.xml中加入一行:

kuka_kr4_description

此时便完成了urdf包的最后设置,可以着手于生成srdf包了

2. 使用SetupAssistant生成srdf包

如前面MoveIt2 Setup Assistant部分所属,执行以下指令编译并source:

cd ~/elite_robot_ros2 colcon build source install/setup.bash

打开SetupAssistant:

ros2 run moveit_setup_assistant moveit_setup_assistant

选择配置好的KUKA kr4的urdf包,Open并加载:

此时,在SolidWorks中建模的焊接机器人模型终于出现在SetupAssistant的窗口中,之后便可以按照MoveIt2 Setup Assistant 部分中所叙述的,一步步进行配置了。

这里有个不大不小的问题需要注意,随便拖动轴,发现此时模型的joint1, 4, 6 的旋转方向和机器人模型上标注的正方向都是反的,在后面的规划和文件生成时应该注意这一问题并加以纠正或重新生成模型反转z轴方向。

还是将初始位置设为home:

因为末端执行器是个假焊枪(tie ga da)所以不用设置了

(因为此前没有配置MoveIt_Controller,之后又进行了重新配置,配置之后的包名为kuka_kr4_movit2)

如此便完成了KUKA kr4机器人的srdf文件的生成

tree . ├── CMakeLists.txt ├── config │ ├── initial_positions.yaml │ ├── joint_limits.yaml │ ├── kinematics.yaml │ ├── kuka_kr4_description.ros2_control.xacro │ ├── kuka_kr4_description.srdf │ ├── kuka_kr4_description.urdf.xacro │ ├── moveit_controllers.yaml │ ├── moveit.rviz │ ├── pilz_cartesian_limits.yaml │ └── ros2_controllers.yaml ├── launch │ ├── demo.launch.py │ ├── move_group.launch.py │ ├── moveit_rviz.launch.py │ ├── rsp.launch.py │ ├── setup_assistant.launch.py │ ├── spawn_controllers.launch.py │ ├── static_virtual_joint_tfs.launch.py │ └── warehouse_db.launch.py └── package.xml 2 directories, 20 files3. 在RViz中检查配置好的srdf文件

进入功能包目录进行编译并source:

cd ~/Desktop/kuka_kr4_moveit2 colcon build source install/setup.bash

运行demo

ros2 launch kuka_kr4_moveit2 demo.launch.py

看到KUKA kr4已经加载在RViz中,并可以进行运动规划:

说明srdf文件配置成功,此后便可以使用这一机器人进行运动规划。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有