前言
本篇为自定义四轮小车的ROS导航仿真,与前面自定义机器人导航类似。该篇源码非原创,特此说明,作者博客地址在这里:https://blog.csdn.net/wangchao7281/article/details/53691351,本想转载,但是没找到快捷键。。。所以再记录一下吧。
一、创建编译功能包
切换到catkin_ws/src目录下,如下:
catkin_create_pkg nav_sim urdf xacro
切换到catkin_ws目录下,编译该功能包,如下:
catkin_make nav_sim
在该功能包下创建include、src、launch、urdf文件夹,在urdf文件下创建urdf文件夹和xacro文件夹。
二、代价地图配置
新建costmap_common_params.yaml配置文件(即共享文件配置),内容如下:
obstacle_range: 2.5
raytrace_range: 3.0
footprint: [[-0.2,-0.2],[-0.2,0.2], [0.2, 0.2], [0.2,-0.2]]
#robot_radius: ir_of_robot
inflation_radius: 0.6
cost_scaling_factor: 10.0
observation_sources: scan
scan: {sensor_frame: hokuyo_link, observation_persistence: 0.0, max_obstacle_height: 0.4, min_obstacle_height: 0.0, data_type: LaserScan, topic: /scan, marking: true, clearing: true}
新建global_costmap_params.yaml配置文件(即全局代价地图配置),内容如下:
global_costmap:
global_frame: /map
robot_base_frame: /base_footprint
update_frequency: 1.0
static_map: true
新建local_costmap_params.yaml配置文件(即局部代价地图配置),内容如下:
local_costmap:
global_frame: /map
robot_base_frame: /base_footprint
update_frequency: 5.0
publish_frequency: 1.0
static_map: false
rolling_window: true
width: 5.0
height: 5.0
resolution: 0.05
tranform_tolerance: 1.0
planner_frequency: 1.0
planner_patiente: 5.0
#plugins:
# {name: obstacles, type: "costmal_2d::ObstacleLayer",
# name: inflation, type: "costmal_2d::InflationLayer"}
三、基本局部规划器配置
新建base_local_planner_params.yaml配置文件(即本地代价地图配置),用于产生一个速度命令来移动机器人,内容如下:
TrajectoryPlannerROS:
controller_frequency: 3.0
max_vel_x: 0.3
min_vel_x: 0.05
max_rotational_vel: 0.5
min_in_place_rotational_vel: 0.01
min_in_place_vel_theta: 0.5
escape_vel: -0.1
max_vel_theta: 1.0
min_vel_theta: -1.0
acc_lim_theta: 3.2
acc_lim_x: 2.5
acc_lim_y: 2.5
yaw_goal_tolerance: 0.1
xy_goal_tolerance: 0.1
pdist_scale: 0.8
gdist_scale: 0.4
holonomic_robot: false
meter_scoring: true
四、创建导航包的启动文件
新建myrobot_world.launch启动文件,内容如下:
<launch>
<!-- these are the arguments you can pass this launch file, for example paused:=true -->
<arg name="paused" default="true"/>
<arg name="use_sim_time" default="true"/>
<arg name="gui" default="true"/>
<arg name="headless" default="false"/>
<arg name="debug" default="false"/>
<remap from="robot/laser/scan" to="/scan"/>
<include file="$(find gazebo_ros)/launch/empty_world.launch">
<arg name="world_name" value="$(find nav_sim)/urdf/wall.world"/>
<arg name="use_sim_time" value="$(arg use_sim_time)"/>
<arg name="debug" value="$(arg debug)" />
<arg name="gui" value="$(arg gui)" />
</include>
<!-- Load the URDF into the ROS Parameter Server -->
<arg name="model" default="$(find nav_sim)/urdf/myrobot.xacro" />
<param name="robot_description" command="$(find xacro)/xacro.py $(arg model)" />
<!-- Run a python script to send a service call the gazebo_ros to spawn a URDF robot -->
<node name="urdf_spawner" pkg="gazebo_ros" type="spawn_model" respawn="false" output="screen"
args="-urdf -model robot -param robot_description -z 0.05"/>
<node name="rviz" pkg="rviz" type="rviz" args="-d $(find nav_sim)/urdf/navigation.rviz"/>
<node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" />
<node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher"/>
</launch>
新建move_base.launch启动文件,内容如下:
<?xml version="1.0"?>
<launch>
<!-- Run the map server -->
<node name="map_server" pkg="map_server" type="map_server" args="$(find nav_sim)/maps/map.yaml" output="screen"/>
<include file="$(find amcl)/examples/amcl_diff.launch" >
</include>
<node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen">
<param name="controller_frequency" value="10.0"/>
<param name="controller_patiente" value="15.0"/>
<rosparam file="$(find nav_sim)/launch/costmap_common_params.yaml" command="load" ns="global_costmap" />
<rosparam file="$(find nav_sim)/launch/costmap_common_params.yaml" command="load" ns="local_costmap" />
<rosparam file="$(find nav_sim)/launch/local_costmap_params.yaml" command="load" />
<rosparam file="$(find nav_sim)/launch/global_costmap_params.yaml" command="load" />
<rosparam file="$(find nav_sim)/launch/base_local_planner_params.yaml" command="load" />
</node>
</launch>
使用如下命令依次执行启动文件:
roslaunch nav_sim myrobot_world.launch
roslaunch nav_sim move_base.launch
五、导航仿真
单击2D Nav Goal按钮,设置导航目标,可以观察到路径规划,四轮小车向目标点移动,如图:
六、总结
再次声明,本篇源码非原创,作者链接见前言,四轮小车成功移动到目标点。
版权声明:本文为u011832219原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。