gazebo的模型库里已经有很多模型了,但是如果要制作自己的模型,还是在Solidworks上比较方便,本文将介绍怎么将Solidworks的模型导入到gazebo中。

一、安装URDF插件

进入官网下载,正常安装,在Solidworks的工具->Tools->Export as URDF可以找到。

二、准备工作

首先在Solidworks画好装配体,给需要单独处理的配件设置坐标系(装配体->参考几何体,先确定原点,再确定xyz轴)。比如说这里我想给圆环蓝色,给挡板黄色,就需要单独设置支架、挡板和圆环的坐标系。

三、导出URDF文件

首先确定base_link,这里选择支架,设置base_link的坐标系,设置child link的个数,这里是两个(圆环和挡板),右键base_link可以Add Child Link

设置child link、Joint的名称以及坐标系,设置节点的类型(我这里是fixed,因为不需要转动),确认无误后,点击Preview and Export,进入导出配置界面。

这里主要看坐标系(有时候系统会改掉),没有问题的话点击Next,点击Export URDF and Meshes,注意文件名不要有中文,把.SLDASM也去掉。

四、进入Ubuntu查看效果

首先把生成的源码放在工作空间目录(catkin_ws/src)下面,编译工作空间,接着输入命令

roslaunch circle_test display.launch

打开rviz,修改极坐标,增加机器人模型显示插件,就可以查看模型了,此时模型的颜色都是一样的,Solidworks所设置的颜色并不会被保存下来。

要是想修改模型颜色,可以进入urdf文件夹打开urdf文件,修改配件对应的rgba(其中a代表不透明度)蓝色可以设置成0 0 1 1,黄色可以设置成1 1 0 1。

五、转换SDF格式

gazebo只能识别SDF格式,在urdf文件终端下输入

gz sdf -p circle_test.urdf > circle_test.sdf

可以发现sdf文件生成了

在PX4-Autopilot/Tools/sitl_gazebo/models/目录创建一个新的文件夹,将上一步生成的sdf文件,以及urdf功能包中的meshes文件夹复制进去,再创建一个model.config的文件,如图:

model.config里面定义了需要加载的sdf文件名,以及可注明作者信息等,代码如下:

<?xml version="1.0" ?>
<model><name>circle_test</name><version>1.0</version><sdf version="1.6">circle_test.sdf</sdf><author><name>kang</name><email>kang@163.com</email></author><description></description>
</model>

打开gazebo,可以在Insert的本地目录找到刚才搭建的模型。

sdf文件一开始也不包括颜色信息,需要自行添加,这里设置支架为黑色

 <visual name='base_link_visual'><pose frame=''>0 0 0 0 -0 0</pose><geometry><mesh><scale>1 1 1</scale><uri>model://circle_test/meshes/base_link.STL</uri></mesh></geometry><material><script><uri>__default__</uri><name>Gazebo/Black</name></script></material> </visual>

最后gazebo的显示效果如图所示

六、把模型放到world中

将sdf的内容复制到world文件下,修改model name,通过下面的代码设置模型在world中的位置和方向

      <model name='circle_test_1'><pose frame=''>-0.4 6.5 0 0 -0 -1.57</pose> <scale>1 1 1</scale><link name='link'><pose frame=''>-0.4 6.5 0 0 -0 -1.57</pose><velocity>0 0 0 0 -0 0</velocity><acceleration>0 0 0 0 -0 0</acceleration><wrench>0 0 0 0 -0 0</wrench></link></model>

在放置模型的过程中,我想把模型给悬浮在空中,通过在每个model末尾添加<static>1</static>实现。

<model name='circle_100_7'><link name='base_link'><pose frame=''>0 0 0 0 -0 0</pose><inertial><pose frame=''>0.009851 -0 0.622144 0 -0 0</pose><mass>6.3074</mass><inertia><ixx>1.75297</ixx><ixy>-1.10699e-18</ixy><ixz>0.00673159</ixz><iyy>1.44277</iyy><iyz>1.55322e-16</iyz><izz>0.317581</izz></inertia></inertial><collision name='base_link_collision'><pose frame=''>0 0 0 0 -0 0</pose><geometry><mesh><scale>1 1 1</scale><uri>model://circle_100/meshes/base_link.STL</uri></mesh></geometry></collision><collision name='base_link_fixed_joint_lump__Circle_collision_1'><pose frame=''>0 0 1.07 0 -0 0</pose><geometry><mesh><scale>1 1 1</scale><uri>model://circle_100/meshes/Circle.STL</uri></mesh></geometry></collision><collision name='base_link_fixed_joint_lump__rect_collision_2'><pose frame=''>0 0 0.35 0 -0 0</pose><geometry><mesh><scale>1 1 1</scale><uri>model://circle_100/meshes/rect.STL</uri></mesh></geometry></collision><visual name='base_link_visual'><pose frame=''>0 0 0 0 -0 0</pose><geometry><mesh><scale>1 1 1</scale><uri>model://circle_100/meshes/base_link.STL</uri></mesh></geometry><material><script><uri>__default__</uri><name>Gazebo/Black</name></script></material> </visual><visual name='base_link_fixed_joint_lump__Circle_visual_1'><pose frame=''>0 0 1.07 0 -0 0</pose><geometry><mesh><scale>1 1 1</scale><uri>model://circle_100/meshes/Circle.STL</uri></mesh></geometry><material><script><uri>__default__</uri><name>Gazebo/Blue</name></script></material> </visual><visual name='base_link_fixed_joint_lump__rect_visual_2'><pose frame=''>0 0 0.35 0 -0 0</pose><geometry><mesh><scale>1 1 1</scale><uri>model://circle_100/meshes/rect.STL</uri></mesh></geometry><material><script><uri>__default__</uri><name>Gazebo/Yellow</name></script></material> </visual></link><static>1</static></model>

