前言:该篇是ROS学习记录的第二篇,如果还没关注过之前文章的读者,如有需要可以通过下方传送门去看之前的文章:

ROS学习记录(一) Plugin插件

这两天关注了古月老师的公众号,看到了其中一篇课程推荐:

好课推荐|《如何在Gazebo中实现阿克曼转向车的仿真》课程优惠中 (qq.com)

寻思着过段时间实验室买的新车是基于阿克曼转向的,而之前学的ROS小车导航定位等算法大多都是基于两轮差分的车辆模型。为了更贴近今后实验室的机器人平台及真实车辆的模型,又正好看到了古月老师推荐的课程,便咬咬牙和另外两位同僚花了点钱拼下了课程。古月老师的课程共五讲,那我这个系列接下来3篇左右的文章就记录一下我学习该课程的一些总结和思考。

今天这篇文章主要是阿克曼转向车辆运动学模型分析,及在gazebo中搭建阿克曼转向车辆的仿真环境。

一、阿克曼转向车辆运动学模型

1、车辆转向模型

通常来说,车辆转向模型大致可以分为四种:

① 差速转向模型;                           ② 麦克纳姆轮模型;

 

③ 履带模型;                                        ④ 阿克曼转向模型。

图片来源:古月居课程及百度图片

不像其他三种转向模型可以实现原地旋转或通过轮胎、履带差速的方式控制车辆的转向和速度,阿克曼转向模型具有后轮驱动、前轮转向的特点,这可以很自然的让我们联想到日常乘坐的民用汽车,的确当今民用汽车所使用的都是阿克曼转向模型,因此了解阿克曼转向原理对后续不论是实验车或者真车的无人驾驶实验都是很重要的。

2、阿克曼转向运动学模型

由阿克曼转向的特点,可以将其转向模型表示成如下形式:

即要求车辆转向时,左右前轮的瞬时转向中心重合于后轮所在直线上的同一点,因此实际上车辆转弯时内侧轮的转向角度要略微大于外侧轮的转向角度,两个轮子呈一个梯形而非平行四边形:

图片来源:https://www.icauto.com.cn/baike/71/716170.html

为了便于分析,通常可以将模型进行简化,即在前轮中心和后轮中心各假想一个轮胎来代表前后轮的运动,即所谓的单车模型:

    

控制量通常选取后轮速度及前轮转角 ,状态量选取世界坐标系下的坐标及航向角,则阿克曼转向的运动学模型可以表示为:

对应的里程计模型为:

二、在gazebo中搭建仿真环境

1、源码下载

在工作空间中下载课程源码:Zeende/racecar_sim (gitee.com),共包含三个文件夹:

将其中的smartcar_plane功能包复制到.gazebo/models文件夹下,该功能包包含了gazebo中的仿环境模型文件。

2、阿克曼转向模型

由于阿克曼转向前轮部分实际上是通过四连杆机构来进行控制,而urdf模型中无法直接添加四连杆机构,所以这里采用的方式是给车辆前轮设定一个旋转轴。除了轮胎本身可以绕水平轴旋转外,还可以绕着一根假象的与地面垂直的轴进行旋转,从而改变前轮转向角。

图片来源:古月居课程

在racecar.urdf.xacro车辆模型的描述文件中,可以找到对前轮部分垂直于地面旋转轴的描述的相关代码:

...<joint name="${lr_prefix}_steering_joint" type="revolute"><parent link="${lr_prefix}_steering_link"/><child link="${lr_prefix}_${fr_prefix}_axle_carrier"/><axis xyz="0 0 1"/><limit lower="${-degrees_45}" upper="${degrees_45}"effort="${servo_stall_torque}" velocity="${servo_no_load_speed}"/>
</joint>...

可以注意到这里添加的joint定义了一个<axis xyz="0 0 1"/>,即允许前轮绕z轴旋转,旋转的角度为<limit lower="${-degrees_45}" upper="${degrees_45}",即-45°到+45°,这里采用宏定义的方式将角度转化为了弧度:

