0.前言
在前面两个章节中,我们成功在Rviz和Gazebo仿真环境中加载了基于阿克曼底盘模型的无人车,在这一节中,我们将介绍Gazebo仿真环境,事实上不同的仿真环境就是对应了我们需要无人车去开发什么样的功能,比如:在工厂环境中,我们希望无人车能够去建图,然后做定线巡航,在特定的场景下完成巡检;在未知的森林/洞穴环境中,我们希望无人车能够去自主探索,以发现有价值的目标;在车库里面,我们希望无人车能够自动泊车,用来验证我们的算法......也就是说Gazebo仿真环境就是你想要去把无人车应用的场景,为了尽可能好的完成你的指标,学识渊博的你将会去优化算法,然后促进行业的进步!然而,这一切的基础就是一个好的Gazebo世界模型可以让你去实现你的应用!
1.Gazebo简介
gazebo是一个三维物理仿真的平台,具备有物理引擎、图形渲染、编程与可视化接口,可以和ros之间进行连接。值得注意的是,我们可以看到在之前两个章节中在gazebo中的机器人模型与rviz使用的模型相同,但是在gazebo中需要在模型中加入机器人和周围环境的物理属性,例如质量、摩擦系数、弹性系数等。机器人的传感器信息也可以通过插件的形式加入并显示。
2.如何构建一个世界仿真模型
在gazebo中有两种构建世界仿真模型的方法,一种是通过insert插入的方式将model插入到时间中,另一种是通过Building editor的方式手动创建世界模型。第一种的前提是在你的model文件中已经下载好了对应的模型,如下所示:
在搭建好世界之后,点击左上角的File中的save world as即可保存world文件,如果你是在gazebo9中进行这个操作,你可能会出现界面卡死的情况,这是因为你在进行这个操作的时候gazebo并没有执行出现一种一直等待的情况,你只需要点击右上角的最小化再打开即可解除这种情况!
第二种方式通过Building editor来快速创建简单的房屋建筑,可以手动创建墙面、门、窗及楼梯,这里注意gazebo中可以进行多层建筑的创建,但是通过这种方式创建的房屋建筑又比较简单,和实际环境存在较大偏差,所以建议使用Blender等其他专业软件创建模型后再导入到gazebo中!
3.部署室内仿真模型
学识渊博的您肯定能够快速搭建自己的世界模型,为了快速构建起我们的室内仿真场景,我们使用亚马逊开源的aws-robomaker室内仿真环境,github开源链接为:
https://github.com/aws-robotics/aws-robomaker-small-house-world
打开终端进入工作空间,下载对应的ROS包
cd Ackerman/src
git clone https://github.com/aws-robotics/aws-robomaker-small-house-world
如果下载失败,您可以重复多次下载或者更换网络环境,或者留言我给您分享文件!下载成功后,
修改neor_mini/launch/display_gazebo_sensors.launch文件中的代码,修改小车加载的初始位置以及wrld文件的加载路径,其余代码保持不变:
<launch>
<arg name="x" default="5.0"/>
<arg name="y" default="0.5"/>
<arg name="z" default="0.0" />
<arg name="roll" default="0.0"/>
<arg name="pitch" default="0.0"/>
<arg name="yaw" default="0.0"/>
<include file="$(find gazebo_ros)/launch/empty_world.launch" >
<arg name="world_name" value="$(find aws_robomaker_worlds)/worlds/small_house.world"/>
</include>
<param name="robot_description" command="cat $(find neor_mini)/urdf/neor_mini_gazebo_sensors.urdf"/>
<rosparam file="$(find neor_mini)/config/ctrl_ackermann_steering_controller.yaml" command="load" />
<rosparam file="$(find neor_mini)/config/ctrl_gains.yaml" command="load" />
<rosparam file="$(find neor_mini)/config/ctrl_joint_state_publisher.yaml" command="load" />
<rosparam file="$(find neor_mini)/config/ctrl_steer_bot_hardware_gazebo.yaml" command="load" />
<node pkg="controller_manager" type="spawner" name="controller_spawner" args="joint_state_publisher ackermann_steering_controller" output="screen" respawn="false" />
<node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher">
<param name="publish_frequency" value="50.0"/>
</node>
<node pkg="rqt_robot_steering" type="rqt_robot_steering" name="rqt_robot_steering" >
<param name="default_topic" value="ackermann_steering_controller/cmd_vel"/>
<param name="default_vx_max" value="1.0"/>
<param name="default_vx_min" value="-1.0"/>
<param name="default_vw_max" value="0.69"/>
<param name="default_vw_min" value="-0.69"/>
</node>
<node name="spawn_vehicle" pkg="gazebo_ros" type="spawn_model" args="-urdf -param robot_description -model neor_mini -gazebo_namespace /gazebo
-x $(arg x) -y $(arg y) -z $(arg z)
-R $(arg roll) -P $(arg pitch) -Y $(arg yaw)"
respawn="false" output="screen" />
</launch>
然后,在终端中输入下列命令:
catkin_make
source ./devel/setup.bash
roslaunch neor_mini display_gazebo_sensors.launch
成功运行之后,在室内的环境中将成功加载基于阿克曼底盘模型的无人车!
恭喜您,您已经在您的电脑上部署了基于阿克曼底盘的无人才仿真环境,接下来可以进行对应功能的开发,我也将在后续章节中完成无人车导航、建图及探索等等功能!您也可以给我留言想要开发的功能!
版权归原作者 Codeing学长 所有, 如有侵权,请联系我们删除。