app拉新推广平台渠道,手机优化大师哪个好,开源免费企业网站系统,深圳专业网站建设技术文章目录 前言一、Gzazebo中加载多台Turtlebot3机器人二、RVIZ中加载多个Turtlebot3机器人三.多机器人编队导航总结 前言
前面已经实现了在gazebo仿真环境中机器人一字型编队、三角形编队、N字型编队等仿真#xff0c;接下来考虑多机器人编队在编队行进过程中的避障问题… 文章目录 前言一、Gzazebo中加载多台Turtlebot3机器人二、RVIZ中加载多个Turtlebot3机器人三.多机器人编队导航总结 前言
前面已经实现了在gazebo仿真环境中机器人一字型编队、三角形编队、N字型编队等仿真接下来考虑多机器人编队在编队行进过程中的避障问题通过在RVIZ中加载多个机器人使他们能分别进行全局和局部路径规划来进行避障。 一、Gzazebo中加载多台Turtlebot3机器人
在前面的文章中也提到过在gazebo仿真环境中加载多个机器人主要是修改启动gazebo仿真环境的launch文件。 原Turtlebot3 launch文件
launchenv nameGAZEBO_RESOURCE_PATH value$(find turtlebot3_gazebo)/models/turtlebot3_autorace/ground_picture /arg namex_pos default0.245/arg namey_pos default-1.787/arg namez_pos default0/ include file$(find gazebo_ros)/launch/empty_world.launcharg nameworld_name value$(find turtlebot3_gazebo)/worlds/turtlebot3_autorace.world /arg namepaused valuefalse/arg nameuse_sim_time valuetrue/arg namegui valuetrue/arg nameheadless valuefalse/arg namedebug valuefalse//include param namerobot_description command$(find xacro)/xacro --inorder $(find turtlebot3_description)/urdf/turtlebot3_burger_for_autorace.urdf.xacro /node pkggazebo_ros typespawn_model namespawn_urdf args-urdf -model turtlebot3_burger -x $(arg x_pos) -y $(arg y_pos) -z $(arg z_pos) -param robot_description //launch
添加多台机器人的launch文件
?xml version1.0?
launcharg namemodel default$(env TURTLEBOT3_MODEL) docmodel type [burger, waffle, waffle_pi]/arg namefirst_tb3 defaulttb3_0/arg namesecond_tb3 defaulttb3_1/arg namethird_tb3 defaulttb3_2/arg namefirst_tb3_x_pos default 0.0/arg namefirst_tb3_y_pos default 0.0/arg namefirst_tb3_z_pos default 0.0/arg namefirst_tb3_yaw default 0.0/arg namesecond_tb3_x_pos default -1.0/arg namesecond_tb3_y_pos default 0.0/arg namesecond_tb3_z_pos default 0.0/arg namesecond_tb3_yaw default 0.0/arg namethird_tb3_x_pos default -2.0/arg namethird_tb3_y_pos default 0.0/arg namethird_tb3_z_pos default 0.0/arg namethird_tb3_yaw default 0.0/include file$(find gazebo_ros)/launch/empty_world.launcharg nameworld_name value$(find turtlebot3_gazebo)/worlds/cloister.world/arg namepaused valuefalse/arg nameuse_sim_time valuetrue/arg namegui valuetrue/arg nameheadless valuefalse/arg namedebug valuefalse//include group ns $(arg first_tb3)param namerobot_description command$(find xacro)/xacro --inorder $(find turtlebot3_description)/urdf/turtlebot3_$(arg model).urdf.xacro /node pkgrobot_state_publisher typerobot_state_publisher namerobot_state_publisher outputscreenparam namepublish_frequency typedouble value50.0 /param nametf_prefix value$(arg first_tb3) //nodenode namespawn_urdf pkggazebo_ros typespawn_model args-urdf -model $(arg first_tb3) -x $(arg first_tb3_x_pos) -y $(arg first_tb3_y_pos) -z $(arg first_tb3_z_pos) -Y $(arg first_tb3_yaw) -param robot_description //groupgroup ns $(arg second_tb3)param namerobot_description command$(find xacro)/xacro --inorder $(find turtlebot3_description)/urdf/turtlebot3_$(arg model).urdf.xacro /node pkgrobot_state_publisher typerobot_state_publisher namerobot_state_publisher outputscreenparam namepublish_frequency typedouble value50.0 /param nametf_prefix value$(arg second_tb3) //nodenode namespawn_urdf pkggazebo_ros typespawn_model args-urdf -model $(arg second_tb3) -x $(arg second_tb3_x_pos) -y $(arg second_tb3_y_pos) -z $(arg second_tb3_z_pos) -Y $(arg second_tb3_yaw) -param robot_description //groupgroup ns $(arg third_tb3)param namerobot_description command$(find xacro)/xacro --inorder $(find turtlebot3_description)/urdf/turtlebot3_$(arg model).urdf.xacro /node pkgrobot_state_publisher typerobot_state_publisher namerobot_state_publisher outputscreenparam namepublish_frequency typedouble value50.0 /param nametf_prefix value$(arg third_tb3) //nodenode namespawn_urdf pkggazebo_ros typespawn_model args-urdf -model $(arg third_tb3) -x $(arg third_tb3_x_pos) -y $(arg third_tb3_y_pos) -z $(arg third_tb3_z_pos) -Y $(arg third_tb3_yaw) -param robot_description //group/launch对比发现修改后的launch文件增加了三个tb3的ns属性并为其设置了初始位姿设置了ns属性后才使得每个仿真小车发布带有对应属性的节点名称例如/tb3_0/odom、/tb3_0/base_link、/tb3_1/odom、/tb3_1/base_link。这样能防止TF树错乱而导致的运行出错。
二、RVIZ中加载多个Turtlebot3机器人
与Gazebo中加载多个Turtlebot3机器人相比RVIZ需要修改的内容多了些。首先修改turtlebot3_navigation.launch 原文件
launch!-- Arguments --arg namemodel default$(env TURTLEBOT3_MODEL) docmodel type [burger, waffle, waffle_pi]/arg namemap_file default$(find turtlebot3_navigation)/maps/map.yaml/arg nameopen_rviz defaulttrue/arg namemove_forward_only defaultfalse/!-- Turtlebot3 --include file$(find turtlebot3_bringup)/launch/turtlebot3_remote.launcharg namemodel value$(arg model) //include!-- Map server --node pkgmap_server namemap_server typemap_server args$(arg map_file)/!-- AMCL --include file$(find turtlebot3_navigation)/launch/amcl.launch/!-- move_base --include file$(find turtlebot3_navigation)/launch/move_base.launcharg namemodel value$(arg model) /arg namemove_forward_only value$(arg move_forward_only)//include!-- rviz --group if$(arg open_rviz) node pkgrviz typerviz namerviz requiredtrueargs-d $(find turtlebot3_navigation)/rviz/turtlebot3_navigation.rviz//group
/launch修改后
launch!-- Arguments --arg namemodel default$(env TURTLEBOT3_MODEL) docmodel type [burger, waffle, waffle_pi]/arg nameopen_rviz defaulttrue/arg namemove_forward_only defaultfalse/arg namefirst_tb3 defaulttb3_0/arg namesecond_tb3 defaulttb3_1/arg namethird_tb3 defaulttb3_2/!-- Map server --arg namemap_file default$(find turtlebot3_navigation)/maps/cloister_gmapping.yaml/node pkgmap_server namemap_server typemap_server args$(arg map_file)/group ns $(arg first_tb3)!-- Map server --node pkgmap_server namemap_server typemap_server args$(arg map_file)/!-- Turtlebot3 --include file$(find turtlebot3_bringup)/launch/turtlebot3_remote.launcharg namemodel value$(arg model) /arg namemulti_robot_name value$(arg first_tb3) //includearg namefirst_tb3_x_pos default0.0/arg namefirst_tb3_y_pos default0.0/arg namefirst_tb3_z_pos default0.0/!-- AMCL --include file$(find turtlebot3_navigation)/launch/multi_amcl.launcharg nameglobal_frame_id valuemap/arg nameodom_frame_id value$(arg first_tb3)/odom/arg namebase_frame_id value$(arg first_tb3)/base_footprint/ arg nameinitial_pose_x value$(arg first_tb3_x_pos)/arg nameinitial_pose_y value$(arg first_tb3_y_pos)/arg nameinitial_pose_a value$(arg first_tb3_z_pos)//include!-- move_base --include file$(find turtlebot3_navigation)/launch/multi_move_base.launcharg nameglobal_frame_id valuemap/arg nameodom_frame_id value$(arg first_tb3)/odom/arg namebase_frame_id value$(arg first_tb3)/base_footprint/arg nameodom_topic value/$(arg first_tb3)/odom /arg namelaser_topic value/$(arg first_tb3)/scan /arg namecmd_vel_topic value/$(arg first_tb3)/cmd_vel /arg namemodel value$(arg model) /arg namemove_forward_only value$(arg move_forward_only)//include
/groupgroup ns $(arg second_tb3)!-- Map server --node pkgmap_server namemap_server typemap_server args$(arg map_file)/!-- Turtlebot3 --include file$(find turtlebot3_bringup)/launch/turtlebot3_remote.launcharg namemodel value$(arg model) /arg namemulti_robot_name value$(arg second_tb3) //includearg namesecond_tb3_x_pos default-1.0/arg namesecond_tb3_y_pos default0.0/arg namesecond_tb3_z_pos default0.0/!-- AMCL --include file$(find turtlebot3_navigation)/launch/multi_amcl.launcharg nameglobal_frame_id valuemap/arg nameodom_frame_id value$(arg second_tb3)/odom/arg namebase_frame_id value$(arg second_tb3)/base_footprint/ arg nameinitial_pose_x value$(arg second_tb3_x_pos)/arg nameinitial_pose_y value$(arg second_tb3_y_pos)/arg nameinitial_pose_a value$(arg second_tb3_z_pos)//include!-- move_base --include file$(find turtlebot3_navigation)/launch/multi_move_base.launcharg nameglobal_frame_id valuemap/arg nameodom_frame_id value$(arg second_tb3)/odom/arg namebase_frame_id value$(arg second_tb3)/base_footprint/arg nameodom_topic value/$(arg second_tb3)/odom /arg namelaser_topic value/$(arg second_tb3)/scan /arg namecmd_vel_topic value/$(arg second_tb3)/cmd_vel /arg namemodel value$(arg model) /arg namemove_forward_only value$(arg move_forward_only)//include
/groupgroup ns $(arg third_tb3)!-- Map server --node pkgmap_server namemap_server typemap_server args$(arg map_file)/!-- Turtlebot3 --include file$(find turtlebot3_bringup)/launch/turtlebot3_remote.launcharg namemodel value$(arg model) /arg namemulti_robot_name value$(arg third_tb3) //includearg namethird_tb3_x_pos default-2.0/arg namethird_tb3_y_pos default0.0/arg namethird_tb3_z_pos default0.0/!-- AMCL --include file$(find turtlebot3_navigation)/launch/multi_amcl.launcharg nameglobal_frame_id valuemap/arg nameodom_frame_id value$(arg third_tb3)/odom/arg namebase_frame_id value$(arg third_tb3)/base_footprint/ arg nameinitial_pose_x value$(arg third_tb3_x_pos)/arg nameinitial_pose_y value$(arg third_tb3_y_pos)/arg nameinitial_pose_a value$(arg third_tb3_z_pos)//include!-- move_base --include file$(find turtlebot3_navigation)/launch/multi_move_base.launcharg nameglobal_frame_id valuemap/arg nameodom_frame_id value$(arg third_tb3)/odom/arg namebase_frame_id value$(arg third_tb3)/base_footprint/arg nameodom_topic value/$(arg third_tb3)/odom /arg namelaser_topic value/$(arg third_tb3)/scan /arg namecmd_vel_topic value/$(arg third_tb3)/cmd_vel /arg namemodel value$(arg model) /arg namemove_forward_only value$(arg move_forward_only)//include
/group!-- rviz --group if$(arg open_rviz) node pkgrviz typerviz namerviz requiredtrueargs-d $(find turtlebot3_navigation)/rviz/turtlebot3_navWjx.rviz//group
/launchturtlebot3_navigation.launch中引用的move_base.launch和amcl.launch文件也需要修改 move_base.launch 原文件
launch!-- Arguments --arg namemodel default$(env TURTLEBOT3_MODEL) docmodel type [burger, waffle, waffle_pi]/arg namecmd_vel_topic default/cmd_vel /arg nameodom_topic defaultodom /arg namemove_forward_only defaultfalse/!-- move_base --node pkgmove_base typemove_base respawnfalse namemove_base outputscreenparam namebase_local_planner valuedwa_local_planner/DWAPlannerROS /rosparam file$(find turtlebot3_navigation)/param/costmap_common_params_$(arg model).yaml commandload nsglobal_costmap /rosparam file$(find turtlebot3_navigation)/param/costmap_common_params_$(arg model).yaml commandload nslocal_costmap /rosparam file$(find turtlebot3_navigation)/param/local_costmap_params.yaml commandload /rosparam file$(find turtlebot3_navigation)/param/global_costmap_params.yaml commandload /rosparam file$(find turtlebot3_navigation)/param/move_base_params.yaml commandload /rosparam file$(find turtlebot3_navigation)/param/dwa_local_planner_params_$(arg model).yaml commandload /remap fromcmd_vel to$(arg cmd_vel_topic)/remap fromodom to$(arg odom_topic)/param nameDWAPlannerROS/min_vel_x value0.0 if$(arg move_forward_only) //node
/launch修改后multi_move_base.launch
launch!-- Arguments --arg namemodel default$(env TURTLEBOT3_MODEL) docmodel type [burger, waffle, waffle_pi]/arg nameodom_frame_id defaultodom/arg namebase_frame_id defaultbase_footprint/arg nameglobal_frame_id defaultmap/arg namecmd_vel_topic default/cmd_vel /arg nameodom_topic defaultodom /arg namelaser_topic defaultscan /arg namemove_forward_only defaultfalse/!-- move_base --node pkgmove_base typemove_base respawnfalse namemove_base outputscreenparam namebase_global_planner valueglobal_planner/GlobalPlanner/param namebase_local_planner valuedwa_local_planner/DWAPlannerROS/rosparam file$(find turtlebot3_navigation)/param/costmap_common_params_$(arg model).yaml commandload nsglobal_costmap /rosparam file$(find turtlebot3_navigation)/param/costmap_common_params_$(arg model).yaml commandload nslocal_costmap /rosparam file$(find turtlebot3_navigation)/param/local_costmap_params.yaml commandload /rosparam file$(find turtlebot3_navigation)/param/global_costmap_params.yaml commandload /rosparam file$(find turtlebot3_navigation)/param/move_base_params.yaml commandload /rosparam file$(find turtlebot3_navigation)/param/dwa_local_planner_params_$(arg model).yaml commandload /!-- reset frame_id parameters using user input data --param nameglobal_costmap/global_frame value$(arg global_frame_id)/param nameglobal_costmap/robot_base_frame value$(arg base_frame_id)/param namelocal_costmap/global_frame value$(arg odom_frame_id)/param namelocal_costmap/robot_base_frame value$(arg base_frame_id)/param nameglobal_costmap/obstacle_layer/scan/topic value$(arg laser_topic)/param namelocal_costmap/obstacle_layer/scan/topic value$(arg laser_topic)/remap fromcmd_vel to$(arg cmd_vel_topic)/remap fromodom to$(arg odom_topic)/remap fromscan to$(arg laser_topic)/param nameDWAPlanner/min_vel_x value0.0 if$(arg move_forward_only) //node
/launchamcl.launch 原文件
launch!-- Arguments --arg namescan_topic defaultscan/arg nameinitial_pose_x default0.0/arg nameinitial_pose_y default0.0/arg nameinitial_pose_a default0.0/!-- AMCL --node pkgamcl typeamcl nameamclparam namemin_particles value500/param namemax_particles value3000/param namekld_err value0.02/param nameupdate_min_d value0.20/param nameupdate_min_a value0.20/param nameresample_interval value1/param nametransform_tolerance value0.5/param namerecovery_alpha_slow value0.00/param namerecovery_alpha_fast value0.00/param nameinitial_pose_x value$(arg initial_pose_x)/param nameinitial_pose_y value$(arg initial_pose_y)/param nameinitial_pose_a value$(arg initial_pose_a)/param namegui_publish_rate value50.0/remap fromscan to$(arg scan_topic)/param namelaser_max_range value3.5/param namelaser_max_beams value180/param namelaser_z_hit value0.5/param namelaser_z_short value0.05/param namelaser_z_max value0.05/param namelaser_z_rand value0.5/param namelaser_sigma_hit value0.2/param namelaser_lambda_short value0.1/param namelaser_likelihood_max_dist value2.0/param namelaser_model_type valuelikelihood_field/param nameodom_model_type valuediff/param nameodom_alpha1 value0.1/param nameodom_alpha2 value0.1/param nameodom_alpha3 value0.1/param nameodom_alpha4 value0.1/param nameodom_frame_id valueodom/param namebase_frame_id valuebase_footprint//node
/launch修改后multi_amcl.launch读入数据
launch!-- Arguments --arg nameuse_map_topic defaulttrue/arg namescan_topic defaultscan/arg nameinitial_pose_x default0.0/arg nameinitial_pose_y default0.0/arg nameinitial_pose_a default0.0/arg nameodom_frame_id defaultodom/arg namebase_frame_id defaultbase_footprint/arg nameglobal_frame_id defaultmap/!-- AMCL --node pkgamcl typeamcl nameamclparam nameuse_map_topic value$(arg use_map_topic)/param namemin_particles value500/param namemax_particles value3000/param namekld_err value0.02/param nameupdate_min_d value0.20/param nameupdate_min_a value0.20/param nameresample_interval value1/param nametransform_tolerance value0.5/param namerecovery_alpha_slow value0.00/param namerecovery_alpha_fast value0.00/param nameinitial_pose_x value$(arg initial_pose_x)/param nameinitial_pose_y value$(arg initial_pose_y)/param nameinitial_pose_a value$(arg initial_pose_a)/param namegui_publish_rate value50.0/remap fromscan to$(arg scan_topic)/param namelaser_max_range value3.5/param namelaser_max_beams value180/param namelaser_z_hit value0.5/param namelaser_z_short value0.05/param namelaser_z_max value0.05/param namelaser_z_rand value0.5/param namelaser_sigma_hit value0.2/param namelaser_lambda_short value0.1/param namelaser_likelihood_max_dist value2.0/param namelaser_model_type valuelikelihood_field/param nameodom_model_type valuediff/param nameodom_alpha1 value0.1/param nameodom_alpha2 value0.1/param nameodom_alpha3 value0.1/param nameodom_alpha4 value0.1/param nameodom_frame_id value$(arg odom_frame_id)/ param namebase_frame_id value$(arg base_frame_id)/ param nameglobal_frame_id value$(arg global_frame_id)//node
/launch三.多机器人编队导航
多机器人编队的仿真在前面文章中叙述过多机器人三角形编队的实现编队的程序不需要修改可以直接运行。 启动gazebo仿真环境(launch 自己的文件名)
roslaunch turtlebot3_gazebo multi3_turtlebot3.launch启动导航节点RVIZ
roslaunch turtlebot3_navigation turtlebot3_navigation启动编队程序
roslaunch turtlebot3_teams_wang turtlebot3_teams_follow_wang.launch总结
简单总结了Turtlebot3多机器人编队仿真在实现的过程中需要对RVIZ仿真环境进行配置这个花费了我很长时间后面我会专门的写一下主要是添加多个2D nav Goal/2D pose estimate以及导航、laser、全局路径/局部路径话题的订阅。