...<xacro:property name="degrees_45" value="0.785398163"/><xacro:property name="degrees_90" value="1.57079633"/>
...

其它部分对轮胎的定义与差速小车相同。在最后需要将定义好的车辆前后轮模型进行引用:

...<xacro:front_wheel lr_prefix="left" fr_prefix="front"lr_reflect="1" fr_reflect="1"/><xacro:front_wheel lr_prefix="right" fr_prefix="front"lr_reflect="-1" fr_reflect="1"/><xacro:rear_wheel lr_prefix="left" fr_prefix="rear"lr_reflect="1" fr_reflect="-1"/><xacro:rear_wheel lr_prefix="right" fr_prefix="rear"lr_reflect="-1" fr_reflect="-1"/>
...

3、launch文件设置

① 在racecar_gazebo.launch文件中添加设置好的机器人模型:

...<!-- 加载机器人模型描述参数 --><param name="robot_description" command="$(find xacro)/xacro --inorder '$(find racecar_description)/urdf/racecar.urdf.xacro'"/><!-- 在gazebo中加载机器人模型--><node name="urdf_spawner" pkg="gazebo_ros" type="spawn_model" respawn="false" output="screen"args="-urdf -model racecar -param robot_description -x $(arg x_pos) -y $(arg y_pos) -z $(arg z_pos)"/>
...

需要注意的是,xacro文件无法直接加入到gazebo中,需要通过工具转化为参数放在robot_description中。

② 加载仿真环境模型

<!-- 设置launch文件的参数 --><arg name="paused" default="false"/><arg name="use_sim_time" default="true"/><arg name="gui" default="true"/><arg name="headless" default="false"/><arg name="debug" default="false"/>
...<!--运行gazebo仿真环境--><include file="$(find gazebo_ros)/launch/empty_world.launch"><arg name="debug" value="$(arg debug)" /><arg name="gui" value="$(arg gui)" /><arg name="paused" value="$(arg paused)"/><arg name="use_sim_time" value="$(arg use_sim_time)"/><arg name="headless" value="$(arg headless)"/><arg name="world_name" value="$(find racecar_description)/worlds/racetrack.world"/></include>

③ 设置小车初始位置

...<!--模型车的起点放置位置--><arg name="x_pos" default="-0.5"/><arg name="y_pos" default="0"/><arg name="z_pos" default="0.0"/>
...

4、加载模型

在终端中运行launch文件

roslaunch bringup racecar_gazebo.launch

最终效果如下:

结语

本篇主要介绍了阿克曼转向车辆的运动学模型,及在gazebo中加载仿真环境。

目前为止程序中还没添加控制器及发布里程计数据,所以在rviz中仅能看到车辆模型,但无法通过keyboard控制,小车原地不动。

下一篇中我会根据古月老师的课程讲解,说明一下给小车添加ros_control功能以实现对小车控制的过程,及自定义发布里程计数据的程序。

