Solidworks机器人导出URDF文件,导入Webots并控制

这篇具有很好参考价值的文章主要介绍了Solidworks机器人导出URDF文件,导入Webots并控制。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

0. 目标

目标:把Solidworks的机器人模型导入Webots,保存运动副关系,导入后直接控制。所有操作都在win10环境进行。
思路:使用Solidworks - SW2URDF插件导出URDF文件,然后使用python - urdf2webots模组,生成proto文件导入Webots。
程序版本:Solidworks 2018 SP5.0(或更新), Webots R2023a,python模组urdf2webots V2.0.3,版本不兼容会导致错误。
提示:有坑,需仔细阅读正文。

1. SW导出URDF

Solidworks必须是2018 SP5.0或更新的版本,不然和插件不兼容。

下载并安装Solidworks插件SW2URDF:ROS.org网站链接,Github链接。

我是从Github下载的,注意里面根据Solidworks版本分了好几个,选择下载。第一个链接里也说明了SW的版本要求。

只下载exe文件就行,双击安装。如果安装的时候SW还开着,需要在安装后重启SW。

找到SW顶部一行的齿轮图标,点下拉菜单里的插件:
solidworks urdf,机器人

在插件窗口里面,滑动到底部,勾选SW2URDF插件:
solidworks urdf,机器人

然后准备机器人装配体模型。我是从机械模型转换,原模型细节很多,需要简化,把内部轴承、电路板等看不到的零件都删掉,螺丝孔和其他不需要的特征也删掉,减小面数。

最后生成一个用来仿真的装配体:
solidworks urdf,机器人
我的模型是很多零件装配而成的四轮小车,但对于仿真软件来说,整个机器人是一个机身和4个轮子,共5个刚体,联接而成的。所以我把每个刚体都另存为了SW零件,再组成整个机器人,条理清晰。没有试过用子装配体组成的模型导出,可能也行吧。

注意,装配体的原点需要定在机器人根部件上,如果偏的太远,可能会影响后面仿真。

怎么调节机器人相对原点的位置:先把根部件取消固定,然后在机器人和三个基准面之间添加配合,以此约束机器人的位置。
solidworks urdf,机器人

打开插件:SW顶部菜单栏>>工具>>File(在菜单最底下)>>Export as URDF:

solidworks urdf,机器人

然后设置机器人的运动副关系,看图:
solidworks urdf,机器人
按照上图说明,弹出URDF导出窗口。

注意这时候插件会在SW里面自动生成运动副的坐标系和轴,之后就不要轻易改动装配体了,不然会导致转轴位置错误。

回到导出窗口,首先是关节属性,保持默认即可,点Next:
solidworks urdf,机器人

部件设置页面,参考下图说明:

solidworks urdf,机器人
按照上图,最后导出的机器人,是每个部件一个颜色。上图右下有个"Texture"应该可以设置贴图然后实现彩色部件,还没研究怎么用。

导出时设置名称,不能以数字开头,整个路径和文件名都不能含中文,比如我的是“PipeRob6DOF”,导出后会生成一个同名文件夹,里面有几个子文件夹,存放URDF文件和各种模型资源:
solidworks urdf,机器人

2. 新建Webots工程

Webots版本采用R2023a,根据引导,新建项目目录和世界(world),
solidworks urdf,机器人
勾选“Add a rectangle arena”,即生一个平台,方便后面测试。
solidworks urdf,机器人

3. URDF转proto

转换工具是python环境下的urdf2webots模组,需要电脑已经安装了python(我的是python 3)。

在Webots项目文件夹里,有个protos文件夹,把前面SW导出的“PipeRob6DOF”文件夹放进去。

进入PipeRob6DOF/urdf子文件夹,可以看到里面有一个PipeRob6DOF.urdf。按Shift+右键,在此处打开PowerShell窗口(等同于cmd窗口):
solidworks urdf,机器人
首次使用,需安装python的urdf2webots模组,执行以下命令:
pip install urdf2webots

这样会安装最新版(V2.0.3),本文介绍的是V2新版用法。模组V1版本用法是不一样的,具体可参考另一篇文章或模组官网。

输入以下命令,由urdf文件生成proto文件:
python -m urdf2webots.importer --input=PipeRob6DOF.urdf

由于我们是在urdf文件所在位置打开的命令窗口,所以这里直接把PipeRob6DOF.urdf作为输入参数,不需要冗长的路径。读者需要把上面“PipeRob6DOF”改成自己的机器人名称。

运行成功的话会返回机器人部件数量和关节数量,同时生成一个proto文件。
solidworks urdf,机器人
solidworks urdf,机器人

