CoppeliaSim学习笔记之仿真环境与小车模型的搭建

😮😮😮 博主正在扫大街,先站坑,扫完大街再更新。。。。

😋😋😋 大街扫完了,在扫厕所,预计2021-01-31前能扫完更新。。。别急。。

😂😂😂 终于在今天 2021-01-31 憋出来了

  不知不觉扫了三四个月的大街了,本来这个很早就想写的,奈何近期一直忙于扫大街,所以这边耽搁了许久,不过没关系接下来要从头到尾的将自己遇到的问题以及解决办法一一写出。声明本人并非专业学习仿真的,也是扫大街需要这块东西实现大街的干干净净,像逆运动学啥的 我是没什么研究的,仿真中的东西很多都是自己摸索、网上的博客、以及官方论坛找到的,加工成自己的东西。同时像机械臂一类的牛X的东西对个人而言也是没有需求 所以没接触的,所以我主要接触的仅仅是CoppeliaSim的轮式小车,现在是想先将简单点的双轮差速小车的仿真搭建起来,至于前轮转向ackerman模型的话,CoppeliaSim提供了 simple Ackermann steering.ttm,自己推导下控制模型就可以用键盘控制走起来,模型推导可参考我的转载链接。好了 废话不多说,直接上教程。

1. 环境搭建

  关于仿真环境的搭建其实比较简单,CoppeliaSim软件给用户提供了很多模型,例如:墙、桌椅、沙发、盆栽等基本模型,足够我们搭建基本的场景使用了,而且操作起来很友好,直接将其从模型浏览器中拖到场景中的位置就可以。

  关于软件界面介绍、工具栏上工具的功能可以直接看官方手册或者我的翻译手册,在这里不再具体介绍,后边用到会提起。

在这里插入图片描述

图1.1 用户界面

在这里插入图片描述

图1.2 工具描述

  ./coppeliaSim.sh软件默认打开如图1.3,默认空场景只有5×5m的可变大小的地板。我想玩的稍微嗨一些,搞了个10×15m的地板(直接拖动X/Y-size滚动条即可),如图1.4,想更嗨点的可以改个地板材质,软件支持木质、混凝土的、金属的等等,具体在模型浏览器的 infrastructure/floors中添加。

在这里插入图片描述

图1.3 启动界面

在这里插入图片描述

图1.4

  可以发现图1.3与图1.4相机视角明显不同,针对场景中的视角一种方法可使用鼠标滚轮前后滚动,实现场景的放大缩小;鼠标滚轮的长按拖动实现物体的其他视角变换;鼠标左键移动实现视角的水平移动。或者使用相机导航工具进行操作。具体相机的特征设置可参考CoppeliaSim用户手册中文翻译版(一)的4.1.10 摄像机。

在这里插入图片描述

图1.5 相机导航工具

  接着继续在10×15的地板上搭建场景,四周使用240cm高的墙壁、窗户、门封闭成家庭场景,模型在infrastructure组中。拖动240cm高的墙wall selection 200cm.ttm到场景中,因为我需要一个166×240cm的墙,所以设置墙的长度Y 1.66m。注意: 设置大小时候的Keep proportions取消勾选,否则会按照此对象原来的比例关系自动修改掉x、z值。修改 240cmHighWall200cm_visiable 之后,同样步骤一定要修改 240cmHighWall200cm 的大小,只是改变了显示的大小,实体墙的大小是没变的,机器人移动是能直接穿过非实体墙部分的。

在这里插入图片描述

图1.6

  移动刚添加的wall位置,按照自己的需求,我想让墙的位置在(-5, -0.1)。如需要旋转物体,见图1.8(orientation设置角度旋转或者Mouse Rotation设置旋转轴旋转)。

在这里插入图片描述

图1.7

在这里插入图片描述

图1.8

  个人习惯,在构建场景时候,防止自己位置设置的正负出现失误,常常在构建前先在(0,0)点建立一个Dummy做参考。大小长度 自己设置一个开心值就可。

在这里插入图片描述

图1.9

  而此时我想添加第二面墙,是前一面墙的向下延伸,此小技巧可快速将刚添加的对象的位置或姿态统一到刚才对象的位置或姿态上,此时会省去一两个量的变动,方便减少搭建场景的步数。有人可能就想吐槽了,需要向下延伸的话,你直接修改刚才那个墙的长度不得了,搞什么花里胡哨的锤子。其实,有时候是需要将两面连接的墙分开的,比如可能贴不同的壁纸,亦或者我刚添加的是墙,现在想添加个窗户等等,反正这种骚操作是有用武之地的,熟练的话可帮助快速搭建场景。

在这里插入图片描述

图1.10

  其他四周按此方法平移+旋转即可搭建起来。(15m似乎不够,修改了地板的Y轴长度为20m)下图为搭建的家庭场景1:1的框架图,窗户、门等还没选好,后期补充完成,初步够用、掌握方法就好。

在这里插入图片描述

2. 小车模型搭建

  模型搭建可参考 ros-vrep-slamenv.ttt,场景中机器人模型还是基本够用的,底盘上可以拿来使用的。其实coppeliaSim一方面就友好在此,看到别人的场景可以直接做参考,版本兼容的话拿来对好接口就能直接运行,我最开始就是这么搞的,然后一步步摸索删减、添加测试,方便后边的导航快速跟上。感觉软件在2020年得到了更快速的发展,所以你平时担心的 激光咋仿真?视觉咋仿真? 里程计 imu gps咋仿真?以及多线激光雷达咋仿真都放心好了,已经有前人探索差不多了,直接参考性修改就好,再有解决不了的可以去官方论坛提问,作者们回答频率还是很高的,一般都会回复 很赞。针对在Solidworks或者其他软件里已经构建的模型可以导出CoppeliaSim支持的格式,注意导出时需要设置好各joint之间关系,有博客已经讲过,否则导入CoppeliaSim之后会得不到你想要的结果,最后用CoppeliaSim中的对象替代模型即可。接下来针对没有基础模型的从零开始搭建。

  首先搭建小车底盘。鼠标右键-->Add-->Primitive shape-->Cuboid 设置大小(0.3,0.3,0.02),cuboid高度z 0.15m,重命名Cuboid为Robot。(Primitive shape默认添加位置为(0,0,0))我是用这个Cuboid去替代实际底盘最下层。

