Planner and stereo vision camera
In the planner algorithm I use, my robot creates a new path against sudden obstacles according to the lidar data and reaches the target via the new path. But even though the stereo vision camera sees the obstacle, it does not update on the road and continues to go over the obstacle. What might be the cause?
[EDIT]
I am using the Neo Local Planner algorithm on the robot. I use stereo vision camera and Lidar as hardware.
1 . I give the target point with "'2D Nav Goal" from the RVIZ environment to make my robot go to the red dot in picture 1.
Image 1: https://pasteboard.co/a8zsIfn7WwYi.jpg
2 . In Picture 2, my robot forms its path with the planner and starts its path in that direction.
Image 2: https://pasteboard.co/xnXHTFwfjx19.jpg
3 . You can see the obstacles that occur when my robot sees the obstacles created by the point cloud data it receives from the camera in the picture 3-4-5, respectively. However, my robot continues on its way without making any turns against these obstacles and crashes into the obstacle.
Image 3: https://pasteboard.co/nsJsfjb9mwLc.jpg
Image 4: https://pasteboard.co/ESvIFsMMwqLI.jpg
Image 5: https://pasteboard.co/gpDn0yiMcMwt.jpg
My parameters are as follows:
commoncostmapparams.yaml
obstacle_range : 7.0
raytrace_range : 7.5
maxobstacleheight : 20
footprint: [[-0.375,-0.375],[-0.375,0.375],[0.375,0.375],[0.375,-0.375]]
footprint_padding: 0.01
resolution: 0.05
inflation_layer:
inflation_radius: 0.4
costscalingfactor: 25.0
obstacle_layer:
maptype: costmap trackunknownspace: true
observationpersistence: 0.2
observationpersistenceduration: 0.2 minobstacleheight: 0.1
maxobstacleheighht: 2.0
observationsources: laserscansensor pointcloudvoxelcam1
laserscansensor: {sensorframe:laser, datatype: LaserScan, topic:scan, marking: true, clearing: true}
pointcloudvoxelcam1: {sensorframe: camera1link, datatype: PointCloud2, topic: /voxel_grid1/output, marking:true, clearing: true}rgbdobstaclelayer_cam1:
enabled: true voxeldecay: 15.0
decaymodel: 0
voxelsize: 0.05
trackunknownspace: true
maxobstacleheight: 1.75
unknownthreshold: 15.0
markthreshold: 0
updatefootprintenabled: true
combinationmethod: 1
obstaclerange: 5.0 originz: 0.0
publishvoxelmap: true
transformtolerance: 0.2
mappingmode: false
mapsaveduration: 60.0
observationsources: rgbd1mark rgbd1_clearrgbd1_mark:
data_type: PointCloud2 topic: /voxel_grid1/output marking: true clearing: false min_obstacle_height: 0.3 max_obstacle_height: 1.0 expected_update_rate: 0.0 observation_persistence: 0.0 inf_is_valid: false filter: "passthrough" voxel_min_points: 0 clear_after_reading: true
rgbd1_clear:
data_type: PointCloud2 topic: /voxel_grid1/output marking: false clearing: true min_z: 0.3 max_z: 2.0 vertical_fov_angle: 0.8745 horizontal_fov_angle: 1.5 decay_acceleration: 5.0 model_type: 0
localcostmapparams.yaml
local_costmap:
globalframe: odom
robotbaseframe: basefootprintupdatefrequency: 18.0
publishfrequency: 11.0
transform_tolerance: 0.2staticmap: true
rollingwindow: truewidth: 15 height: 15 originx: 0.0
originy: 0.0plugins:
- {name: obstacle_layer, type: "costmap_2d::ObstacleLayer"} - {name: rgbd_obstacle_layer_cam1, type: "spatio_temporal_voxel_layer/SpatioTemporalVoxelLayer"} - {name: inflation_layer, type: "costmap_2d::InflationLayer"}
globalcostmapparams.yaml
global_costmap:
globalframe: map
robotbaseframe: basefootprintupdatefrequency: 15.0
publishfrequency: 12.0
transform_tolerance: 0.5static_map: true
width: 17
height: 17
plugins: - {name: static_layer, type: "costmap_2d::StaticLayer"} - {name: obstacle_layer, type: "costmap_2d::ObstacleLayer"} - {name: inflation_layer, type: "costmap_2d::InflationLayer"}
neo_planner.yaml
NeoLocalPlanner:
# The x acceleration limit of the robot in meters/sec^2
acclimx : 0.3
# The rotational acceleration limit of the robot in radians/sec^2
acclimtheta : 0.4
# The maximum x velocity for the robot in m/s.
maxvelx : 0.46
# The minimum x velocity for the robot in m/s, negative for backwards motion.
minvelx : -0.46
# Max velocity based on curvature [rad/s]
maxcurvevel : 0.3
# The absolute value of the maximum rotational velocity for the robot in rad/s
maxrotvel : 0.47
# The absolute value of the minimum rotational velocity for the robot in rad/s
minrotvel : 0.1
# The absolute value of the maximum translational velocity for the robot in m/s
maxtransvel : 1.7
# The absolute value of the minimum translational velocity for the robot in m/s
mintransvel : 0.1
# The tolerance in radians for the controller in yaw/rotation when achieving its goal
yawgoaltolerance : 0.785398
# The tolerance in meters for the controller in the x & y distance when achieving a goal
xygoaltolerance : 0.6
# How long to fine tune for goal position after reaching tolerance limits [s]
goaltunetime : 0.5
# How far to predict control pose into the future based on latest odometry [s]
lookahead_time : 1.0
# How far to look ahead when computing path orientation [m]
lookahead_dist : 0.3
# Threshold yaw error below which we consider to start moving [rad]
startyawerror : 0.2
# Gain when adjusting final x position for goal [1/s]
posxgain : 1
# Gain for lane keeping based on y error (differential only) [rad/s^2]
posyyaw_gain : 1
# Gain for lane keeping based on yaw error (differential only) [1/s]
yaw_gain : 0.5
# Gain for adjusting yaw when not translating, or in case of holonomic drive [1/s] staticyawgain : 1
# Gain for y cost avoidance (differential only)
costyyaw_gain: 0.1
# How far ahead to compute y cost gradient (constant offset) [m]
costylookahead_dist : 0
# How far ahead to compute y cost gradient (dynamic offset) [s]
costylookahead_time : 1
# Gain for yaw cost avoidance
costyawgain : 1
# Gain for final control low pass filter
lowpassgain : 0.5
# Max cost to allow, above we slow down to mintransvel or even stop
max_cost : 0.95
# Max distance to goal when looking for it [m]
maxgoaldist : 0.5
# Max distance allowable for backing up (zero = unlimited) [m]
maxbackupdist : 0.5
# Minimal distance for stopping [m]
minstopdist : 0.0
# If robot has differential drive, holonomic otherwise
differential_drive : true
maxupdatecount: 20
Asked by furkan_ on 2023-05-31 00:30:45 UTC
Comments
You should add some more details to help us understand your problem. Can you edit your question to add some code snippets implementing what you have described? Also a real example with pictures may help!
Asked by bluegiraffe-sc on 2023-06-05 08:35:11 UTC
Question updated.
Asked by furkan_ on 2023-06-11 15:36:21 UTC