七、使模型位置可变

当需要障碍物的位置随机或者一直在移动,就需要用到这个功能。

1.编写生成插件的源文件set_position.cc

先新建一个目录set_position,里面存放源文件set_position.cc。

#include <functional>
#include <gazebo/gazebo.hh>
#include <gazebo/physics/physics.hh>
#include <gazebo/common/common.hh>
#include <ignition/math/Vector3.hh>
#include <cmath>float xx,yy,zz;namespace gazebo
{class Set_position1 : public ModelPlugin{public: void Load(physics::ModelPtr _parent, sdf::ElementPtr /*_sdf*/){// Store the pointer to the modelthis->model = _parent;//使用PoseAnimation类实例化一个对象,然后通过三个参数可设置运动模型名称,运动持续时间以及是否循环执行gazebo::common::PoseAnimationPtr anim(new gazebo::common::PoseAnimation("test", 1.0, false)); //声明一个控制模型位姿的对象gazebo::common::PoseKeyFrame *key;xx = -0.5 + (rand()%100)/100.0;yy = -0.5 + (rand()%100)/100.0;zz = -0.5 + (rand()%100)/100.0;//设置模型到达某位姿的时刻key = anim->CreateKeyFrame(0);key->Translation(ignition::math::Vector3d(6.5, 0.4, 1.5));key->Rotation(ignition::math::Quaterniond(0, 0, M_PI));key = anim->CreateKeyFrame(1);key->Translation(ignition::math::Vector3d(6.5+xx, 0.4+yy, 1.5+zz));key->Rotation(ignition::math::Quaterniond(0, 0, M_PI));_parent->SetAnimation(anim);}// Pointer to the modelprivate: physics::ModelPtr model;// Pointer to the update event connectionprivate: event::ConnectionPtr updateConnection;};// Register this plugin with the simulatorGZ_REGISTER_MODEL_PLUGIN(Set_position1)
}

这个代码的功能是在以1为边长,(6.5,0.4,1.5)为中心的正方体内随机生成一个点作为模型的中心,模型在一秒钟的时间从(6.5,0.4,1.5)移动到这个随机位置。

2.编写CMakeLists.txt文档

在目录set_position下新建一个CMakeLists.txt文档,内容如下。

cmake_minimum_required(VERSION 2.8 FATAL_ERROR)find_package(Boost REQUIRED COMPONENTS system)
include_directories(${Boost_INCLUDE_DIRS})
link_directories(${Boost_LIBRARY_DIRS})find_package(Protobuf REQUIRED)
find_package(gazebo REQUIRED)set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GAZEBO_CXX_FLAGS}")include_directories(${GAZEBO_INCLUDE_DIRS})
link_directories(${GAZEBO_LIBRARY_DIRS})# 使用set_position_1.cc源文件生成插件
add_library(set_position SHARED set_position.cc)# 在生成插件过程中需要使用到的gazebo库文件
target_link_libraries(set_position_1 ${GAZEBO_LIBRARIES} ${Boost_LIBRARIES})

3.编译

在set_position目录下,新建一个build目录然后进入buid目录右键打开终端,输入【cmake ..】命令,然后再输入【make】命令就会在build目录生成一个libset_position.so库文件。

4.使用插件

在world文件中的<static>1</static>前面添加下面的代码:

<plugin name="set" filename="libset_position.so"/>

同时将生成的set_position_box.so文件放在gazebo默认的库目录(/usr/lib/x86_64-linux-gnu/gazebo-9/plugins),由于权限问题,我们在build文件中使用sudo命令复制:

sudo cp ./libset_position.so /usr/lib/x86_64-linux-gnu/gazebo-9/plugins/libset_position.so

这个时候运行world打开gazebo,就可以看到模型的运动了。

Solidworks联合gazebo搭建仿真环境相关推荐

  1. 【环境配置】gazebo搭建仿真机器人研究动态障碍物算法

    0前言 最近由于实验过程中遇到一些问题,打算直接仿真了,利用一个月时间把整体的仿真环境搭建出来,这里对最近的学习成果,进行梳理. 1Gazebo 学习准备: urdf基本语法 xacro基本语法 一个 ...

  2. ROS中阶笔记(四):机器人仿真—Gazebo物理仿真环境搭建(重点)

    ROS中阶笔记(四):机器人仿真-Gazebo物理仿真环境搭建(重点) 文章目录 1 ros_control 1.1 ros_control安装 2 Gazebo仿真步骤(重点) 2.1 配置物理仿真 ...

  3. ROS学习记录(二)阿克曼转向车运动学模型及在gazebo中搭建仿真环境

    前言:该篇是ROS学习记录的第二篇,如果还没关注过之前文章的读者,如有需要可以通过下方传送门去看之前的文章: ROS学习记录(一) Plugin插件 这两天关注了古月老师的公众号,看到了其中一篇课程推 ...

  4. VIVADO与VCS联合搭建仿真环境

    利用tcl脚本将文件添加到vivado中,解决掉所有的warning,保证综合和仿真目录下没有warning. 1.1 文件属性设置 (1)设置头文件 由于工程中可能大量使用头文件,会产生找不到参数的 ...

  5. 并联四足机器人项目开源教程(三)--- 使用webots搭建仿真环境

    这个是本人在大三期间做的项目 ---- 基于MIT的Cheetah方案设计的十二自由度并联四足机器人,这个项目获得过两个国家级奖项和一个省级奖项.接下来我会将这个机器人的控制部分所有代码进行开源,并配 ...

  6. 基于ROS搭建仿真环境——B站苏的一休抓取环境复现

    大佬链接:https://www.bilibili.com/video/BV19f4y1h73E?vd_source=6f2fc443cc3323efe0300c7cb662e8a8 搭建 此功能包在 ...

  7. gazebo打开仿真环境报错gzserver: /build/ogre-1.9-mqY1wq/ogre-1.9-1.9.0+dfsg1/OgreMain/src/OgreRenderSystem

    Q1:gazebo仿真报错 gzserver: /build/ogre-1.9-mqY1wq/ogre-1.9-1.9.0+dfsg1/OgreMain/src/OgreRenderSystem.cp ...

  8. zedboard:使用ISE和modelsim搭建仿真环境

    详细步骤: 产生ISE仿真库文件 开始->所有程序->xilinx design tools->simulation library compilation wizard.路径可能不 ...

  9. ROSGazebo自定义多旋翼无人机仿真——环境搭建和模型建立

    ​ 平台:ubuntu 20.04.ROS 概述 在ubuntu平台搭建多旋翼无人机可视化仿真环境,并使用自定义的六旋翼无人机模型,进行SITL仿真. 无人机:自定义六旋翼 固件:APM/PX4 搭建 ...

最新文章

  1. 信息系统项目管理师 章节_信息系统项目管理师章节重点(5)项目整体管理
  2. 直播回顾|结构光编码与三维重建技术
  3. pandas 将自己的文件写入csv
  4. linux驱动由浅入深系列链接
  5. java钩子函数(hook)以spring源码为例
  6. linux db2 强制停止,DB2强制退出ROLLBACK状态
  7. 如何查看CRM WebUI,C4C和Hybris里的页面技术信息
  8. Educational Codeforces Round 77 (Rated for Div. 2) C. Infinite Fence 数论
  9. mysql如何实现树状结构_实现树状结构的两种方法
  10. Java 虚拟机 最易理解的 全面解析
  11. Tesseract-OCR的简单使用与训练
  12. python3一爬虫库url_python3爬虫之Urllib库(一)
  13. html页面设置document类型,解析网页头部代码:Html Document
  14. 固态硬盘(SSD)——NAND闪存芯片(颗粒)QLC、SLC、MLC、TLC
  15. 如何0成本搭建外卖CPS返利小程序
  16. 德保罗大学计算机专业,2020年德保罗大学排名TFE Times美国最佳计算机科学硕士专业排名第75...
  17. nginx反向代理和正向代理
  18. ABAQUS 求解应力强度因子
  19. TI Zigbee Light Link 参考设计
  20. python能写app吗_Python可以开发APP吗?

热门文章

  1. 信息系统分析相关知识梳理
  2. 测试网站漏洞软件,如何检测网站漏洞,web漏洞扫描工具盘点
  3. java对接上传AWS的S3服务
  4. 一篇读懂什么是白盒测试
  5. 【VMware vSAN 7.0】6.4 延伸集群网络设计—我们有软硬件解决方案
  6. springboot老年康复中心 计算机毕设源码27406
  7. 第13节 三个败家子(13)——孝子?逆子?
  8. Rutracker.RU
  9. 计算机毕业设计springboot+vue+elementUI 广场舞团高校舞蹈社团管理系统
  10. vue 移动端适配方案