Hello everyone,
**Let me tell you the scenario first.** I have a specific map with many inlets and outlets for multiple, small sized, omni-directional robots. Any robot can come in through any inlet but should go to the specific outlet based on RFID tag. There can be multiple robots on the map at once.
There is a fixed 3D camera (Kinect) on top and an RFID scanner. The camera is used for two reasons. Firstly, it will provide the odometry of robots at any point in time. And secondly, the PointCloud will give the dynamic obstacles (e.g. other robots) in the way.
Until now, I have successfully managed to apply tracking of robots in the area to get the odometry values. Separately, I have used ROS Navigation package to navigate a single robot around the map.
**Now the problem.** Since ROS navigation needs to be initiated through a launch file. Even if I tweak the launch file and create multiple namespaces to run *move_base* multiple times, the problem is that it can only be initialized for a specific number of times. In other words, I cannot initialize a new move_base node in real time.
So, my questions are:
1. Is it possible to initialize a move_base node only when the robot is in my area of interest? And to close the node when the robot is away.
2. How can I use PointCloud instead of laser scan to create the global/local costmap?
I know it is much to ask, but any related help would be highly appreciated.
Thanks.
↧
ROS Navigation for unknown number of Robots
↧
Activate move base recovery behaviors
Dear ROS users, I am writing a nav_core recovery plugin to use with move_base and the trajectory rollout planner. To effectively test my code, I would like to be able to trigger the recovery behavior in someway, or tell the planner to activate a recovery often. In fact, when the robot is stuck, recovery behaviors are not always activated. I tried to lower the value of controller_patience in move base, but it seems that does not work.
Is there a way to tell the planner to activate the recovery behaviors?
↧
↧
Move_base has no connection to sensor observation source
I have a mobile platform for navigating an indoor environment with a known layout. The platform uses a kinect and some custom code to identify obstacles it can ignore and obstacles it should pay attention to. In order to navigate around them, I need to programatically add obstacles to the cost map. To accomplish this, I used [yocs_virtual_sensor](http://wiki.ros.org/yocs_virtual_sensor) as an observation source, but move_base refuses to update the costmap.
After some snooping, I found that there is no connection between the virtual sensor node and move_base according to `rosnode info`, though they are publishing and subscribing to the appropriate topic.
roswtf:
Found 1 error(s).
ERROR The following nodes should be connected but aren't:
* /virtual_sensor->/move_base (/virtual_sensor_scan)
* /move_base->/move_base (/move_base/global_costmap/footprint)
* /move_base->/move_base (/move_base/local_costmap/footprint)
The only connection on the /virtual_sensor_scan topic is between the scanner and rviz.
ubuntu@tegra-ubuntu:~$ rostopic info /virtual_sensor_scan
Type: sensor_msgs/LaserScan
Publishers:
* /virtual_sensor (http://10.253.90.18:35309/)
Subscribers:
* /rviz_1505310522140477543 (http://10.253.12.244:35021/)
* /move_base (http://10.253.90.18:57981/)
----------------------------------------------------
ubuntu@tegra-ubuntu:~$ rosnode info move_base | grep 'topic: /virtual'
ubuntu@tegra-ubuntu:~$ rosnode info virtual_sensor | grep 'topic: /virtual'
* topic: /virtual_sensor_scale
costmap_common_params.yaml includes the following lines:
obstacles:
footprint_clearing_enabled: false
observation_sources: laser_scan_sensor
laser_scan_sensor: {sensor_frame: base_link, data-type: LaserScan, topic: virtual_sensor_scan, marking: true, observation_persistence: .5}
... and we have set up the following plugins
plugins:
- {name: static_map, type: "costmap_2d::StaticLayer"}
- {name: obstacles, type: "costmap_2d::ObstacleLayer"}
- {name: inflation_layer, type: "costmap_2d::InflationLayer"}
Is there something I've overlooked? Is this more likely an issue with the sensor package?
Any help is appreciated!
↧
ROS move_base costmap not connected error
I'm using ROS indigo running on 64bit Ubuntu 14.04 LTS. In the project, the nodes and visualisation (Rviz) seems to be functional when I launch the launch file I written. Here are the sensors used in the the project, which is a modified electric scooter:
- Hokuyo Lidar
- Phidgets Encoder
When I start moving the scooter using the joystick, the scooter will move physically, but in Rviz, the object detected by the lidar moves to the scooter, instead of the scooter moving in the map. When I did *roswtf*, it shows that the robot footprint is disconnected, though the rqt graph shows otherwise. Please advise on the possible ways that I can undertake to debug this issue.
[![roswtf screenshot][3]][3]
Here are the node connections. For the navigation stack, I'm using the Teb local planner instead of the default planner.
[![enter image description here][1]][1]
A screenshot of the tf tree:
[![enter image description here][2]][2]
[1]: https://i.stack.imgur.com/lMSC6.png
[2]: https://i.stack.imgur.com/ft3Gw.png
[3]: https://i.stack.imgur.com/a7c7d.png
↧
Making Robot Reverse - mobile_base
Hi,
I want to be able to make my robot reverse/backup when that is the optimal route/easiest escape path. I've been able to achieve this by setting DWA's planner min_vel_x to -0.35. However I don't want the robot to always reverse to another waypoint if there is no need to (Which is happening at the moment)
(as detailed here - https://answers.ros.org/question/219616/robot-unable-to-go-in-reverse-to-avoid-obstacles/)
Use case is this:
1) Robot starts from docking station - the only way out is to reverse
2) There after move fwd/turn/rotate as required to navigate/escape
3) If there is no other option then reverse to get out of a stuck position
Is this achievable with the current stack or do I need to add some custom s/w?
Many Thanks
Mark
↧
↧
problem of adding the range_sensor_layer to costmap_2D plugins
I am a fresh man to ROS system.I bulid a robot platfom use ros. i use move_base in my systerm.
I have a laser scan and some ultrasonic sensors in my systerm,but for using the ultrasonic sensor i got some problem.
i dont konw how to add the range_sensor_layer as a costmap plugins.
i tried just add
In costmap_common_params.yaml
add the layer of ultrasonic
ultrasonic_layer:
enabled: true
max_obstacle_height: 0.4
origin_z: 0.0
z_resolution: 0.2
z_voxels: 2
unknown_threshold: 15
mark_threshold: 0
combination_method: 1
track_unknown_space: true #true needed for disabling globalpath planning through unknown space
obstacle_range: 1.0
raytrace_range: 3.0
publish_voxel_map: false
observation_sources: ultrasonic
ultrasonic:
data_type: Range
topic: ultrasonic
marking: true
clearing: true
In local_costmap_params.yaml like
plugins:
- {name: obstacle_layer, type: "costmap_2d::VoxelLayer"}
- {name: ultrasonic, type: "range_sensor_layer::RangeSensorLayer"}
- {name: inflation_layer, type: "costmap_2d::InflationLayer"}
but when i run the move base i got some error said: "range_sensor_layer::RangeSensorLayer" is not surported by the plugin .
i can get the range informations using : $rostopic echo ultrasonic
did i missed something? or did i do somrthing wrong?
and can anybody tell me the correct way to use the range_sensor_layer as a plugin?
thanks a lot
↧
Reverse recovery behavior for stuck non circular robots
Hello, I have a robot that is having issues getting stuck. In a lot of situations, a simple reverse operation would un stick it. Rotate recovery doesn't work well because my robot's turning center is offset from its body. Before I get to writing one from scratch, is there any reversing type recovery behavior i could get move_base to use?

Thanks!
↧
Reach closer position to goal with obstacle in the middle
Hi everyone,
My problem is the following: I'm working in a project in which a robot has to perform several activities and while navigating it is possible that an object appears in the way. I want it to stop in front of the object and sometimes that happens if the global planner plans. But if the robot can see that the path is blocked from some distance the global planner doesn't even plan, which means that the robot doesn't move at all from a far distance, which is not what I want.
I tried to initialize a fake costmap so that I could plan without the observations of the lasers, but that didn't work out. Tried to configure local and local costmaps.
details:I'm using a front and rear hokuyo for localization and obstacle avoidance, move base, dwa and ros planner.
Any one has any idea how to solve this?
↧
clearing costmap using move_base/clearCostmap service
Hi all,
I have a layered [costmap](http://wiki.ros.org/costmap_2d) with `static_layer`, `obstacle_layer` (for Lidar and Kinect) and `inflation_layer` and there are situations when I need to clear out the `costmap` manually in the code. I am using `move_base/clearCostmapService` service to clear the costmap. Whenever I get a new goal, I call this service to clear the costmap and then the planner generates a new plan. AFAIK, when I call `move_base/clearCostmap` service, it clears the costmap and then fills it with `static_map` immediately meaning that obstacles which are not in the map are cleared. The problem I am having right now is that sometimes, planner generates a path through obstacles in the static_map (maybe because, costmap is cleared but has not been filled with `static_map` yet). I am calling the service when I receive a new goal and the planner plans a path after the service is called. Can someone suggest what can be the problem and how to fix it permanently? Code snippet from `move_base.cpp` ::
void MoveBase::executeCb(const move_base_msgs::MoveBaseGoalConstPtr& move_base_goal)
{
if(!isQuaternionValid(move_base_goal->target_pose.pose.orientation)){
as_->setAborted(move_base_msgs::MoveBaseResult(), "Aborting on goal because it was sent with an invalid quaternion");
return;
}
///// Added on 12/23/2015
boost::unique_lock lock1(planner_mutex_);
runPlanner_ = false;
std_srvs::Empty srv;
if(clear_costmaps_client.call(srv))
ROS_INFO("I got the goal and the costmap layers are reset!!!!!"); // It prints this and continues but the costmap is not reset properly, it takes some time after this for the costmap to properly reset
lock1.unlock();
/////
geometry_msgs::PoseStamped goal = goalToGlobalFrame(move_base_goal->target_pose);
//we have a goal so start the planner
boost::unique_lock lock(planner_mutex_);
planner_goal_ = goal;
runPlanner_ = true;
planner_cond_.notify_one();
lock.unlock();
current_goal_pub_.publish(goal);
std::vector global_plan;
**Update :**
It looks like the planner thread plans the path before the clearing (or resetting) Costmap thread is finished. Correct me if I am wrong. How can I make sure to run the planner thread only when the clearing Costmap thread is finished?
Any suggestions will be appreciated Let me know if you need more information from me.
Thanks in advance.
Naman Kumar
↧
↧
move_base cpu load
while navigating, move_base goes up to 110% cpu. I'm running turtlebot on the Nvidia Tegra TK1.
Other than reducing the map resolution what are some of the other ways to reduce cpu usage on this board ?
Tushar.
↧
Kobuki Not Moving on Navigation - move_base issue
Hi All,
My set up is Kobuki with s/w on Raspberry Pi with RPLIDAR A2 and that feeding back to a laptop. I'm trying to get the amcl_demo to work:
roslaunch turtlebot_navigation amcl_demo.launch map_file:=/home/mark/KitchenMap.map.yaml --screen
The amcl seems to start without issue and reports:
[ INFO] [1489096786.597987673]: Got new plan
Eventually giving up with:
[ WARN] [1489096805.398058019]: Rotate recovery behavior started.
Which is when I would expect at lease *something* to happen. But the robot just stays still.
On the Pi side I see messages like:
[ WARN] [1489097005.894847319]: Velocity Smoother : using robot velocity feedback end commands instead of last command: 0.0349276, 0, -0.3, [navigation_velocity_smoother]
So something is not quite night. The only thing roswtf reports is:
Found 1 error(s).
ERROR The following nodes should be connected but aren't:
* /move_base->/move_base (/move_base/global_costmap/footprint)
* /move_base->/move_base (/move_base/local_costmap/footprint)
Which I don't think is much of an issue.
My rosgraph looks like this:

[rosgraph.png](/upfiles/14890985687706006.png)
Any ideas what I've got missing or why this is happening?
Many Thanks
Mark
↧
Actionlib across multiple computers
I'm working on a project where I need to separate out my simulator and navigation nodes across two different computers. When I run my actionlib python script the robot does not move... no errors are given, but no motion happens. I've tested actionlib script with this setup many times on a single computer several times and it works fine. Simulation time is active otherwise I get errors from the navigation package.
This is my setup.
Computer 1:
ros master
Simulator (MORSE/Blender)
TF_node (to handle transformations)
actionlib script (waypoint navigation)
Computer 2:
ROS navigation package (move_base, ect.)
gmapping
I've also tried switching the nodes across computers (i.e move the ros master to computer 2, actionlib to computer 2, ect.) but I need to have the navigation package and gmapping on a different computer than the simulator. If I open RVIZ and directly publish a nav_goal, the robot works fine and goes directly to the waypoint.
My question: Is there something obvious I'm missing with running actionlib across multiple computers? Since the system works when I run point and click on RVIZ I feel like most of the system is setup properly.
Thanks!
↧
Navigation: how to make a robot follow a path
Hi,
I am a beginner in ros.
I should make a robot follow a path giving in the simulator rviz. How can i do this in ros ???
Pleeeeeeeeeeeeeeeeease can some one help me!!
Thank's for helps.
↧
↧
Obstacle free 2d Navigation - Navigation Stack
Hi,
I am working on implementing an indoor rover. I have successfully implemented a /cmd_vel topic for commanding, as well as /odom for localization. Next I want to have a path planning service and I looked at Move_Base but it requires a laser scanner or at least a pointcloud.
Is there a way to use Move_base with an empty map? Or is there an alternative for obstacle-free differential drive navigation?
↧
Global costmap incorrect
I've been running move_base with decent success for navigation around a (mostly) known environment, but the costmap has occasional issues with inflation that cause the robot to attempt invalid paths.
I have a static map defined for my testing environment (white with a single pixel black border), a custom layer (used to add temporary obstacles), and the inflation layer. Generally, they all work perfectly well. However, the global costmap will sometimes show sections as 0 cost when they should be much higher. This allows the global path to pass far too close to the boundary.
An example:

Instead of the static layer being fully inflated, a section of it is only partially inflated. When an obstacle is placed near this section, the global plan falls right along the white-black border.
↧
Move_base PointCloud2
I get the following error with move_base
Client [/move_base] wants topic /zed/point_cloud/cloud_registered to have datatype/md5sum [sensor_msgs/PointCloud/d8e9c3f5afbdd8a130fd1d2763945fca], but our version has [sensor_msgs/PointCloud2/1158d486dd51d683ce2f1be655c3c181]. Dropping connection.
Obviously it does not like PointCloud2. Is this a configuration problem or do i need to do a conversion to Pointcloud?
↧
How long should it take move_base to mark a goal as succesful?
I'm using move_base to navigate through a set of waypoints, but the time between reaching a goal and move_base acknowledging success is inconsistent. The robot will drive up to the goal and stop, but it does not always promptly register as having reached the goal. Sometimes, the state will immediately switch to 'SUCCEEDED'. Other times, it takes several seconds. Is this normal behavior? Is there any way to improve the time it takes for move_base to mark a goal as succeeded?
Thanks!
*Below is a simplified version of our loop. Very often, it will take multiple seconds after the robot has stopped moving for it to print "Reached goal"*
...
MoveBaseClient * mbc = new MoveBaseClient("move_base", true);
...
while(ros::ok()){
if (mbc->getState() == actionlib::SimpleClientGoalState::SUCCEEDED){
ROS_INFO("Reached goal");
mbc->sendGoal(getNextGoal());
}
else {
ROS_INFO("Goal incomplete");
}
}
↧
↧
Obstacle avoidance in move_base package
I am using DWAPlannerRos and GlobalPlanner for move_base navigation package. It is able to navigate to goal. I have set the inflation radius of obstacle layer and inflation layer of costmap to be 1.0. **I suppose when the robot footprint enter the obstacle region, the navigation stack should stop the robot to prevent collision but it didn't happen. Whyy?**

Image above shows my local costmap (/move_base/local_costmap/costmap). Green color polygon is the robot footprint. I define the robot footprint larger than the robot's model for testing and visualizing purpose.
my movebase launch file:
common costmap yaml:
#footprint: [[0.275, 0.375], [-0.275, 0.375], [-0.275, -0.375], [0.275, -0.375]]
footprint: [[0.5, 0.5], [-0.5, 0.5], [-0.5, -0.5], [0.5, -0.5]]
robot_radius: 0.5
transform_tolerance: 0.4
obstacle_layer:
enabled: true
obstacle_range: 2.5
raytrace_range: 3.0
max_obstacle_height: 2.0
min_obstacle_height: -2.0
inflation_radius: 1.00
observation_sources: laser_scan_sensor
laser_scan_sensor: {sensor_frame: front_laser_frame, data_type: LaserScan, topic: front_scan, marking: true, clearing: true}
inflation_layer:
enabled: true
cost_scaling_factor: 5.0 # exponential rate at which the obstacle cost drops off (default: 10)
inflation_radius: 1.0 # max. distance from an obstacle at which costs are incurred for planning paths.
global costmap yaml:
global_costmap:
global_frame: /map
robot_base_frame: base_footprint
update_frequency: 3.0
static_map: true
transform_tolerance: 5.0
plugins:
- {name: static_layer, type: "costmap_2d::StaticLayer"}
- {name: obstacle_layer, type: "costmap_2d::VoxelLayer"}
- {name: inflation_layer, type: "costmap_2d::InflationLayer"}
local costmap yaml:
local_costmap:
global_frame: /odom
robot_base_frame: base_footprint
update_frequency: 3.0
publish_frequency: 2.0
static_map: false
rolling_window: true
width: 6.0
height: 6.0
resolution: 0.05
transform_tolerance: 5.0
plugins:
- {name: obstacle_layer, type: "costmap_2d::VoxelLayer"}
- {name: inflation_layer, type: "costmap_2d::InflationLayer"}
↧
teb_local_planner segfault on Fedora 26
Hi all,
I'm on Fedora 26 with PocoFoundation 1.7.8p2 and move_base fails to load using teb_local_planner with a segfault.
This seems to be an error related to costmap_converter due to the following:
- other local planners seem to load fine (e.g. dwa_local_planner).
- when I remove all usages of costmap_converter from teb_local_planner it loads fine.
Find the output of gdb here:
https://paste.fedoraproject.org/paste/YnJQ2X3jc40hrazIOqSxbg
(this is taken from roslaunch teb_local_planner_tutorials robot_diff_drive_in_stage.launch with move_base in gdb.)
Further info:
- ROS Kinetic is built from source with quite recent source states (as of 1 hour old).
- Fedora is updated accordingly
I tried to build the class_loader package with older versions of PocoFoundation although right now I can't get it to work - the same issue persists.
So my guess that this is related to costmap_converter also comes from a hint provided by Team Vigir's pluginlib wiki-page: https://github.com/team-vigir/vigir_pluginlib/wiki (see "Troubleshooting")
They state that loading a plugin which loads plugins on it's own causes a weird issue (see wiki page).
Any ideas? I will add a valgrind output soon.
What else should I provide?
Regards
Nick
↧
How can I deactiviate the local costmap in the move_base pkg?
Hi,
I am preparing a game and the costmap slows down the planner to much or makes the robot get stuck completely.
The robot should go straight from A to B without taking any costs into consideration therefore I want to deactivate the local costmap while using the move_base pkg.
Where and how can I do this?
↧