Quantcast
Channel: ROS Answers: Open Source Q&A Forum - RSS feed
Viewing all 667 articles
Browse latest View live

teb local planner - min obstacle height to put in local cost map

$
0
0
Is there a parameter that lets me specify the min height of the obstacle to put in the teb local planner,like there is with Trajectory planner ROS?

Using the Move_base package with only a local planner

$
0
0
Hi All, I'm currently designing a mobile robot that is required to follow an object within 2 meters. Currently, the mobile robot is able to identify the object, its distance from the object, and its orientation with respect to the object - this is enough information for me to set a navigation goal relative to the mobile robots location. The robot will be following the object into unknown environments, we can assume these environments will not be mapped. For this application I believe it should be satisfactory to use a local planner to reach the short distance goal while avoiding any obstacles along the way. I would like to take advantage of the dwa_local_planner package within the move_base package but I am unsure if move_base can be used without a global planner and without a map. I would appreciate any advice, Thanks for your help!

[move_base] make_plan service is returning an empty path

$
0
0
Hi! I am working on autonomous exploration, and I am using **move_base** package for navigation tasks. I wanted to use *make_plan* service of **move_base** package, but it's returning me an empty path even if the destination is reachable if you send it as a goal. Has anyone faced with the same issue? Here the code which calls *make_plan* service: geometry_msgs::PoseStamped Start; Start.header.seq = 0; Start.header.stamp = Time(0); Start.header.frame_id = "map"; Start.pose.position.x = x1; Start.pose.position.y = y1; Start.pose.position.z = 0.0; Start.pose.orientation.x = 0.0; Start.pose.orientation.y = 0.0; Start.pose.orientation.w = 1.0; geometry_msgs::PoseStamped Goal; Goal.header.seq = 0; Goal.header.stamp = Time(0); Goal.header.frame_id = "map"; Goal.pose.position.x = x2; Goal.pose.position.y = y2; Goal.pose.position.z = 0.0; Goal.pose.orientation.x = 0.0; Goal.pose.orientation.y = 0.0; Goal.pose.orientation.w = 1.0; ServiceClient check_path = nh_.serviceClient("make_plan"); nav_msgs::GetPlan srv; srv.request.start = Start; srv.request.goal = Goal; srv.request.tolerance = 1.5; ROS_INFO("Make plan: %d", (check_path.call(srv) ? 1 : 0)); ROS_INFO("Plan size: %d", srv.response.plan.poses.size()); Here is the code to send *MoveBaseGoal* which works and robot moves to the same destination: move_base_msgs::MoveBaseGoal move_goal; move_goal.target_pose.header.frame_id = "map"; move_goal.target_pose.header.stamp = Time(0); move_goal.target_pose.pose.position.x = x; move_goal.target_pose.pose.position.y = y; move_goal.target_pose.pose.position.z = 0.0; move_goal.target_pose.pose.orientation.x = 0.0; move_goal.target_pose.pose.orientation.y = 0.0; move_goal.target_pose.pose.orientation.w = 1.0; ROS_INFO("Sending goal"); ac_.sendGoal(move_goal, boost::bind(&ExploreAction::doneCb, this, _1, _2));

Move base make plan sending incomplete paths over rosbridge

