ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question

mjedmonds's profile - activity

2023-03-09 23:17:27 -0500 received badge  Good Question (source)
2021-05-04 20:30:40 -0500 received badge  Nice Question (source)
2020-05-29 06:32:06 -0500 received badge  Student (source)
2020-05-17 15:01:32 -0500 received badge  Famous Question (source)
2020-05-17 15:01:32 -0500 received badge  Notable Question (source)
2020-05-17 15:01:32 -0500 received badge  Popular Question (source)
2017-06-06 21:33:51 -0500 received badge  Famous Question (source)
2017-06-06 04:12:10 -0500 received badge  Famous Question (source)
2017-06-06 04:12:10 -0500 received badge  Notable Question (source)
2017-06-06 04:12:10 -0500 received badge  Popular Question (source)
2017-05-29 15:27:20 -0500 commented answer AMCL not localizing in pre-built map

/global_localization is what I was looking for. Thanks! Also this answer from Humpelstilzchen explains why

2017-05-29 15:25:51 -0500 marked best answer AMCL not localizing in pre-built map

I'm using AMCL with a Velodyne VLP-16. I'm using hector_slam to build the map, saving the map with map_server.

I'm using an IMU and wheel encoder velocities (twist messages) to fuse with robot_localization for odometry and the odom->base_link (base_footprint in my case) transform.