proto文件是Webots采用的一种文件格式,可以理解为“预设”,实现仿真世界中机器人或模型的复用。
一个proto文件本质上就是文本文档,里面定义了机器人的组成结构,各个部件的属性,以及网格模型链接。

采用python模组生成的proto文件存在一些缺陷,用Notepad++或记事本打开proto文件,然后:
(1)修正STL路径格式错误(必做):按Ctrl+H调用替换窗口,把所有 \ 替换为 / ;
(2)把STL文件改为相对路径(可选),以便在其他电脑上运行。比如原本是:
url "D:/JiangxuDesk/OneDrive/PipeRob/Webots/PipeRobWB23/protos/PipeRob6DOF/meshes/body.STL"
替换为:
url "../meshes/body.STL"
(3)设置部件颜色:搜索baseColor,可以看到SW导出时,所定义的各种材料的颜色定义,是取值0-1的RGB。
修改完成后保存,可以暂时不用关闭。后面重新修改保存后,在Webots里重新载入场景,可以随时调整。

4. proto文件导入Webots

Webots里面点工具栏加号:
solidworks urdf,机器人
Webots会读取项目目录protos文件夹里所有的proto文件,不出意外会显示前面导出的机器人名称:
solidworks urdf,机器人
机器人就进来了。如果导入错误会在Console提示。
solidworks urdf,机器人
调整地板大小和机器人的位置(避免干涉),保存之后开始仿真(Webots操作我就不介绍了),可以看到机器人重力作用下掉到地板上了:
solidworks urdf,机器人
上图中小车是全白的。根据前文,在proto文件里搜索baseColor的地方设置各个部件颜色,保存后重新载入场景:
solidworks urdf,机器人
solidworks urdf,机器人
可见颜色更新了:
solidworks urdf,机器人

5. 控制机器人

Webots里新建一个C语言的控制器,进行编程:

/*
 * File:          my_controller.c
 * Date:
 * Description:
 * Author:
 * Modifications:
 */

/*
 * You may need to add include files like <webots/distance_sensor.h> or
 * <webots/motor.h>, etc.
 */
#include <webots/robot.h>
#include <webots/motor.h>
/*
 * You may want to add macros here.
 */
#define TIME_STEP 8
//using namespace webots;
/*
 * This is the main program.
 * The arguments of the main function can be specified by the
 * "controllerArgs" field of the Robot node
 */
int main(int argc, char **argv) {
  /* necessary to initialize webots stuff */
  // 实现差速转向效果,需要在WorldInfo里面设置forceDependentSlip > 0.
  wb_robot_init();
  
  WbDeviceTag mot[4];
  char mot_names[4][3]={{"a1"},{"a2"},{"a3"},{"a4"}};
  for(int i=0;i<4;i++){
    mot[i] = wb_robot_get_device(mot_names[i]);
    wb_motor_set_position(mot[i], INFINITY);

//    wb_motor_set_velocity(mot[i], 4);
  }
  float v = 4;
  wb_motor_set_velocity(mot[0], -v);
  wb_motor_set_velocity(mot[1], -v);
  wb_motor_set_velocity(mot[2], v);
  wb_motor_set_velocity(mot[3], v);

  /*
   * You should declare here WbDeviceTag variables for storing
   * robot devices like this:
   *  WbDeviceTag my_sensor = wb_robot_get_device("my_sensor");
   *  WbDeviceTag my_actuator = wb_robot_get_device("my_actuator");
   */

  /* main loop
   * Perform simulation steps of TIME_STEP milliseconds
   * and leave the loop when the simulation is over
   */
  int t = 0;
  while (wb_robot_step(TIME_STEP) != -1) {
    t+=TIME_STEP;
    
    /*
     * Read the sensors :
     * Enter here functions to read sensor data, like:
     *  double val = wb_distance_sensor_get_value(my_sensor);
     */

    /* Process sensor data here */

    /*
     * Enter here functions to send actuator commands, like:
     * wb_motor_set_position(my_actuator, 10.0);
     */
  };

  /* Enter your cleanup code here */

  /* This is necessary to cleanup webots resources */
  wb_robot_cleanup();

  return 0;
}

控制器里面,先获取电机,电机名称就是导出URDF的时候,设置的关节名称。然后把位置设置为无穷大,再设置一个速度,让它一直跑。

编译控制器,把控制器赋给机器人,开始仿真。如果一切正常,机器人会开始运动。如果不稳定,可以把仿真周期调小。

6. 添加传感器

要给机器人添加测距仪、相机等传感器,可参考:Webots中给proto格式机器人添加传感器

参考:
将solidworks装配体模型导入webots并进行控制
利用插件将solidworks模型转化为URDF文件,再转化为proto文件并导入Webots
文章来源地址https://www.toymoban.com/news/detail-725997.html