在这里插入图片描述

在这里插入图片描述

  搭建右轮。鼠标右键-->Add-->Primitive shape-->Cylinder设置尺寸为(0.17,0.17,0.03),位置为(0.19,0,0.085),绕Y轴旋转-90度,使其竖立起来。(x位置最好大于Cuboid的一半,避免两者位置干涉;z位置为车轮Cylinder的半径大小,可适当大一点,仿真启动时候Robot会落下来,不会影响什么)重命名Cylinder为 robot_rightWheel

在这里插入图片描述

  搭建左轮。直接ctrl+c ctrl+v复制出右轮副本,重命名为robot_leftWheel。位置为右轮的对称位置(-0.19,0,0.085)

在这里插入图片描述

  接下来需要给左右车轮添加joint(可视为电机)驱动运动,右键-->Add-->Joint-->Revolute。位置移动可使用搭建场景时候的小技巧,首先选中刚添加的Revolute_joint,然后按住Ctrl并选择 robot_rightWheel,选择位置对话框,单击”应用到选择”按钮,此时joint定位到右轮位置,但方向不一致,同样在方向对话框上执行一次”应用到选择“操作,重命名Revolute_joint为 robot_rightMotor,选择 robot_rightWheel,然后按住Ctrl选择robot_rightMotor,单击菜单栏-->Edit-->Make last selected object parent将最后选择的对象设为父对象(此操作也可在场景层次框 Scene hierarchy 中直接拖动实现),使得robot_rightWheel连接到robot_rightMotor上,并且双击 robot_rightMotor Scene Object Properties-->Show dynamic properties dialog--Motor enabled-->Lock motor when target velocity is zero防止小车在静止状态移动(尝试使用不同的物理引擎,在我的环境中使用Bullet v2.78仍然存在移动的,2.83会稍微好些;同时动态模拟的稳定性与所涉及的非静态形状的质量和惯性紧密相关,所以适当增大对象质量会优化一些)。同样添加左轮joint并重命名 robot_leftMotor,将robot_leftWheel连接到robot_leftMotor,且设置静态锁定joint。同样将 robot_leftMotor和robot_rightMotor连接到Robot对象上,结果如下:

在这里插入图片描述

  此时运行仿真,可看到未出现“散架”的现象,不过会向前或向后栽倒,这是因为前后没有支撑结构。下一步在前后各添加一个万向轮。现在看到的万向轮搭建方案主要有两种:

  • Force sensor + Primitive shape
  • Model browser中的components/locomotion and propulsion/Caster wheel.ttm

  方案一可直接参考手册的 BubbleRob教程 controlledViaRos.ttt。方案二直接拖动Caster wheel.ttm到场景中指定位置,并且拖动到Robot层次下即可。(如果底盘比较轻的话,很可能万向轮会影响小车的方向,此时加大底盘的重量能够优化一些,除此之外,下发速度时候添加个平滑对方向也有明显的优化)设置左侧电机 50deg/s,右侧点击 -50deg/s。运行仿真最终原地疯转效果如下:

在这里插入图片描述

在这里插入图片描述

  测试没问题的话,可以再将左右电机刚设置的速度修改为0,因为后期使用的话是通过其他方式下发控制速度到左右joint上的。为了美观一些,可以将左右joint隐藏掉。双击joint进入Scene Object Properties/Common,设置Visibility layers,默认第一行laysers是可见的,第二行隐藏。同理修改另一侧joint。

在这里插入图片描述

  习惯来讲,我们会将robot设置为 Object is model base,这样它会具有一些特殊属性(例如,保存或复制对象还会自动保存/复制其所有子项和子项,等等)。 此外,当选择这个对象时,选择边界框显示为粗线,包含整个模型。双击Robot-->Scene Object Properties-->Common-->Model definition/Object is model base,同时场景层次结构中的Robot前会有一个小黑点,此时你再选择Robot即选择的整体。

  最后,改装下小车 贴个膜、改个轮毂。首先贴膜,贴个回头率高的 市面上很少见的骚气淡紫色,步骤如下:

在这里插入图片描述

  接下来改个轮毂,自家店里的轮毂用完了,网上搜了一个店铺的轮毂,样子一般 凑合拿来改下。位置、方向需要操作下 跟小车的一致。

在这里插入图片描述

  移动位置操作跟 墙的操作一样,不细说,隐藏以前更丑的轮毂,最终骚气效果图如下(真的很不搭 😂 )。

在这里插入图片描述

3. 总结

  • 搭建过程中要注意两个相邻对象的干涉问题,设置位置时留出预留空间;
  • 运行仿真,静止状态小车仍然有微微的运动,造成长时间运行后,位置发生偏移,可通过修改关节的Motor enabled中的Lock motor when target velocity is zero改善;也可修改物理引擎改善;动态模拟的稳定性与所涉及的非静态形状的质量和惯性紧密相关,所以适当增大质量;
  • Object is model base设置;
  • 针对平时不关注的东西可以进行图层隐藏,例如joint;
  • 位置、方向修改小技巧;

原创不易,感觉有用的话,欢迎给个三连鼓励下!转载请注明出处,谢谢!

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值