$
0
0
I am using the move_base/make_path to send a path over to a websocket (Rosbridge) to a different device. Unfortunately, I am getting an inomplete Yaml packet. My max packet size is set to infinite for both the linux and the windows machine. Can I make the points in between the path larger? And why is my path not sending all the way. (Timing issue maybe) Any help would be great! Here is an example of what I am getting back. Notice the end just cuts off. Got a message {"values": {"plan": {"header": {"stamp": {"secs": 0, "nsecs": 0}, "frame_id": "", "seq": 0}, "poses": [{"header": {"stamp": {"secs": 1498427833, "nsecs": 23645176}, "frame_id": "map", "seq": 0}, "pose": {"position": {"y": 0.0, "x": 0.07999999821186066, "z": 0.0}, "orientation": {"y": 0.0, "x": 0.0, "z": 0.0, "w": 1.0}}}, {"header": {"stamp": {"secs": 1498427833, "nsecs": 23645176}, "frame_id": "map", "seq": 0}, "pose": {"position": {"y": 0.01652093373564778, "x": 0.06481661651693393, "z": 0.0}, "orientation": {"y": 0.0, "x": 0.0, "z": 0.0, "w": 1.0}}}, {"header": {"stamp": {"secs": 1498427833, "nsecs": 23645176}, "frame_id": "map", "seq": 0}, "pose": {"position": {"y": 0.02430633252174408, "x": 0.05854066717906292, "z": 0.0}, "orientation": {"y": 0.0, "x": 0.0, "z": 0.0, "w": 1.0}}}, {"header": {"stamp": {"secs": 1498427833, "nsecs": 23645176}, "frame_id": "map", "seq": 0}, "pose": {"position": {"y": 0.031909136058930976, "x": 0.052044714718057605, "z": 0.0}, "orientation": {"y": 0.0, "x": 0.0, "z": 0.0, "w": 1.0}}}, {"header": {"stamp": {"secs": 1498427833, "nsecs": 23645176}, "frame_id": "map", "seq": 0}, "pose": {"position": {"y": 0.04099274543689013, "x": 0.047862843397345145, "z": 0.0}, "orientation": {"y": 0.0, "x": 0.0, "z": 0.0, "w": 1.0}}}, {"header": {"stamp": {"secs": 1498427833, "nsecs": 23645176}, "frame_id": "map", "seq": 0}, "pose": {"position": {"y": 0.05019877798410999, "x": 0.043957852334726155, "z": 0.0}, "orientation": {"y": 0.0, "x": 0.0, "z": 0.0, "w": 1.0}}}, {"header": {"stamp": {"secs": 1498427833, "nsecs": 23645176}, "frame_id": "map", "seq": 0}, "pose": {"position": {"y": 0.060104769316954076, "x": 0.042589892389106154, "z": 0.0}, "orientation": {"y": 0.0, "x": 0.0, "z": 0.0, "w": 1.0}}}, {"header": {"stamp": {"secs": 1498427833, "nsecs": 23645176}, "frame_id": "map", "seq": 0}, "pose": {"position": {"y": 0.07004680476978109, "x": 0.0415147438306791, "z": 0.0}, "orientation": {"y": 0.0, "x": 0.0, "z": 0.0, "w": 1.0}}}, {"header": {"stamp": {"secs": 1498427833, "nsecs": 23645176}, "frame_id": "map", "seq": 0}, "pose": {"position": {"y": 0.08001498997177947, "x": 0.04071773438041504, "z": 0.0}, "orientation": {"y": 0.0, "x": 0.0, "z": 0.0, "w": 1.0}}}, {"header": {"stamp": {"secs": 1498427833, "nsecs": 23645176}, "frame_id": "map", "seq": 0}, "pose": {"position": {"y": 0.09000228680665145, "x": 0.04021376043080327, "z": 0.0}, "orientation": {"y": 0.0, "x": 0.0, "z": 0.0, "w": 1.0}}}, {"header": {"stamp": {"secs": 1498427833, "nsecs": 23645176}, "frame_id": "map", "seq": 0}, "pose": {"position": {"y": 0.09999999776482582, "x": 0.03999999910593033, "z": 0.0}, "orientation": {"y": 0.0, "x": 0.0, "z": 0.0, "w": 1.0}}}, {"header": {"stamp": {"secs": 1498427833, "nsecs": 23645176}, "frame_id": "map", "seq": 0}, "pose": {"position": {"y": 0.11999999731779099, "x": 0.019999999552965164, "z": 0.0}, "orientation": {"y": 0.0, "x": 0.0, "z": 0.0, "w": 1.0}}}, {"header": {"stamp": {"secs": 1498427833, "nsecs": 23645176}, "frame_id": "map", "seq": 0}, "pose": {"position": {"y": 0.13999999687075615, "x": 0.019999999552965164, "z": 0.0}, "orientation": {"y": 0.0, "x": 0.0, "z": 0.0, "w": 1.0}}}, {"header": {"stamp": {"secs": 1498427833, "nsecs": 23645176}, "frame_id": "map", "seq": 0}, "pose": {"position": {"y": 0.1599999964237213, "x": 0.019999999552965164, "z": 0.0}, "orientation": {"y": 0.0, "x": 0.0, "z": 0.0, "w": 1.0}}}, {"header": {"stamp": {"secs": 1498427833, "nsecs": 23645176}, "frame_id": "map", "seq": 0}, "pose": {"position": {"y": 0.17999999597668648, "x": 0.019999999552965164, "z": 0.0}, "orientation": {"y": 0.0, "x": 0.0, "z": 0.0, "w": 1.0}}}, {"header": {"stamp": {"secs": 1498427833, "nsecs": 23645176}, "frame_id": "map", "seq": 0}, "pose": {"position": {"y": 0.19999999552965164, "x": 0.019999999552965164, "z": 0.0}, "orientation": {"y": 0.0, "x": 0.0, "z": 0.0, "w": 1.0}}}, {"header": {"stamp": {"secs": 1498427833, "nsecs": 23645176}, "frame_id": "map", "seq": 0}, "pose": {"position": {"y": 0.2199999950826168, "x": 0.019999999552965164, "z": 0.0}, "orientation": {"y": 0.0, "x": 0 Any help would be great! Thanks BT

Using a static costmap for local navigation

$
0
0
I want to use a static map provided by `map_server` to populate the obstacles used for both global and local navigation by `move_base` (Assuming a completely static environment, no dynamic obstacles). Using the exact same parameters for both the local and the global map produces different results. The global costmap behaves as expected, being populated with inflated obstacles, while the local costmap remains empty. As such global navigation plans look excellent while execution involves locally optimizing the route through walls. local_costmap: # And also global_costmap robot_radius: 0.2 inflation_radius: 0.2 global_frame: /odom_fused robot_base_frame: base_link update_frequency: 10.0 static_map: true

How to run navigation stack on a tracked vehicle?

$
0
0
Hi! I have a tracked robot which I would like to turn into an autonomous one I'm thinking about adding GPS waypoint navigation. The first step for that I think is going to be implementing navigation stack. I'm fairly new to ROS, so I would appreciate each and any suggestion on what to use and how to use it. I have IMU and GPS connected to the robot, and willing to buy additional sensors as well, if needed

Based on rplidar using hector_mapping and move_base to work together on the turtlebot

$
0
0
Hi , all : I want to use hector_mapping and move_base to work together on the turtlebot which has a rplidar,but when I shart up move_base to get a path planning, I find move_base continuously print the alarm information, ---------- [ WARN] [1499649044.602318070, 109.050000000]: Control loop missed its desired rate of 3.0000Hz... the loop actually took 3.1000 seconds [ WARN] [1499649044.602556838, 109.050000000]: Map update loop missed its desired rate of 3.0000Hz... the loop actually took 2.7667 seconds ---------- which lead to the robot path planning is not smooth. I already reduce update_frequency, publish_frequency of global_planner and local_planner, move_base still continuously print the alarm information. ---------- PS: when I only use hector_mapping build a map, everything is ok. who can tell me why move_base print this worn and how to solve the problem ? Thanks.

Checking if a custom global planner is loaded

$
0
0
I used this [this tutorial](http://wiki.ros.org/navigation/Tutorials/Writing%20A%20Global%20Path%20Planner%20As%20Plugin%20in%20ROS) in order to create my own global planner. However, when I added some ROS_INFO in order to show me if it is loaded or not, I receive no output. So, my question is how can I know if move_base is actually using my custom global planning? global_planner.cpp: #include #include "global_planner.h" #include "lab37_sdc_navigation/GetRoute.h" //register this planner as a BaseGlobalPlanner plugin PLUGINLIB_EXPORT_CLASS(global_planner::GlobalPlanner, nav_core::BaseGlobalPlanner) using namespace std; //Default Constructor namespace global_planner { GlobalPlanner::GlobalPlanner (){ } GlobalPlanner::GlobalPlanner(std::string name, costmap_2d::Costmap2DROS* costmap_ros){ initialize(name, costmap_ros); } void GlobalPlanner::initialize(std::string name, costmap_2d::Costmap2DROS* costmap_ros){ ROS_INFO("Global planner has been initialized"); ros::NodeHandle private_nh("~/" + name); initialized_ = true; } bool GlobalPlanner::makePlan(const geometry_msgs::PoseStamped& start, const geometry_msgs::PoseStamped& goal, std::vector& plan ){ if(!initialized_){ ROS_ERROR("The planner has not been initialized, please call initialize() to use the planner"); return false; } plan.push_back(start); for (int i=0; i<20; i++){ geometry_msgs::PoseStamped new_goal = goal; tf::Quaternion goal_quat = tf::createQuaternionFromYaw(1.54); new_goal.pose.position.x = -2.5+(0.05*i); new_goal.pose.position.y = -3.5+(0.05*i); new_goal.pose.orientation.x = goal_quat.x(); new_goal.pose.orientation.y = goal_quat.y(); new_goal.pose.orientation.z = goal_quat.z(); new_goal.pose.orientation.w = goal_quat.w(); plan.push_back(new_goal); } plan.push_back(goal); return true; } }; test_move_base.launch: The output I get when i send the goal to move_base: [ INFO] [1499686041.675973637]: Loading from pre-hydro parameter style [ INFO] [1499686041.697633251]: Using plugin "obstacle_layer" [ INFO] [1499686041.759515233]: Subscribed to Topics: [ INFO] [1499686041.767964584]: Using plugin "inflation_layer" [ INFO] [1499686041.836836437]: Loading from pre-hydro parameter style [ INFO] [1499686041.843269364]: Using plugin "obstacle_layer" [ INFO] [1499686041.874099766]: Subscribed to Topics: [ INFO] [1499686041.882243033]: Using plugin "inflation_layer" [ INFO] [1499686041.939767806]: Created local_planner simple_local_planner/SimpleLocalPlanner [ INFO] [1499686042.182221474]: Recovery behavior will clear layer obstacles [ INFO] [1499686042.218764040]: Recovery behavior will clear layer obstacles

How to switch the planner of move_base during the navigation

$
0
0
Hi, all, We want to implement a function in move_base to switch the planners as this [question mentioned](http://answers.ros.org/question/9888/switching-global-planner/). To do this ,I have studied the source code of move base, specifically the [constructor](https://github.com/ros-planning/navigation/blob/indigo-devel/move_base/src/move_base.cpp#L48) of movebase and the [reconfigureCB member method](https://github.com/ros-planning/navigation/blob/indigo-devel/move_base/src/move_base.cpp#L204), because the settings of planner is done in these two member methods. By imitating the constructor of movebase, I added a member method into the movebase as follows: bool MoveBase::changepl( asr_navfn::PlannerSwitcher::Request &req, asr_navfn::PlannerSwitcher::Response &res ){if(req.changePlanner.compare("switch on") == 0) { //Need to clear? ROS_INFO("Hello, switch on, going to be change planner"); as_->shutdown(); planner_plan_->clear(); latest_plan_->clear(); controller_plan_->clear(); std::string global_planner, local_planner; if(req.globalName.empty()) global_planner= "asr_navfn/NavfnROS"; else global_planner= req.globalName; if(req.localName.empty()) local_planner= "dwa_local_planner/DWAPlannerROS"; else local_planner= req.globalName; planner_costmap_ros_->pause(); try { //bgp_loader_.loadLibraryForClass(); planner_ = bgp_loader_.createInstance(global_planner); planner_->initialize(bgp_loader_.getName(global_planner), planner_costmap_ros_); } catch (const pluginlib::PluginlibException& ex) { ROS_FATAL("Failed to create the %s planner, are you sure it is properly registered and that the containing library is built? Exception: %s", global_planner.c_str(), ex.what()); exit(1); } controller_costmap_ros_->pause(); //change a local planner try { tc_ = blp_loader_.createInstance(local_planner); ROS_INFO("Created local_planner %s", local_planner.c_str()); tc_->initialize(blp_loader_.getName(local_planner), &tf_, controller_costmap_ros_); tc_->setGlobalCostmap(planner_costmap_ros_); } catch (const pluginlib::PluginlibException& ex) { ROS_FATAL("Failed to create the %s planner, are you sure it is properly registered and that the containing library is built? Exception: %s", local_planner.c_str(), ex.what()); exit(1); } planner_costmap_ros_->start(); controller_costmap_ros_->start(); if(shutdown_costmaps_){ ROS_DEBUG_NAMED("move_base","Stopping costmaps initially"); planner_costmap_ros_->stop(); controller_costmap_ros_->stop(); } //initially, we'll need to make a plan state_ = PLANNING; //we'll start executing recovery behaviors at the beginning of our list recovery_index_ = 0; as_->start(); res.changeResult=true; return true; } else if(req.changePlanner.compare("switch off") == 0) { ROS_INFO("Hello, switch off, going to be change planner"); as_->shutdown(); planner_plan_->clear(); latest_plan_->clear(); controller_plan_->clear(); std::string global_planner, local_planner; global_planner= "linear_global_planner/LinearGlobalPlanner"; local_planner= "ftc_local_planner/FTCPlanner"; planner_costmap_ros_->pause(); try { //bgp_loader_.loadLibraryForClass(); planner_ = bgp_loader_.createInstance(global_planner); planner_->initialize(bgp_loader_.getName(global_planner), planner_costmap_ros_); } catch (const pluginlib::PluginlibException& ex) { ROS_FATAL("Failed to create the %s planner, are you sure it is properly registered and that the containing library is built? Exception: %s", global_planner.c_str(), ex.what()); exit(1); } controller_costmap_ros_->pause(); //create a local planner try { tc_ = blp_loader_.createInstance(local_planner); ROS_INFO("Created local_planner %s", local_planner.c_str()); tc_->initialize(blp_loader_.getName(local_planner), &tf_, controller_costmap_ros_); tc_->setGlobalCostmap(planner_costmap_ros_); } catch (const pluginlib::PluginlibException& ex) { ROS_FATAL("Failed to create the %s planner, are you sure it is properly registered and that the containing library is built? Exception: %s", local_planner.c_str(), ex.what()); exit(1); } planner_costmap_ros_->start(); controller_costmap_ros_->start(); if(shutdown_costmaps_){ ROS_DEBUG_NAMED("move_base","Stopping costmaps initially"); planner_costmap_ros_->stop(); controller_costmap_ros_->stop(); } //initially, we'll need to make a plan state_ = PLANNING; //we'll start executing recovery behaviors at the beginning of our list recovery_index_ = 0; as_->start(); res.changeResult=true; return true; } else { ROS_INFO("Hello, return false, didn't change planner"); res.changeResult= false; return false; }} The above memeber method is a callback funtion of a rosservice. There is a script to call the service and switch the planner. The default global planner is "linear_global_planner/LinearGlobalPlanner" which has been implemented and verified by ourselves. The default local planner is "ftc_local_planner/FTCPlanner". When calling the service, the expected results is the global planner is switched to "asr_navfn/NavfnROS", and the local planner is switchced to "dwa_local_planner/DWAPlannerROS". However, in the experiments, the following error is output in the terimnal: [FATAL] [1499686752.366971926, 1097.860000000]: Failed to create the navfn/NavfnROS planner, are you sure it is properly registered and that the containing library is built? Exception: According to the loaded plugin descriptions the class navfn/NavfnROS with base class type nav_core::BaseLocalPlanner does not exist. Declared types are base_local_planner/TrajectoryPlannerROS dwa_local_planner/DWAPlannerROS ftc_local_planner/FTCPlanner move_base: /usr/include/boost/thread/pthread/recursive_mutex.hpp:101: boost::recursive_mutex::~recursive_mutex(): Assertion `!pthread_mutex_destroy(&m)' failed. Can anyone give me some valuable advices? Thank you very much!

How to tune move_base local planners for frequent goal updates

$
0
0
I am experimenting with a robot which is supposed to follow a beacon outside. The waypoints are sent at 1Hz (I could go faster) and are within 3 to 10 meters of the robot. I tried using move_base with the built-in planners but had unsatisfactory results. * DWA planner's motion was good but it made the robot pause at every goal update making for unsmooth motion * TrajectoryPlannerRos starts oscillating on straightaways, that type of motion isn't acceptable * TebLocalPlanner was a mix of the two, but it did a lot of spinning in place and eventually would cause the map update loop miss its target update rate I tried to play with oscillation reset flag and other parameters but still did not achieve good results and to be honest, I'm not really sure how most of these work. I am starting to think that these planners weren't meant to be used for what I'm using them for. Is there a better planner for me to use such that I can update it frequently yet still get the benefit of obstacle following? If not, are there parameters I should be tuning that will make path updates faster and smoother? (local map size/resolution? oscillation flag? others?)

How to switch local planner in move base?

$
0
0
Hi, all. Thanks to @Akif, I have succesfully implemented a package to switch global planner as [this link](http://answers.ros.org/question/265958/how-to-switch-the-planner-of-move_base-during-the-navigation/) advises. Then I also want to implement a package to switch local planner as the way I did in implementing the global planner switcher. Unfortunately, it was not as smooth as the implementation of global planner switcher. After I implemented a supervisory local planner and launched move_base to test it. An error was output: [FATAL] [1499944083.575647406, 2061.510000000]: Failed to create the sup_local_planner/sup_l_planner planner, are you sure it is properly registered and that the containing library is built? Exception: Failed to load library /home/scopus/scopus_planning_ws/devel/lib//libsup_local_planner.so. Make sure that you are calling the PLUGINLIB_EXPORT_CLASS macro in the library code, and that names are consistent between this macro and your XML. Error string: Could not load library (Poco exception = /home/scopus/scopus_planning_ws/devel/lib//libsup_local_planner.so: undefined symbol: _ZN11suplPlanner13sup_l_plannerD1Ev) The content of blp_plugin.xml file is : A implementation of a local planner using DWA and ftc approach based on configuration parameters. Parts of my cpp file is: ...... PLUGINLIB_EXPORT_CLASS(suplPlanner::sup_l_planner, nav_core::BaseLocalPlanner) namespace suplPlanner { sup_l_planner::sup_l_planner(std::string name, tf::TransformListener *tf, costmap_2d::Costmap2DROS *costmap_ros) :dwa_planner_(),ftc_planner_(),initialized_(false) { initialize(name, tf, costmap_ros); } void sup_l_planner::initialize(std::string name, tf::TransformListener *tf, costmap_2d::Costmap2DROS *costmap_ros) { if(!initialized_) { //costmap_ros_ = costmap_ros; pl_type_ = FTC_L; ftc_planner_ = boost::shared_ptr(new ftc_local_planner::FTCPlanner(name, tf, costmap_ros)); dwa_planner_= boost::shared_ptr(new dwa_local_planner::DWAPlannerROS(name,tf, costmap_ros)); ros::NodeHandle private_nh("~/sup_l_Planner"); change_plan_srv_= private_nh.advertiseService("change_plan",&sup_l_planner::changepl, this); initialized_ = true; } else ROS_WARN("This planner has already been initialized, you can't call it twice, doing nothing"); } **You can see that the name of space and the name of class are consistent. So I can't understand why the output error says : "** ........., and that names are consistent between this macro and your XML. Error string: Could not load library ...... Looking forward to anyone give me any advice! Thank you !

teb_local_planner planning low velocity trajectories

$
0
0
Hi, I am trying to use Teb local planner for my robot. But robot is moving very slow (0.1 to 0.23 m/sec) and with jerky movements. Although robot can easily go upto 1m/sec. I have tried changing value of weights but it had no impact. I have tried changing size (width and lenght) of local cost map from 8 to 20m, but it had no impact. I am using latest download for git for Kinetic version. I have also observed that sometime teb plans local trajectorise through obstacles in case of 20m x 20m size local map. ![image description](/upfiles/15002078958950362.png) the configuration file for teb is as follows: teb_autosize: True dt_ref: 0.3 dt_hysteresis: 0.1 global_plan_overwrite_orientation: True allow_init_with_backwards_motion: False max_global_plan_lookahead_dist: 10.0 #increased lookahead from 20 to 30 feasibility_check_no_poses: 10 # Robot max_vel_x: 1.0 max_vel_x_backwards: 0.12 #reduced from 0.2 max_vel_y: 0.0 max_vel_theta: 0.35 acc_lim_x: 0.2 acc_lim_theta: 0.20 min_turning_radius: 0.0 # diff-drive robot (can turn on place!) footprint_model: type: "circular" radius: 0.35 # GoalTolerance xy_goal_tolerance: 1 yaw_goal_tolerance: 1.2 free_goal_vel: true # Obstacles min_obstacle_dist: 0.1 # This value must also include our robot radius, if footprint_model is set to "point". include_costmap_obstacles: True costmap_obstacles_behind_robot_dist: 1.0 obstacle_poses_affected: 10 costmap_converter_plugin: "" costmap_converter_spin_thread: True costmap_converter_rate: 5 # Optimization no_inner_iterations: 5 no_outer_iterations: 4 optimization_activate: True optimization_verbose: False penalty_epsilon: 0.1 weight_max_vel_x: 2 #5 weight_max_vel_theta: 1 weight_acc_lim_x: 1 #1 weight_acc_lim_theta: 1 weight_kinematics_nh: 100 #100 weight_kinematics_forward_drive: 1 #1 weight_kinematics_turning_radius: 1 weight_optimaltime: 1 weight_obstacle: 50 weight_dynamic_obstacle: 10 # not in use yet weight_adapt_factor: 2 costmap_common_params.yaml: #---(in meters)--- robot_radius: 0.35 footprint_padding: 0.05 transform_tolerance: 1.5 map_type: costmap obstacle_layer: enabled: true # expected_update_rate: 0.05 #enough margin for 50Hz laser obstacle_range: 10.0 raytrace_range: 10.0 inflation_radius: 0.25 track_unknown_space: false combination_method: 1 inf_is_valid: true observation_sources: laser_scan_sensor laser_scan_sensor: {data_type: LaserScan, topic: scan, marking: true, clearing: true} inflation_layer: enabled: true cost_scaling_factor: 10.0 # exponential rate at which the obstacle cost drops off (default: 10) inflation_radius: 0.25 # max. distance from an obstacle at which costs are incurred for planning paths. static_layer: enabled: true map_topic: "map" Local costmap params: local_costmap: global_frame: map robot_base_frame: base_link update_frequency: 10.0 publish_frequency: 1.0 static_map: false rolling_window: true width: 8 height: 8 resolution: 0.05 transform_tolerance: 0.5 plugins: # - {name: static_layer, type: "costmap_2d::StaticLayer"} - {name: obstacle_layer, type: "costmap_2d::ObstacleLayer"} - {name: inflation_layer, type: "costmap_2d::InflationLayer"} global costmap params: global_costmap: global_frame: map robot_base_frame: base_link update_frequency: 0.25 publish_frequency: 0.5 static_map: true rolling_window: false height: 50 width: 50 transform_tolerance: 0.5 plugins: - {name: static_layer, type: "costmap_2d::StaticLayer"} - {name: obstacle_layer, type: "costmap_2d::ObstacleLayer"} - {name: inflation_layer, type: "costmap_2d::InflationLayer"} movebase launch file Any ideas on what could go wrong. On move_base console following errors were observed: [ERROR] [1500245757.698989340]: NO PATH! [ERROR] [1500245757.699021166]: Failed to get a plan from potential when a legal potential was found. This shouldn't happen. [ WARN] [1500245796.845504913]: TebLocalPlannerROS: possible oscillation (of the robot or its local plan) detected. Activating recovery strategy (prefer current turning direction during optimization). [ERROR] [1500245805.857276353]: NO PATH! [ERROR] [1500245805.857315590]: Failed to get a plan from potential when a legal potential was found. This shouldn't happen. [ INFO] [1500245807.845543897]: TebLocalPlannerROS: oscillation recovery disabled/expired. [ WARN] [1500245920.845472769]: TebLocalPlannerROS: possible oscillation (of the robot or its local plan) detected. Activating recovery strategy (prefer current turning direction during optimization). [ERROR] [1500245950.966385275]: NO PATH! [ERROR] [1500245950.966428527]: Failed to get a plan from potential when a legal potential was found. This shouldn't happen. [ERROR] [1500245954.969274775]: NO PATH! [ERROR] [1500245954.969317902]: Failed to get a plan from potential when a legal potential was found. This shouldn't happen. [ERROR] [1500245955.969465935]: NO PATH! [ERROR] [1500245955.969508893]: Failed to get a plan from potential when a legal potential was found. This shouldn't happen. [ERROR] [1500245956.969964978]: NO PATH! [ERROR] [1500245956.969994493]: Failed to get a plan from potential when a legal potential was found. This shouldn't happen. [ INFO] [1500245969.645546998]: TebLocalPlannerROS: oscillation recovery disabled/expired. [ WARN] [1500245972.050677807]: TebLocalPlannerROS: trajectory is not feasible. Resetting planner... [ WARN] [1500245975.050173891]: TebLocalPlannerROS: trajectory is not feasible. Resetting planner... [ WARN] [1500245975.850364335]: TebLocalPlannerROS: trajectory is not feasible. Resetting planner... [ WARN] [1500245979.645506342]: TebLocalPlannerROS: possible oscillation (of the robot or its local plan) detected. Activating recovery strategy (prefer current turning direction during optimization). [ERROR] [1500245997.046909984]: Failed to get a plan. [ERROR] [1500245997.246924446]: Failed to get a plan. [ERROR] [1500245997.446904198]: Failed to get a plan. [ERROR] [1500245997.646913991]: Failed to get a plan. The following errors are from global planner plugin. I am using navfn as global planner. What could be reason for the following error: [ERROR] [1500245955.969508893]: Failed to get a plan from potential when a legal potential was found. Thanks nitin

The new path planner(ftc_local_planner) can't work with hector_mapping together

$
0
0
Hi, all, this question is similiar to the question we have asked [here](http://answers.ros.org/question/265834/the-hector_mapping-and-move_base-cant-work-together-but-cartographer-can/). But we found new situations, so we change the subject and ask a new question here. We are using hector mapping and move_base to implement an online mapping and path planning. We changed the combination of global planner and local planner. If the global planner is ["navfn/NavfnROS"](http://wiki.ros.org/navfn), the local planner is [dwa_local_planner](http://wiki.ros.org/dwa_local_planner), the robot moves fine and builds the map, although the terminal outputs following warning. > [ WARN] [1500425881.365911556, > 793.010000000]: Control loop missed its desired rate of 4.0000Hz... the > loop actually took 0.5200 seconds >> [ INFO] [1500425881.365978957, > 793.010000000]: Got new plan >> [ WARN] [1500425881.784682569, > 793.430000000]: Control loop missed its desired rate of 4.0000Hz... the > loop actually took 0.4200 seconds Then if the local planner is ["ftc_local_planner/FTCPlanner"](http://wiki.ros.org/asr_ftc_local_planner), the global planner is navfn or other methods (We tested a linear global planner programmed by us). The robot almost doesn't move(only with rotation in place sometimes), and the following warning outputs. We also decreased the update frequency of costmap and the control frequency, but it didn't work. [ WARN] [1500431832.147879220, 6740.630000000]: Map update loop missed its desired rate of 1.0000Hz... the loop actually took 21.1200 seconds [ WARN] [1500431854.738732473, 6763.210000000]: Control loop missed its desired rate of 4.0000Hz... the loop actually took 22.5800 seconds [ WARN] [1500431854.738900263, 6763.210000000]: Map update loop missed its desired rate of 1.0000Hz... the loop actually took 21.5800 seconds We also tried other slam package like [karto](http://wiki.ros.org/nav2d_karto). The robot works fine. **So it seems that the combination of hector mapping with ftc_local_planner can't work together, we wonder why the robot can't translate when the mapping method is hector and the local planner is ftc_local_planner.** Can anyone who is familiar with move_base give us advices? Thanks!

TF inverse of a pose

$
0
0
I am trying to understand the [pose_follower](https://github.com/ros-planning/navigation_experimental/blob/hydro-devel/pose_follower/src/pose_follower.cpp) package. It simply tries to follow the waypoints sent from the global planner (through move_base). In a function called diff2D, there is this line: tf::Pose diff = pose2.inverse() * pose1; where pose2 is the robot current pose and pose1 is the waypoint pose. It seems like this line returns the difference between the two poses. My questions are: 1) how this line (internally) works? or what is the mathematical concept behind this? 2) does this line also calculate the difference between the two quaternions of the poses? 3) Another question is what is the difference between tf::Pose and tf::Transform

Navigation can't reach max speed

$
0
0
First of all I'm going to let you guys know I'm new to ROS and gazebo. And I have been playing around with it for a few weeks now doing tutorials and my own experiments. And I finally have a working robot, except... My problem is that I haven't found any proper way to raise the maximum speed of my robot when it is using move base navigation. If I manually control the robot I can make it go according to whatever speed I want, but when I issue it a location to go to in RViz I can't get it to go over 4 m/s. And I have raised all the velocity, acceleration limits that I could find (planner, control config) to ridiculous values all together and one by one in order to try to get it to go beyond the 4 m/s with navigation. My robot has 3 wheels, so it's using differential drive and the third wheel is just a free moving caster wheel. And I'm using Ubuntu 14.04 with ros Indigo. For the planner I'm currently using the DWA planner and I have tried to use the trajectory one as well. My main reference besides the tutorials for the robot has been Husky. Here is my control.yaml: testi: joint_state_controller: type: "joint_state_controller/JointStateController" publish_rate: 50 gmi_drive: type: "diff_drive_controller/DiffDriveController" publish_rate: 50 left_wheel: 'base_to_WheelL' right_wheel: 'base_to_WheelR' wheel_separation: 0.9 wheel_radius: 0.26 enable_odom_tf: false pose_covariance_diagonal: [0.001, 0.001, 1.0, 1.0, 1.0, 1.0] twist_covariance_diagonal: [0.001, 0.001, 1.0, 1.0, 1.0, 1.0] base_frame_id: base_link linear: x: has_velocity_limits : true max_velocity : 75.0 # m/s has_acceleration_limits: true max_acceleration : 5.0 # m/s^2 angular: z: has_velocity_limits : true max_velocity : 5.0 # rad/s has_acceleration_limits: true max_acceleration : 1.5 # rad/s^2 And here is my planner.yaml: controller_frequency: 5.0
recovery_behaviour_enabled: true NavfnROS:
default_tolerance: 0.1 TrajectoryPlannerROS:
# Robot Configuration Parameters
acc_lim_x: 25.0
acc_lim_theta: 32.0 max_vel_x: 55.0
min_vel_x: 0.0 max_vel_theta: 10.0
min_vel_theta: -10.0
min_in_place_vel_theta: 0.2 holonomic_robot: false
escape_vel: -0.5 yaw_goal_tolerance: 6.0
xy_goal_tolerance: 0.8
latch_xy_goal_tolerance: false # Forward Simulation Parameters
sim_time: 4.0
sim_granularity: 0.02
angular_sim_granularity: 0.02
vx_samples: 10
vtheta_samples: 20
controller_frequency: 20.0 # Trajectory scoring parameters
meter_scoring: true
occdist_scale: 0.1
pdist_scale: 0.8
gdist_scale: 1.0 heading_lookahead: 0.325
heading_scoring: false
heading_scoring_timestep: 0.8
dwa: true
simple_attractor: false
publish_cost_grid_pc: true oscillation_reset_dist: 0.25
escape_reset_dist: 0.1
escape_reset_theta: 0.1 DWAPlannerROS: # Robot configuration parameters
acc_lim_x: 25.0
acc_lim_y: 2.5
acc_lim_th: 32.0 max_vel_x: 55.0
min_vel_x: 0.1
max_vel_y: 0.0
min_vel_y: -0.0 max_trans_vel: 75.0
min_trans_vel: 0.1
max_rot_vel: 5.0
min_rot_vel: 0.4 # Goal Tolerance Parameters
yaw_goal_tolerance: 6.0
xy_goal_tolerance: 0.8
latch_xy_goal_tolerance: false
All help is much appriciated

How to find source of TF_NAN_INPUT error

$
0
0
While using `amcl` and `move_base` I'm getting the following errors while applying a `tf_prefix`. It worked without the prefix but now that I'm using it, I get the following error: remote[red1-0]: Error: TF_NAN_INPUT: Ignoring transform for child_frame_id "robot_tf/odom" from authority "unknown_publisher" because of a nan value in the transform (nan nan nan) (nan nan nan nan) at line 240 in /tmp/binarydeb/ros-indigo-tf2-0.5.15/src/buffer_core.cpp Error: TF_DENORMALIZED_QUATERNION: Ignoring transform for child_frame_id "robot_tf/odom" from authority "unknown_publisher" because of an invalid quaternion in the transform (nan nan nan nan) at line 253 in /tmp/binarydeb/ros-indigo-tf2-0.5.15/src/buffer_core.cpp From the error listed above, what transform is being ignored? To the `robot_tf/odom` frame? What is the `authority` (I know that it says `"unknown_publisher"` but what is an `authority` in this context)? At this point, I'm just trying to figure out how to read this error so that I can figure out where the issue lies. I know that `TF_NAN_INPUT` means that somewhere `NaN` values are being set in a transform and `TF_DENORMALIZED_QUATERNION` means that somewhere a denormalized quaternion is being set. In case it is useful, here is the error that `roswtf` reports: ERROR TF multiple authority contention: * node [/robot/laser_broadcaster_NGNeuromorphic1_18892_5059838883645381072] publishing transform [robot_tf/base_laser] with parent [robot_tf/base_link] already published by node [/robot/robot_tf/pioneer_transform_node_NGNeuromorphic1_18892_3963024023289368467] * node [/robot/robot_tf/pioneer_transform_node_NGNeuromorphic1_18892_3963024023289368467] publishing transform [robot_tf/base_laser] with parent [robot_tf/base_link] already published by node [/robot/laser_broadcaster_NGNeuromorphic1_18892_5059838883645381072] and the output from `rqt_tf_tree`: ![image description](/upfiles/15010141341980123.png)

makePlan of GlobalPlanner plugin

$
0
0
I have saved a few PoseStamped in a file to describe a fixed path in a fixed map, now I want to make a plan out of them and send it to move_base. I wrote my own globalplanner-plugin for move_base, and stacked all my Poses in the vector plan of makePlan(). When I am starting the navigation, everything starts fine but after the robot passes the first Pose, he starts driving forwards and backwards around that point... This is my makePlan(), where poses is a vector and contains the different PoseStampeds: bool MyGlobalPlanner::makePlan(const geometry_msgs::PoseStamped& start, const geometry_msgs::PoseStamped& goal, std::vector& plan){ if(!initialized_){ ROS_ERROR("The planner has not been initialized, please call initialize() to use the planner"); return false; } plan.clear(); plan.push_back(start); for(int i=0; i

Waypoint specific yaw_goal_tolerance for move base

$
0
0
Is there any way to specify a yaw_goal_tolerance for each waypoint you send to move_base? Sometimes I care which direction it ends up in and other times I don't care. And using dynamic reconfigure sounds overly complicated and would result in much less readable code and would be harder to debug.

Need help with basic navigation

$
0
0
I am trying to wrap my head around the navigation stack, and how to run it. My objective is to get my simple, differential-drive robot to navigate using the nav stack. I want to set a simple goal in rviz, and let my robot navigate to that position. My robot is publishing tf frames: "base_laser" to "base_link", and "base_link" to "odom". It also sends odometry data (I use stepper motors), and laser scan data from a sonar sensor. I have been following the ROS navigation tutorials to get this far. My robot currently shows this rqt graph shown below: ![image description](/upfiles/15024909152599213.png) Right now, it seems that everything is in order, except that I get the tf error "Timed out waiting for transform from base_link to map to become available before running costmap . . . " isn't the move_base node in charge of publishing the "base_link" to "map" transform?

The move_base node doesn't provide an action server?

$
0
0
Have come across a weird one today. When launching the `move_base` node, there is no action server found at all. Initially I was launching in a launch file, but even doing `rosrun move_base move_base` provides no action server. The node launches fine, without any errors, and lists the topics that are unrelated to the server, such as `/move_base_simple/goal`, which works to move the robot. Using `rosrun actionlib axclient.py /move_base` also fails to connect. I haven't before used the actionlib interface for move_base. Is there something fundamental i may be missing to cause this?
Viewing all 667 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>