到了这里,关于Solidworks机器人导出URDF文件,导入Webots并控制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • xacro机器人模型文件转urdf文件怎么编写launch文件启动gazebo仿真和在rviz2内显示模型

    urdf文件很直白,每个零件的/link  /joint都要编写一遍,每个零件数据都要自己算出来结果,很麻烦,但是用起来很简单。xacro写的模型文件可以把好多常量提前定义出来,不同大小的机器人只要只要改一下常量,机器人模型就可以重新生成,代码可以复用,编写起来简单多了

    2024年02月12日
    浏览(42)
  • ROS自学笔记二十九:如何从SolidWorks导出URDF文件

    SolidWorks是一款三维计算机辅助设计(CAD)软件,用于创建三维模型。要将SolidWorks模型导出为URDF(Unified Robot Description Format)文件,您可以按照以下步骤进行操作: 1. 安装SolidWorks URDF插件: 首先,您需要安装SolidWorks URDF插件,以便能够导出URDF文件。这个插件通常由SolidWorks社

    2024年02月05日
    浏览(57)
  • 【机器人模拟-01】使用URDF在中创建模拟移动机器人

            在本教程中,我将向您展示如何使用 通用机器人描述格式 (URDF)(机器人 建模的标准 ROS 格式)创建模拟移动机器人。         机器人专家喜欢在构建机器人之前对其进行模拟,以测试不同的算法。您可以想象,使用物理机器人犯错的成本可能很高(例如,

    2024年02月16日
    浏览(61)
  • 统一机器人描述格式——URDF

    URDF(Unified Robot Description Format,统一机器人描述格式)是ROS中一个非常重要的机器人模型描述格式,ROS同时也提供URDF文件的C++解析器,可以解析URDF文件中使用XML格式描述的机器人模型。 在使用URDF文件构建机器人模型之前,有必要先梳理一下URDF文件中常用的XML标签,对URDF有

    2024年02月07日
    浏览(41)
  • URDF - 通用机器人描述格式 - XML 规范

      英文 中文 link 刚体 joint 关节 frame 坐标系 identity element 单位元(加法为 0)     机器人描述文件的根元素必须是 robot ,所有其他元素都必须封装在其中。   name 主文件必须有 name 属性。在包含文件中,name 属性是可选的。如果在附加的包含文件中指定了属性名称,其值必须

    2024年02月03日
    浏览(46)
  • 【ROS】URDF:统一机器人描述格式(XML)

    统一机器人描述格式(URDF)是描述机器人模型的 XML 文件,支持Xacro(XML宏),使用Xacro来引用已经存在的XML块,创建更短且可读的XML文件。 URDF描述文件为XML格式,如下示例,定义机器人的常量。

    2024年02月09日
    浏览(52)
  • ros2 基础学习 15- URDF:机器人建模方法

    ROS是机器人操作系统,当然要给机器人使用啦,不过在使用之前,还得让ROS认识下我们使用的机器人,如何把一个机器人介绍给ROS呢? 为此,ROS专门提供了一种机器人建模方法——URDF(Unified Robot Description Format,统一机器人描述格式),用来描述机器人外观、性能等各方面属

    2024年02月01日
    浏览(48)
  • 【ROS2机器人入门到实战】使用gazebo加载URDF

    当前平台文章汇总地址:ROS2机器人从入门到实战 获取完整教程及配套资料代码,请关注公众号鱼香ROS获取 教程配套机器人开发平台:两驱版| 四驱版 为方便交流,搭建了机器人技术问答社区:地址 fishros.org.cn 在第六章中小鱼曾介绍过,gazebo是独立于ROS/ROS2之外的仿真软件,

    2024年02月05日
    浏览(78)
  • solidworks转urdf插件导出参数详解

    是用solidworks成功导出了一次urdf,记录一下导出时各参数的说明。 你需要做的:先定义好你的 坐标系 和 基准轴 。可以看一下B站这个up主的系列视频的P4。 基于MALTAB/Simulink、Coppeliasim的六轴机械臂仿真 感觉网上关于urdf参数讲得有点让人摸不着头脑,自己导出成功了嘛,所以

    2024年02月09日
    浏览(74)
  • SolidWorks导出URDF到rviz、gazebo

    e43# 安装solidworks软件 官网下载插件 下载exe文件,双击安装,安装完成后打开/重启solidworks 在主菜单栏点开设选项(小齿轮)选择插件 确保SW2URDF插件已经勾选 在主菜单栏选择工具,然后选择File,点击Export as URDF 当出现以下界面则sw_urdf_exporter插件安装成功 sw2urdf插件安装提示

    2024年02月10日
    浏览(53)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包