基于阿克曼(Ackerman)模型的ROS无人车开发设计(2)

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仿真环境中部署了一台基于阿克曼底盘的无人车,在后续章节我们将开始基于该无人车进行算法的部署和开发!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值