Robotics StackExchange | Archived questions

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
observation
persistence: 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
decay
model: 0
voxelsize: 0.05
track
unknownspace: true
max
obstacleheight: 1.75
unknown
threshold: 15.0
markthreshold: 0
update
footprintenabled: true
combination
method: 1
obstaclerange: 5.0 originz: 0.0
publishvoxelmap: true
transformtolerance: 0.2
mapping
mode: false
mapsaveduration: 60.0
observationsources: rgbd1mark rgbd1_clear

rgbd1_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
robot
baseframe: basefootprint

updatefrequency: 18.0
publish
frequency: 11.0
transform_tolerance: 0.2

staticmap: true
rolling
window: true

width: 15 height: 15 originx: 0.0
origin
y: 0.0

plugins:

- {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
robot
baseframe: basefootprint

updatefrequency: 15.0
publish
frequency: 12.0
transform_tolerance: 0.5

static_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

Answers