Hi All,
I like to integrate ultrasonic sensors into costmap bu getting following error when I run the move_base.
Thread 11 "move_base" received signal SIGSEGV, Segmentation fault. [Switching to Thread 0x7fffcb7fe700 (LWP 9665)] 0x00007fffe4069067 in range_sensor_layer::RangeSensorLayer::updateBounds(double,double, double, double*, double*, double*, double*) () from /opt/ros/kinetic/lib//librange_sensor_layer.so
local costmap:
local_costmap:
global_frame: /map
robot_base_frame: base_link
update_frequency: 2.0
publish_frequency: 1.0
static_map: false
rolling_window: true
width: 1.0
height: 1.0
resolution: 0.05
transform_tolerance: 0.5
plugins:
- {name: range_sensor_layer, type: "range_sensor_layer::RangeSensorLayer"}
- {name: static_layer, type: "costmap_2d::StaticLayer"}
- {name: obstacle_layer, type: "costmap_2d::ObstacleLayer"}
# - {name: inflation_layer, type: "costmap_2d::InflationLayer"}
global costmap:
global_costmap:
global_frame: /map
robot_base_frame: base_link
update_frequency: 2.0
publish_frequency: 1.0
rolling_window: false
static_map: true
width: 3
height: 3
transform_tolerance: 0.5
plugins:
#- {name: range_sensor_layer, type: "range_sensor_layer::RangeSensorLayer"}
- {name: static_layer, type: "costmap_2d::StaticLayer"}
- {name: obstacle_layer, type: "costmap_2d::ObstacleLayer"}
#- {name: inflation_layer, type: "costmap_2d::InflationLayer"}
#- {name: inflation_layer, type: "costmap_2d::InflationLayer"}
common costmap:
footprint: [ [-0.05,-0.05], [0.05,-0.05], [0.05,0.05], [-0.05,0.05] ]
transform_tolerance: 0.2
map_type: costmap
obstacle_layer:
enabled: true
obstacle_range: 3.0
raytrace_range: 3.5
inflation_radius: 0.1
track_unknown_space: false
combination_method: 1
observation_sources: laser_scan_sensor
laser_scan_sensor: {data_type: LaserScan, topic: scan, marking: true, clearing: true}
range_sensor_layer:
topics: ["/ultrasound", "/ultrasound1"]
no_readings_timeout: 0.0
clear_threshold: 0.46
mark_threshold: 0.98
static_layer:
enabled: true
map_topic: "/map"
inflation_layer:
enabled: true
cost_scaling_factor: 5.0 # exponential rate at which the obstacle cost drops off (default: 10)
inflation_radius: 0.1 # max. distance from an obstacle at which costs are incurred for planning paths.
reading from arduino:
#include
#include
#include
ros::NodeHandle nh;
sensor_msgs::Range range_msg;
sensor_msgs::Range range_msg1;
ros::Publisher pub_range( "/ultrasound", &range_msg);
ros::Publisher pub_range1("/ultrasound1", &range_msg1);
char frameid[] = "/ultrasound";
char frameid1[] = "/ultrasound1";
float getRange_Ultrasound(int pin_num){
int val = 0;
val=analogRead(pin_num);
float range = val;
return range/81; // (0.0124023437 /4) ; //cvt to meters
}
void setup()
{
nh.initNode();
nh.advertise(pub_range);
nh.advertise(pub_range1);
range_msg.radiation_type = sensor_msgs::Range::ULTRASOUND;
range_msg.header.frame_id = frameid;
range_msg.field_of_view = 0.1; // fake
range_msg.min_range = 0.0;
range_msg.max_range = 6.47;
range_msg1.radiation_type = sensor_msgs::Range::ULTRASOUND;
range_msg1.header.frame_id = frameid1;
range_msg1.field_of_view = 0.1; // fake
range_msg1.min_range = 0.0;
range_msg1.max_range = 6.47;
pinMode(8,OUTPUT);
digitalWrite(8, LOW);
}
long range_time;
void loop()
{
//publish the adc value every 50 milliseconds
//since it takes that long for the sensor to stablize
if ( millis() >= range_time ){
int r =0;
range_msg.range = getRange_Ultrasound(0);
range_msg.header.stamp = nh.now();
pub_range.publish(&range_msg);
range_msg1.range = getRange_Ultrasound(1);
range_msg1.header.stamp = nh.now();
pub_range1.publish(&range_msg1);
range_time = millis() + 50;
}
nh.spinOnce();
}
I could not found the reason for the problem. Is there anyone can suggest a solution to that problem?
Thanks
↧