[ros-users] TrajectoryPlannerROS does not take parameter

Eitan Marder-Eppstein eitan at willowgarage.com
Mon Sep 27 18:26:36 UTC 2010


Patrick,

I tried for awhile to get the commanded velocity from the base_local_planner
to fall outside of the maximum limits using your configuration files in
stage and failed. I can't get the commanded x velocity to go above 0.2 m/s
and the rotational velocity never goes above 0.15 rad/sec, both of which are
within the specified limits. What version of navigation are you using? I've
been testing on 1.2.2, which is the latest Cturtle release. Perhaps its a
problem with a previous version?

With that said, your velocity and acceleration limits are different enough
from the defaults that it required tuning some parameters to get things to
run smoothly. With the parameters you provided, the robot wouldn't go much
of anywhere. I made a few modifications, which I'll include below to get
things working in a reasonable manner. First, I upped the sim_time parameter
to 2.0 seconds from the default of 1.0 second. I did this because you have a
very low maximum linear velocity and trajectories are scored from their
endpoints, so simulating them a bit further helps to differentiate between
paths. Also, since you have a really low maximum for your angular velocity,
I felt like it might be helpful for the robot to attempt to follow the
global plan more closely. To this end, I upped the path_distance_bias weight
and dropped the goal_distance_bias weight. I only spent about 2 minutes
tuning the parameters, so I'm sure that you'd be able to get even better
behavior by playing around some more (upping the sim_time even more, or the
trade off between following the path and moving towards the goal... see:
http://www.ros.org/wiki/base_local_planner for parameter descriptions), but
this at least exhibits reasonable results for me in simulation. My changes
can be found below:

TrajectoryPlannerROS:
  max_vel_x: 0.2
  min_vel_x: 0.05
  max_rotational_vel: 0.15
  min_in_place_rotational_vel: 0.1
  acc_lim_th: 2.0
  acc_lim_x: 1.0
  acc_lim_y: 1.0
  yaw_goal_tolerance: 0.2
  xy_goal_tolerance: 0.2
  controller_frequency: 5.0
  holonomic_robot: false
  path_distance_bias: 0.8
  goal_distance_bias: 0.4
  sim_time: 2.0

Hope this helps and that all is well,

Eitan

On Mon, Sep 27, 2010 at 7:44 AM, Patrick Goebel
<patrick at casbs.stanford.edu>wrote:

> Hello,
>
> For the past month I have been going through the ROS tutorials and
> trying everything out on my robot (http://www.pirobot.org) which uses a
> Serializer PID controller for the drive wheels and seems to work well
> outside of ROS for moving the robot particular distances at specified
> speeds.
>
> I am now trying to get the navigation stack up and running and I think I
> am 95% of the way there.  The one glitch seems to be similar to what was
> reported by Christian Verbeek on this thread.  Namely, the
> base_local_planner appears to be issuing velocity commands that exceed
> the maximums I have set.  For example, I have max_vel_x set to 0.2, yet
> I am seeing numbers as high as 0.84 on /cmd_vel while simply trying to
> move 1 meter forward.  Similarly, I have max_rotational_vel set to 0.15,
> but I have seen greater values there too.  This is not a rare occurrence
> but happens on almost every nav goal I set in rviz or publish from the
> command line.  Hopefully I am just making a beginner's mistake but I
> have played around with the parameters for two days now and I can't make
> the problem go away.
>
> Here are some of my config files:
>
> base_local_planner_params.yaml:
> TrajectoryPlannerROS:
>     max_vel_x: 0.2
>     min_vel_x: 0.05
>     max_rotational_vel: 0.15
>     min_in_place_rotational_vel: 0.1
>     acc_lim_th: 2.0
>     acc_lim_x: 1.0
>     acc_lim_y: 1.0
>     yaw_goal_tolerance: 0.2
>     xy_goal_tolerance: 0.2
>     controller_frequency: 5.0
>     holonomic_robot: false
>
> cost_common_params.yaml:
> obstacle_range: 2.5
> raytrace_range: 3.0
> footprint: [[-0.13, 0.16], [0.13, 0.16], [0.13, -0.16], [-0.13, -0.16]]
> #robot_radius: ir_of_robot
> inflation_radius: 0.55
> transform_tolerance: 1.0
> observation_sources: base_scan
> base_scan: {sensor_frame: base_link, data_type: LaserScan, topic:
> base_scan, marking: true, clearing: true
>
> global_costmap_params.yaml:
> global_costmap:
>     global_frame: map
>     robot_base_frame: base_link
>     update_frequency: 5.0
>     static_map: true
>     rolling_window: false
>
> local_costmap_params.yaml:
> local_costmap:
>     global_frame: odom
>     robot_base_frame: base_link
>     update_frequency: 5.0
>     publish_frequency: 0
>     static_map: false
>     rolling_window: true
>     width: 3.0
>     height: 3.0
>     resolution: 0.10
>
> My map is simply a white square 500x500 pix at 0.10 resolution.
>
> My move_base.launch file looks like this:
> <launch>
> <master auto="start"/>
>
> <param name="robot_description" command="cat $(find
> pi_robot)/urdf/pi_robot_urdf.xml" />
>
> <!-- Run the map server -->
> <node name="map_server" pkg="map_server" type="map_server" args="$(find
> pi_robot)/blank_map.yaml"/>
>
> <!-- Run Fake Localization -->
> <node pkg="fake_localization" type="fake_localization"
> name="fake_localization" output="screen" />
>
> <!-- Create a static transform between the /map frame and /odom -->
> <node pkg="tf" type="static_transform_publisher"
> name="odom_map_broadcaster" args="0 0 0 0 0 0 /odom /map 100" />
>
> <node pkg="move_base" type="move_base" respawn="false" name="move_base"
> output="screen">
> <param name="controller_frequency" value="5.0" />
> <rosparam file="$(find pi_robot)/costmap_common_params.yaml"
> command="load" ns="global_costmap" />
> <rosparam file="$(find pi_robot)/costmap_common_params.yaml"
> command="load" ns="local_costmap" />
> <rosparam file="$(find pi_robot)/local_costmap_params.yaml"
> command="load" />
> <rosparam file="$(find pi_robot)/global_costmap_params.yaml"
> command="load" />
> <rosparam file="$(find pi_robot)/base_local_planner_params.yaml"
> command="load" />
> </node>
> </launch>
>
> I won't have a laser scanner until next month, so I am faking it with
> the following node:
>
> import roslib; roslib.load_manifest('pi_robot')
> import rospy
> from sensor_msgs.msg import LaserScan
> from tf.broadcaster import TransformBroadcaster
>
> rospy.init_node("base_scan")
> scanPub = rospy.Publisher('base_scan', LaserScan)
> scanBroadcaster = TransformBroadcaster()
>
> scan_rate = 10
> rate = rospy.Rate(scan_rate)
>
> rospy.loginfo("Started base scan at " + str(scan_rate) + " Hz")
>
> while not rospy.is_shutdown():
>
>     ranges = list()
>
>     for i in range(30):
>         ranges.append(3)
>
>     scan = LaserScan()
>     scan.header.stamp = rospy.Time.now()
>     scan.header.frame_id = "base_link"
>     scan.angle_min = -1.57
>     scan.angle_max = 1.57
>     scan.angle_increment = 0.108275862
>     scan.scan_time = scan_rate
>     scan.range_min = 0.5
>     scan.range_max = 6.0
>     scan.ranges = ranges
>     scanPub.publish(scan)
>
>     rate.sleep()
>
>
> Thanks for your time!
>
> Patrick Goebel
>
> _______________________________________________
> ros-users mailing list
> ros-users at code.ros.org
> https://code.ros.org/mailman/listinfo/ros-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ros.org/pipermail/ros-users/attachments/20100927/bebc316d/attachment-0003.html>


More information about the ros-users mailing list