文章如有侵权的地方,请及时与我联系修改。

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

  1. agx 安装ros opencv_【树莓派ROS开源机器人】阿克曼转向机器人,最接近无人自动驾驶的人工智能机器人...

    塔克创新出品的系列入门ROS智能机器人学习开发平台,包括麦克纳姆轮机器人,四轮差速机器人,两轮差速机器人,阿克曼转向小车等平台.可实现SLAM建图导航.自动避障.雷达跟随.视觉巡线.三维建图.手机AP ...

  2. 在虚拟机中对阿克曼转向车进行导航及避障的仿真测试

       本篇文章,依旧是在虚拟机中对阿克曼转向车的仿真测试,本篇文章进行导航及避障的测试,依旧借助于古月学院<如何在Gazebo中实现阿克曼转向车的仿真>课程资料进行测试    本篇文章,主 ...

  3. 以阿克曼转向车为例对URDF和XACRO文件进行解读

       最近我在古月学院购买了在Gazebo中实现阿克曼转向车的仿真课程,课程资料的阿克曼小车的XACRO文件在Gazebo里加载的时候报了三个错误,在这之前,我没接触过URDF或XACRO文件,本篇文 ...

  4. ros学习记录:Gazebo加载速度慢,长时间停在“Preparing your world”

    前言 ros学习记录笔记,一个小白的自留地,欢迎大佬批评指正~ 一.问题描述 Gazebo加载速度慢,长时间停在"Preparing your world" 二.解决办法 1.下载 ...

  5. ROS学习记录9——urdf文件的创建与使用

    零.前言 在学习这一节之前,至少得明白如何创建一个工作空间,如何编译工作空间,如何运行工作空间里的文件(把工作空间的环境目录添加到环境里).如果有不会的,请看鄙人的ROS学习记录3. 本节默认工作空间 ...

  6. ROS学习笔记二:探索ROS文件系统

    ROS学习笔记二:探索ROS文件系统 ROS针对自己文件的特性,具有一些自己的工具命令,当针对ROS文件进行操作的时候是非常方便的.这些命令和ubuntu系统原有的命令相似但却不同,单独针对ROS文件 ...

  7. MySQL学习记录 (二) ----- SQL数据查询语句(DQL)

    相关文章: <MySQL学习记录 (一) ----- 有关数据库的基本概念和MySQL常用命令> <MySQL学习记录 (二) ----- SQL数据查询语句(DQL)> &l ...

  8. Webots+ROS学习记录(4)——六轮全地形移动机器人

    Webots+ROS学习记录(4)--六轮全地形移动机器人 有了以上经验,可以创造出一个全地形的移动机器人如图1 第一步,创建robot节点,并给robot节点编写相应参数 注意,这里的机身不能再使用 ...

  9. 【ROS学习记录】2021/7/2 Gazebo+rviz仿真(一)

    [ROS学习记录]2021/7/2 Gazebo+rviz进行turtlebot2仿真问题记录 ##小插曲 今天ubuntu挂载u盘一直读取失败所以做了一些令人窒息的操作,晚上开机就进入了initra ...

最新文章

  1. 生物系统和疾病的多组学数据整合考虑和研究设计
  2. 0207.Domino R8.0.x群集配置手册
  3. 枚举操作的常用方法,包括获得枚举的value,name,description
  4. 使用ADF列表视图的主从数据
  5. STM8学习笔记---外部中断实现
  6. 文件系统的简单的操作
  7. 秋招复习-后端(C++)
  8. java商城项目_javaweb实战之商城项目开发(一)
  9. php 上传没生成文件,php-上传时无法创建临时文件
  10. 【资源】吴恩达新书《Machine Learning Yearning》,附中文版PDF下载
  11. Linux 2.4.x 网络协议栈QoS模块(TC)的设计与实现
  12. 北大软微计算机专硕分数线,给暑假在复习的考研党谈点经验,一战上岸北大软微总分400+数一148公共课299...
  13. 抖音复制微信号跳转微信的链接怎么生成的?
  14. 一台计算机地址线32根,若有一台计算机,它的地址线有32根,则它的寻址空间是...
  15. 100-数据结构与算法(下篇)
  16. No speakable text present at Android Studio
  17. python 去掉双引号_你要偷偷的学Python,然后惊呆所有人(第一天) - python阿喵
  18. js(Mandango:壮汉专用,电影院划位工具)
  19. OMAPL138调试笔记
  20. PyQt5桌面应用开发(9):经典布局QMainWindow

热门文章

  1. LOESS 局部加权回归介绍
  2. 一文读懂【数据埋点】
  3. 项目进度表:可应用于各行业中的项目进度管控
  4. C/C++程序内存布局(data段,bss段,text段)以及static关键字详解
  5. 降维算法总结(超全!附代码)
  6. linux报ora12560,测试ORA-12560和ORA-12500
  7. Eclipse 新建WEB工程的WebContent目录设置默认WebRoot,和设置编译class默认输出WebRoot\WEB-INF\classes
  8. React-Native 创建App项目
  9. java制作坦克大战
  10. 椭圆 标准方程 离心率 圆的标准方程