Banner
如何从零开始一步一步仿真一台迷你无人车
- 2021-05-04 05:15 -

  之前我们生动的给大家讲了机器人仿真,比如为什么要仿真等---机器人拍了拍你,仿真了解一下,今天我们给大家讲讲具体怎们从零开始一步一步仿真一台迷你无人车。

  这里所说的“从零开始搭建一台ROS开源迷你无人车”指的是利用NEORmini无人车的urdf模型文件,结合Gazebo物理仿真引擎和ROS开源社区的算法功能包,在Ubuntu + ROS开发环境下模拟出一台和NEOR mini实体无人车功能一致的仿真无人车。实现的过程如下图所示:

  查询:确的ip,然后在 /etc/hosts 文件末尾添加对应的ip + url。记得打开hosts文件方式如下:

  URDF全称为:统一机器人描述格式(Unified Robot Description Format)。URDF文件使用XML格式描述机器人模型中各个刚体(link)之间的位置与刚体之间使用关节(joint)链接,并定义相对运动的姿态。可以通过xml格式自定义简单形状的URDF机器人模型;也可以使用sw_urdf_expoter插件将机器人的设计图纸自动转换为urdf文件,作者在这里使用的是第二种方式。NEOR mini是一款后轮独立驱动,前轮转向的类阿克曼运动学的移动底盘。使用sw_urdf_expoter之前需要将整个NEOR mini三维模型分成如下几大块:

  然后,设置好每个实体的旋转轴,利用sw_urdf_expoter即可导出对应的urdf模型文件。在导出之前需要检查上述各个实体的名称,若相同,导出的urdf模型很有可能会出现凌乱的现象,需要重命名名字重复的实体。导出的urdf模型文件以ROS功能包的形式,其文件树和urdf模型可视化如下:

  URDF模型文件离动起来还需要程序去驱动对应的关节和实体完成指定的转动。前面提到了NEOR mini是一款类阿克曼运动学方式的移动底盘。因此该驱动程序需要将接收到的速度指令,解算为mini的每个轮子的转速和转向关节的旋转角度;该转换过程称之为“运动学解算”。下面从原理上简要介绍如何将mini无人车整体的线、角速度转换成后轮各自的转速和前轮转向关节的旋转角度。示意图如下:

  假设t时刻,o点接收到速度指令(v,w),mini左前、右前轮转向角度θ一致(现实中内侧转向角度略大),前后轴距为L;可求解出后轮的转速和前轮的转向角度。公式如下:

  同理根据实际的执行情况,可以从后左右轮的转速和前轮的转向角度逆推出后轮中点出的线角速度(v,w)。从而可以推算出无人车的航迹信息。

  经过上述的推算,知晓了阿克曼底盘的运动学正逆解算方式。至此,便可通过程序驱动urdf模型了。steer_drive_ros功能包集内置了阿克曼类型urdf在gazebo下的驱动程序steer_bot_hardware_gazebo以及完成正逆向运动学的解算程序steer_drive_controller;整个功能包集的运行过程如下图示(摘自wiki):

  紧接下来的目标是:参照steer_drive_controller解算程序对urdf模型的构造要求,修改neor_mini.urdf文件以符合要求,然后更新对应的配置文件信息(关节和实体名称)。根据官网的解释,该程序所支持的urdf模型构造和已有的neor_mini.urdf的构造分别如下左右图所示:

  经过对比可以发现,现有的neor_mini.urdf文件,其前轮的转向实体分别位于左右前轮的内侧,但是实际要求是位于左右轮顶部。因此需要对neor_mini.urdf的前轮转向关节和实体位置进行修改。修改方案为:替换前左右轮转向机构的实体为圆柱体,不再是通过加载的front_steer_right/left_link.STL文件;修改转向关节相对于base_link的位置数值;修改两前轮相对于新位置处转向关节的位置数值;修改转向关节的角度范围为[-0.69,0.69]。具体的替换对比如下两图所示:

  修改轮子与新转向关节之间的位置和旋转轴。右侧为修改后的neor_mini.urdf:

  同理可修改前轮左侧的转向关节:front_steer_lift_link和前轮与前轮转向关节之间的位置和旋转轴。需要注意的是在urdf文件中不要出现中文,否在在rviz中可视化时会报错。为了美观,这里将新位置的前轮转向实体缩小了,并且将其位置在官网参考位置基础上下移了,这样就和原始的neor_mini.urdf外观保持一致。效果对比如下:

  为了能够在gazebo中顺利加载修改后的urdf文件,需要在《robot》标签内加入gazebo_ros_control标签。内容如下:

  至此,修改后的urdf文件已经具备被steer-drive-ros程序驱动,并在gazebo中运动的必备条件。随后需要的就是更新改程序的配置文件中的相关驱动关节和实体的名字。

  在前面所做准备的基础上,现在需要更新steer-drive-ros运行时加载的配置文件。根据该程序的参数在wiki中的解释1、2,将所有的参数分为4个配置文件(.yaml),如下:

  为了方便管理,这里创建了一个ros 功能包,存储配置文件和程序启动的launch文件,以及使用package.xml管理程序运行所需的依赖包。创建的命令如下:

  steer_mini_gazebo可以被编译生成可执行程序节点。紧接着,需要在其中添加前面所述的四个配置文件和程序启动的launch文件。添加后的功能包文件树如下:

  说明:上述加载的gazebo环境:cooneo_office.world是咱COONEO办公室的一个简易图。在启动过程中,可以修改加载的环境文件;或启动后在gazebo中加载内置的环境,但需要下载对应的model文件,放入指定的位置。上述加载的urdf文件名为:neor_mini_gazebo,这仅仅是步骤4中修改完成后的一个副本(方便修改后续的比对)。

  注意:ubuntu18.04 在运行gazebo的时候,可能会出现如下红色提示:

  经过前面5个步骤的努力,现在neor_mini.urdf可以在gazebo中正常驱动,并且可以反馈里程计信息。下面的目标是:在开源算法的基础上,实现mini无人车构建栅格地图和定点导航的demo级别功能。

  ROS中构建地图的常用算法是:Gmapping,根据wiki中的解释,该算法会订阅一些话题数据,然后发布栅格地图话题,分别如下所示:

  结合neor_mini.urdf的现状,想要顺利运行gmapping算法,还需要模拟激光雷达的信息。根据gazebo tutorials中的示例,可以通过在urdf文件中添加对应的传感器仿真标签的形式,实现对应的传感器仿真。根据教程可知,每一个传感器模拟标签需要依附于一个link实体,所以需要在原来的urdf文件中添加一些新的实体进去。为了后续扩展方便,这里选择性地准备添加:camera、imu、laser三种传感器插件,也即需要在urdf文件的《robot》标签中添加三个新的依附实体link以及关节joint信息,详情如下所示。

  参照之前的gazebo仿真视频可见模型为全白,可以添加对应的gazebo颜色标签,对urdf文件中任意link实体涂颜色。

  添加完毕新实体和涂颜色后,就可以添加对应的传感器仿真标签了,参照 gazebo-sensors。这里仅介绍激光雷达示例,参照Slamtic A1M8的距离和扫描范围更改了对应的参数,同理可以添加imu和camera模拟标签。

  将nch文件中的内容拷贝进的新建添加传感器后的启动文件steer_mini_sim_sensors.launch中,然后在《launch》标签里面的最后面添加上述新添加的三个传感器的静态tf变换如下(否则,rviz不能正确显示)

  最后,运行gampping算法。该算法有很多的参数可以设置,同样以launch文件的形式加载。这里创建一个ros功能包,来存储启动的launch文件和记录编译时所需要的依赖包。文件树如下:

  第一个加载的是前面步骤中配置好的带传感器的mini仿真模拟文件。该文件启动后将发布里程计话题:/ackermann_steering_controller/odom、机器人姿态话题:/imu、激光雷达话题:/scan;第二个加载的launch文件的功能是融合里程计和姿态话题数据,使用的是robot_localization功能包,其输出新的base_link到odom的一个tf转换,该tf转换被gmapping订阅;第三个文件启动的是gmapping,并加载其参数。第四部分是启动Rviz,目的是为了可视化各个传感器的信息,以及构建的地图。gmapping和robot_localization的参数配置wiki上都有详细的讲解,作者这里设置的不一定是最优的,所以就不展现了。参考前面package.xml的填写方式,在mini_gmapping/package.xml中添加三个功能包依赖,分别是:gmapping、map_server、robot_localization。创建完毕功能包后,在终端中:

  如果你觉得地图构建完毕了,那是不是就需要保存地图了,先别ctrl+c关闭程序,这个时候就用到map_server功能包了。使用方式如下:

  构建完毕栅格地图之后,这个地图在哪里使用呢?答案其中之一就是用于NEOR mini的导航demo中。该demo功能的实现同样是借助的ros中许多开源的算法包。想要也看看是如何构建的吗?请见文末尾的git链接吧,里面有已经构建好的完整代码哟。

  看见了前面这么多的构建内容,你是否也想亲自动手,一步一步实现上述的功能,我们将原始的文件开源了,你可以先安装git,然后clone代码,进入对应的文件中,获取未经修改的neor_mini.urdf文件,然后自己实现。

  你已经是ROS的大神了,想直接拿来扩展,实现你自己的功能。我们同样也准备了对应的代码,供大家参考使用。里面有前面提到的导航demo功能哟。

  文章出处:【微信公众号:机器人大讲堂】欢迎添加关注!文章转载请注明出处。

  文章出处:【微信号:RoboSpeak,微信公众号:机器人大讲堂】欢迎添加关注!文章转载请注明出处。

  2021年4月26日,日本RFID技术公司RF Lucas宣布已筹集3亿日元,目的是与无人驾驶机器人....

  据悉,自2019年浙江省携手日本软银集团启动实施“AI+机器人”未来英才培育计划以来,已有2000余....

  第五届世界智能大会将于2021年5月在天津举办。记者了解到,天津新松机器人自动化有限公司(以下简称:....

  今天分享两种机器人,它们有着共同的特点:旋转脚技术(如下图)。 机器人TIMA的工程师创造了Tima....

  构造了角波函数驱动的新三维连续卷整数阶和分数阶混沌系统,分析和数值仿真,设计并实现了相应的实验电路。....

  2025年化妆品市场规模达9000亿 近年来我国日化行业迅速增长,从国内化妆品市场角度来看,随着国内....

  4月27日,由深圳市兴业创辉实业集团有限公司控股成立的博迈机器人科技(深圳)有限公司(以下简称:博迈....

  2021年4月20日,G20-智能制造峰会成员企业节卡机器人天津技术中心成立。节卡机器人CEO李明洋....

  为加快推动机器人产业健康有序高质量发展,4月27日,全国自动化系统与集成标准化技术委员会机器人与机器....

  在Altera Quartus II下如何调用ModelSim进行仿真?

  在Altera Quartus II下如何调用ModelSim进行仿线

  自适应算术编码的基本原理是什么? 自适应算术编码的FPGA实现 如何对自适应算术编码进行仿真? ...

  SoftSerdes主要由哪几部分构成? 如何对SoftSerdes进行仿真测试? ...

  与世界各地的许多行业一样,澳大利亚的水果采摘业受到了COVID-19大流行的严重影响,在劳动力市场上....

  5G的“易部署”,IM体育消除了旧工厂升级改造过程中的重重障碍,让工程实施变得更加容易;5G的“低时延”,让....

  弗吉尼亚理工大学(Virginia Tech)的研究人员受到蝙蝠耳原理的启发,创建了听音定位技术。他....

  基于使用Atmega328P和ULN2003步进驱动器制造绘图仪机器人

  在该项目中,将制造带有mXY板的XY绘图仪机器人。借助该机器人,可以墙壁,面板或A4纸上绘制图像,还....

  还记得《银河护卫队2》中萌萌的小树人“格鲁特”吗? 注意了,这可不是漫威新电影的CG画面,而是迪士尼....

  本文摘自5G+垂直行业承载技术及典型应用方案研究白皮书,基于5G+垂直行业初步应用阶段的典型业务,本....

  为了从情绪的视角分析紧急情境下人群的疏散行为,梳理了现有情绪感染的研究工作,总结了人群紧急状况下行为....

  像往常一样,我制作了本教程来指导您逐步制作自己的机器人,并开始学习如何制作可控机器人,以及如何控制它....

  人工智能的春风席卷而来,带来一系列自动化解决方案,在巡检领域,人工巡检、直升机巡检、机器人巡检是主要....

  马达板基于两个来自RAMPS 3D打印机套件的A4988步进驱动器 两个A4988步进驱动器均使用2....

  在一个演示实验中,机器人启动后,并没有直接抬腿迈步,而是面对前方的“小沟”做了7-8秒的“思考”停顿....

  近日,艾伦人工智能研究所推出AI框架A12-THOR 3.0版本,新增视觉对象操作框架Manipul....

  作为机器人的动力来源,电机直接影响其有效负载、工作半径等关键参数,其设计上的技术选择和性能取舍将直接....

  美国公司研发出可以代替机长驾驶飞机的机器人ROBOpilot。ROBOpilot采用非侵入式方法,安....

  文章介绍了一种新型的基于高速数字信号处理器(DSP),以永磁同步电动机(PMSM)为驱动部件的飞行仿....

  工人在清洗污水时必须面对的问题是跌落,起火,耗氧,有毒气体等。从上述问题出发,我们必须高度重视有毒气....

  电子发烧友网为你提供iCoupler技术揭秘——隔离式RS-485资料下载的电子资料下载,更有其他相....

  电子发烧友网为你提供Matlab系列之数组(矩阵)的生成资料下载的电子资料下载,更有其他相关的电路图....

  电子发烧友网为你提供Matlab系列之数组的基本操作资料下载的电子资料下载,更有其他相关的电路图、源....

  电子发烧友网为你提供单IC增益模块提供¼到6的精密增益资料下载的电子资料下载,更有其他相关的电路图、....

  如何实现扩频通信调制器自顶向下的设计? 如何实现扩频通信调制器的仿真测试? ...

  X-Y二维扫描台位置检测原理是什么? 如何去设计一种扫描仪位置检测系统? 如何对扫描仪位置检测系统进行仿真测试? ...

  扩频系统的原理是什么? 基于Simulink的数据链接系统如何进行仿真测试? ...

  通过神经信号来帮助残疾人士(本文特指下肢截肢人士)控制假肢的设想又多了一些可能性。

  人工智能正在塑造世界。学习如何战胜冠状病毒、汽车自动化、机器人只是改变世界的一些创新。在自然语言系统....

  基于fpga的3D打印清洁机器人。该机器人具有多个用于检测障碍物的传感器和一个用于清洁地板的吸尘器。....

  C语言和Fortran语言在科学计算中发挥了重要作用,而Matlab作为一种新型的高性能的语言,它和....

  从改善足球机器人控制电路性能的目的出发,分析了用普通单片机控制的足球机器人在比赛中的缺陷,对普通单片....

  电子发烧友网为你提供PIC单片机TIMER0实现流水灯的自动控制设计资料下载的电子资料下载,更有其他....

  电子发烧友网为你提供什么是高压LED资料下载的电子资料下载,更有其他相关的电路图、源代码、课件教程、....

  怎样去设计高速PID控制器? 怎样对高速PID控制器进行仿真? ...

  怎样去设计多按键状态识别系统? 如何对多按键状态识别系统进行仿真? ...

  lazy.gifAI 和 5G 与机器人技术结合,正在不断催生新的消费电子品类。AI 解决机器理解世....

  当今,新一代人工智能与机器人技术正在全球范围内蓬勃兴起,为经济社会发展注入新动能,并深刻改变人们的生....

  为了解决快速扩展随机树(RRT)在障碍物密集、通道狭窄的环境中收敛速度缓慢、采样节点密集、路径曲折复....

  该项目使用在ESP32上运行的TensorFlow Lite创建一个语音控制的机器人。它可以响应简单....

  去年突发的新冠疫情,让众多行业陷入停滞,因人流密集、顾客流动性较大,餐饮行业成为重灾区。纵观2020年餐饮行业

  2016年3月以来,一款名为AlphaGo(阿尔法狗)的机器人声名鹊起,因为它先后完胜了围棋界名将李....

  您好朋友,这篇文章是关于DIY自平衡机器人的,我将向您展示如何构建自己的自平衡机器人。

  纳米机器人是机器人工程学的新兴科技,是当今高新科技的前沿热点之一,它以分子水平的生物学原理为设计原型....

  解决电动汽车充电难的问题,移动充电可能是非常有效的解决方案之一。 日前,远景科技集团在“零碳伙伴日”....

  力生公司为客户集成的机器人电机轴与转子自动装配工作站,由2台工业机器人组成。根据客户实际情况,采用2....

  海底世界神秘莫测,还有很多未开发的秘密。 多年来,人们一直利用机器人来探索海洋,但有些机器人长得实在....

  Google研究团队率先研发出了处理大规模任务的新型机器人,这些机器人竟然具有「学习世界」的能力。 ....

本文由:IM体育提供

Copyright © 2015-2023 上海im体育 版权所有 ICP备05013835号 网站地图

数字式振动传感器生产厂家,数字加速度传感器公司价格,高精度数据采集仪工作原理,静态应变仪参数哪家好