0.前言
在前一章节我们基于开源的模型成功在Rviz中显示了基于阿克曼底盘模型的无人车,学识渊博的大家肯定发现这不就是别人开源的代码吗?但是在实际按照开源的简短教程对新手并不是很友好,同时在Ros包中的一些代码比较冗余,以及运行时会出现一些Bug,我将会对这部分进行代码更改和简化并解析其中的关键部分,帮助大家快速理解。另外我们学习ROS无人车更加关注的是如何能够快速进行上层应用的开发,如建图、定位、导航及目标检测与跟踪等等。所以,在后续的篇章中,我们将更加关注功能应用的开发帮助大家能够更快、更全面的学习并快速上手应用ROS无人车算法的开发中!
1.配置Config文件
接下来我们通过在Gazebo仿真环境中加载模型,为了简化代码,我们将上一章节中下载到的源码中的部分移动到我们的工作空间中:
cp -r /home/yours_name/neor_mini/mini_sim18_ws/src/steer_mini_gazebo/mini_control/config/* /home/yours_name/Ackerman/src/neor_mini/config/
此时,在你的neor_mini/config文件夹下会显示下面这五个yaml文件:
关于yaml配置文件的具体作用将会在后续章节中进行详细解答
2.修改launch文件
打开neor_mini/launch文件夹,将display_gazebo_sensors.launch文件中的内容替换为下列代码:
<launch>
<arg name="x" default="0.0"/>
<arg name="y" default="0.0"/>
<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" >
</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>
3.修改package.xml文件
将neor_mini文件夹下的package.xml文件中的依赖修改为以下代码:
<buildtool_depend>catkin</buildtool_depend>
<build_depend>ackermann_steering_controller</build_depend>
<build_depend>controller_manager</build_depend>
<build_depend>gazebo_ros</build_depend>
<build_depend>gazebo_ros_control</build_depend>
<build_depend>joint_state_controller</build_depend>
<build_depend>robot_state_publisher</build_depend>
<build_depend>roscpp</build_depend>
<build_depend>roslaunch</build_depend>
<build_depend>rqt_robot_steering</build_depend>
<build_depend>steer_bot_hardware_gazebo</build_depend>
<build_depend>steer_drive_controller</build_depend>
<build_export_depend>ackermann_steering_controller</build_export_depend>
<build_export_depend>controller_manager</build_export_depend>
<build_export_depend>gazebo_ros</build_export_depend>
<build_export_depend>gazebo_ros_control</build_export_depend>
<build_export_depend>joint_state_controller</build_export_depend>
<build_export_depend>robot_state_publisher</build_export_depend>
<build_export_depend>roscpp</build_export_depend>
<build_export_depend>roslaunch</build_export_depend>
<build_export_depend>rqt_robot_steering</build_export_depend>
<build_export_depend>steer_bot_hardware_gazebo</build_export_depend>
<build_export_depend>steer_drive_controller</build_export_depend>
<build_export_depend>ros_control</build_export_depend>
<exec_depend>ackermann_steering_controller</exec_depend>
<exec_depend>controller_manager</exec_depend>
<exec_depend>gazebo_ros</exec_depend>
<exec_depend>gazebo_ros_control</exec_depend>
<exec_depend>joint_state_controller</exec_depend>
<exec_depend>robot_state_publisher</exec_depend>
<exec_depend>roscpp</exec_depend>
<exec_depend>roslaunch</exec_depend>
<exec_depend>rqt_robot_steering</exec_depend>
<exec_depend>steer_bot_hardware_gazebo</exec_depend>
<exec_depend>steer_drive_controller</exec_depend>
<exec_depend>ros_control</exec_depend>
4.加入小车模型驱动文件
将无人小车需要的驱动文件加入到工作空间中,首先在src目录下新建文件neor_mini_drive_ros,然后在任意终端中运行下列指令:
cp -r /home/yours_name/neor_mini/mini_sim18_ws/src/steer_drive_ros/* /home/yours_name/Ackerman/src/neor_mini_drive_ros/
5.运行launch文件
打开新终端,cd到Ackerman工作空间中编译并运行display_gazebo_sensors.launch文件:
cd Ackerman/
catkin_make
source ./devel/setup.bash
roslaunch neor_mini display_gazebo_sensors.launch
我们将看到在gazebo中加载出来了基于阿克曼底盘模型的无人车:
同时还打开了一个rqt控制的gui界面,可以通过调节前轮转向和后轮速度来控制gazebo无人车进行运动:
我们设置前轮转向速度为0.2rad/s,后轮速度为0.4m/s,将看到无人车在gazebo中做圆周运动:
无人车做圆周运动
恭喜你,在此你已经成功在gazebo仿真环境中部署了一台基于阿克曼底盘的无人车,在后续章节我们将开始基于该无人车进行算法的部署和开发!