I want to use AMCL for global localization, but I'm having problems. AMCL is not aligning the laser scan with the prebuilt map, leading to incorrect global localization. I've attached a screenshot (if you rotate the laserscan by ~90 degrees clockwise, you get the about the correct alignment.

image description

The only potential problem might be that the laserscan is flat in the velodyne's frame, which is ~0.35m above the ground. Could that be an issue for AMCL?

I'm not very sure where to start debugging this, so any tips/hints/suggestions/requests for more info would be appreciated. I didn't want to dump my entire config in the first post, but I'm more than willing to.

And my AMCL config is pretty standard:

<launch>
<node pkg="amcl" type="amcl" name="amcl">
  <!-- Publish scans from best pose at a max of 10 Hz -->
  <param name="odom_model_type" value="omni"/>
  <param name="odom_frame_id" value="odom" />
  <param name="base_frame_id" value="base_footprint" />
  <param name="global_frame_id" value="map" />
  <param name="use_map_topic" value="true" />
  <param name="odom_alpha5" value="0.1"/>
  <param name="transform_tolerance" value="0.2" />
  <param name="gui_publish_rate" value="10.0"/>
  <param name="laser_max_beams" value="30"/>
  <param name="min_particles" value="500"/>
  <param name="max_particles" value="5000"/>
  <param name="kld_err" value="0.05"/>
  <param name="kld_z" value="0.99"/>
  <param name="odom_alpha1" value="0.2"/>
  <param name="odom_alpha2" value="0.2"/>
  <!-- translation std dev, m -->
  <param name="odom_alpha3" value="0.8"/>
  <param name="odom_alpha4" value="0.2"/>
  <param name="laser_z_hit" value="0.5"/>
  <param name="laser_z_short" value="0.05"/>
  <param name="laser_z_max" value="0.05"/>
  <param name="laser_z_rand" value="0.5"/>
  <param name="laser_sigma_hit" value="0.2"/>
  <param name="laser_lambda_short" value="0.1"/>
  <param name="laser_lambda_short" value="0.1"/>
  <param name="laser_model_type" value="likelihood_field"/>
  <!-- <param name="laser_model_type" value="beam"/> -->
  <param name="laser_likelihood_max_dist" value="2.0"/>
  <param name="update_min_d" value="0.2"/>
  <param name="update_min_a" value="0.5"/>
  <param name="resample_interval" value="1"/>
  <param name="transform_tolerance" value="0.5"/>
  <param name="recovery_alpha_slow" value="0.0"/>
  <param name="recovery_alpha_fast" value="0.0"/>
</node>
</launch>
2017-05-29 15:25:47 -0500 received badge  Supporter (source)
2017-05-29 15:25:30 -0500 commented question AMCL not localizing in pre-built map

Yes, thank you. Makes sense.

2017-05-29 10:42:59 -0500 received badge  Notable Question (source)
2017-05-26 14:40:23 -0500 commented question AMCL not localizing in pre-built map

If I properly set the initial pose, it works, but this seems counterintuitive to me. The point of global localization is

2017-05-26 14:40:05 -0500 commented question AMCL not localizing in pre-built map

If I properly set the initial pose, it works, but this seems counterintuitive to me. The point of global localization is

2017-05-25 02:36:12 -0500 received badge  Popular Question (source)
2017-05-24 12:49:08 -0500 commented question AMCL not localizing in pre-built map

Less than 2 meters. Should I travel farther to get a global alignment?

2017-05-23 22:43:39 -0500 edited question AMCL not localizing in pre-built map

AMCL not localizing in pre-built map I'm using AMCL with a Velodyne VLP-16. I'm using hector_slam to build the map, savi

2017-05-23 22:42:52 -0500 asked a question AMCL not localizing in pre-built map

AMCL not localizing in pre-built map I'm using AMCL with a Velodyne VLP-16. I'm using hector_slam to build the map, savi

2016-08-25 13:05:28 -0500 commented answer 3D map with RTAB, SICK, IMU and Husky A200

It should be the value of the odometry topic from rtabmap, which is /rtabmap/odom if you have rtabmap namespace'd, or /odom if you don't (your control-new.launch has it namespace'd).

2016-08-25 12:23:25 -0500 commented answer 3D map with RTAB, SICK, IMU and Husky A200

My main point is that you should try to understand the hierarchy of your setup and set the proper value.

2016-08-25 12:22:07 -0500 commented answer 3D map with RTAB, SICK, IMU and Husky A200

The numbering for each fused source should start at 0, as the robot_localization documentation indicates. So if rtabmap is your own odometry source, you should set it be 'odom0' and 'odom0_config'. However, you said you were also integrating wheel odometry, which can be a twist or odometry input.

2016-08-25 12:22:07 -0500 received badge  Commentator
2016-08-24 14:58:25 -0500 commented answer 3D map with RTAB, SICK, IMU and Husky A200

Yes, that sounds correct, though you know more about your exact configuration than I do.

2016-08-24 14:01:53 -0500 commented answer 3D map with RTAB, SICK, IMU and Husky A200

Yes, this is a fundamental change to the odometry/filtered topic, so you will have to rerecord your bags. Any change to the robot's configuration will require a rerecording of any bags.

2016-08-24 13:21:31 -0500 commented answer 3D map with RTAB, SICK, IMU and Husky A200

Not a problem, put the odom configuration in between the <node> tags for robot_localization in the file you linked

2016-08-24 12:45:03 -0500 commented answer 3D map with RTAB, SICK, IMU and Husky A200

No, you set those parameters in the robot_localization launch file that's already fusing your IMU and wheel odometery. See an example robot_localization launch file from the package.

2016-08-24 12:01:37 -0500 commented answer 3D map with RTAB, SICK, IMU and Husky A200

with a corresponding config like this:

<rosparam param="odom1_config">[true, true, false, false, false, true, false, false, false, false, false, false, false, false, false]</rosparam>

2016-08-24 12:00:35 -0500 commented answer 3D map with RTAB, SICK, IMU and Husky A200

You'll add a line like this:

<param name="odom1" value="rtabmap/odom"/>

2016-08-24 11:25:34 -0500 commented answer 3D map with RTAB, SICK, IMU and Husky A200

It seems more appropriate to have bottom-out and tipping avoidance be part of your navigation planner, but I'm not an expert on the topic.

However, the way I use robot_localization, I fuse the IMU with the wheel odometry and visual odometry from rtabmap. See the robot_localization package

2016-08-23 19:39:53 -0500 answered a question 3D map with RTAB, SICK, IMU and Husky A200

First, you need to add a calibrated tf between your base_link and your realsense_frame. You can manually measure this and verify it. The robot needs to know where the camera is relative to its other parts.

You may also want to look at the robot_localization package to fuse your rtabmap odometry with the IMU and wheel odometry.

2016-08-02 13:47:16 -0500 asked a question Lethal Definition for costmap_2d

Hi,

I'm writing a dynamic footprint node, which projects a robot's arm state down onto the 2d polygon for the footprint of the robot. This is based on a rectangular project of the robot's arms with the state coming from tf. The goal of this is to conservatively plan with the robot's arms moving around (e.g. a static rectangle is not a sufficient definition for the robot's footprint).

My concern is this: even with the arms projected down, is the "lethal" point of the robot still only considered the midpoint of the robot, or is any point inside of the footprint polygon that is inflation_radius distance away considered lethal? Here's a mockup picture of what I'm talking about. Is the lethal point a constant in the center of the footprint polygon, or an area based on the shape of the footprint polygon?

image description

Thanks!

2016-06-23 14:01:13 -0500 asked a question move_base corrupt linked list

I have the navigation stack working, but the move_base node is consistently crashing. The behavior is very consistent; eventually it crashes with the same error every time. The amount of time it takes to crash does vary. I'm going to post this same question on the

Here's the exact error, each time corresponding to the following warning:

[ WARN] [1466704185.100935930]: InflationLayer::updateCosts(): seen_ array size is wrong

and the error:

*** Error in `/opt/ros/indigo/lib/move_base/move_base': corrupted double-linked list: 0x00000000029ad9b0 ***
[move_base-1] process has died [pid 8680, exit code -6, cmd /opt/ros/indigo/lib/move_base/move_base cmd_vel:=/mobility_base/cmd_vel odom:=/odometry/filtered map:=/rtabmap/proj_map __name:=move_base __log:=/home/mb/.ros/log/4d826ab2-396a-11e6-ad82-b8aeed747f2b/move_base-1.log].
log file: /home/mb/.ros/log/4d826ab2-396a-11e6-ad82-b8aeed747f2b/move_base-1*.log
all processes on machine have died, roslaunch will exit

Unfortunately, the log file isn't actually written, so I haven't been able to get any useful information from there. I've done some googling and the only thing I can turn up is line 192 of the source of costmap_2d's inflation_layer.cpp ( http://docs.ros.org/jade/api/costmap_... ). So it seems deleting the seen_ array of costmap_2d's inflation layer is causing a corruption of a linked list somewhere else. What's odd is the warning doesn't always cause the error. I'm thinking it might be cause by how rtabmap is updating proj_map, but I'm somewhat shooting in the dark. Any insight would be helpful.

Here's my basic robot setup. A kinectv1 mounted on the robot with rtabmap_ros for odometry and mapping. The move_base package uses the following:

base_local_planner_params.yaml

TrajectoryPlannerROS:
  acc_lim_x:  1.0
  acc_lim_y:  1.0
  acc_lim_theta: 2.0
  max_vel_x:  0.4
  min_vel_x:  0.05
  escape_vel: -0.05
  max_vel_theta: 0.5
  min_vel_theta: -0.5
  min_in_place_vel_theta: 0.01
  holonomic_robot: true
  y_vels: [-0.3, -0.05, 0.05, 0.3]

  xy_goal_tolerance:  0.03
  yaw_goal_tolerance: 0.05
  latch_xy_goal_tolerance: true

  # make sure that the minimum velocity multiplied by the sim_period is less than twice the tolerance on a goal. Otherwise, the robot will prefer to rotate in place just outside of range of its target position rather than moving towards the goal.
  sim_time: 1.5 # set between 1 and 2. The higher he value, the smoother the path (though more samples would be required).
  sim_granularity: 0.025
  angular_sim_granularity: 0.025
  vx_samples: 12
  vtheta_samples: 20

  meter_scoring: true

  pdist_scale: 0.7 # The higher will follow more the global path.
  gdist_scale: 0.8
  occdist_scale: 0.03
  publish_cost_grid_pc: false

# move_base controller_frequency
controller_frequency: 5.0 

# global planner 
NavfnROS:
  allow_unknown: true
  visualize_potential: false

costmap_common_params.yaml

footprint: [[0.42, -0.43], [0.42, 0.43], [-0.42, 0.43], [-0.42, -0.43]]
footprint_padding: 0.02

inflation_layer:
  inflation_radius: 0.02

transform_tolerance: 2

obstacle_layer:
  obstacle_range: 3.0
  raytrace_range: 3.5
  track_unknown_space: false

  observation_sources: point_cloud_sensor

  point_cloud_sensor: {
    sensor_frame: /camera_link,
    data_type: PointCloud2,
    topic: /rtabmap/cloud_map,
    expected_update_rate: 1.0,
    max_obstacle_height: 3.0,
    min_obstacle_height: 0.1,
    marking: true,
    clearing: true
  }

global_costmap_params.yaml

global_costmap:
  global_frame: /map
  robot_base_frame: base_footprint
  update_frequency: 0.5
  publish_frequency ...
(more)
2016-05-24 09:18:43 -0500 received badge  Famous Question (source)
2016-03-07 10:35:19 -0500 received badge  Notable Question (source)
2016-02-16 08:08:39 -0500 received badge  Popular Question (source)
2016-01-30 16:11:54 -0500 received badge  Enthusiast
2016-01-29 15:18:50 -0500 edited question minimum ros_control for diff_drive_controller

Hi,

I'm working with a mobile robot trying to give it localization. I am using visual odometry (rtabmap) and was planning on using diff_drive_controller to give odometry from cmd_vel topics. The two would be coupled (with IMU data from the base as well) using robot_pose_efk. I've already recorded a live rosbag which contains all the of the camera topics, cmd_vel, and raw IMU data.

Here's my question: how can I minimally launch ros_control such that diff_drive_controller will work. I really don't need anye of the other features of ros_control (or so I think, I might be very mistaken). I just need for diff_drive_controller to output odometry messages from cmd_vel topics. The goal is that all of this ends up in robot_pose_efk.

Thanks.

Edit: Upon looking at the diff_drive_controller code, I'm not sure that it will work. My robot (a baxter mobility base) is already publishing the twist and subscribes to the cmd_vel from the joystick. Here's a list of the topics: http://mbsdk.dataspeedinc.com/ROS_API

So, it looks like I'm looking for a package which can convert twist + wrench messages into odometry, or I need to write such a node.

2016-01-29 15:18:50 -0500 received badge  Editor (source)