LRAE is a Large-Region-Aware Exploration method that enables a ground robot to autonomously explore uneven terrains.
To obtain high exploration efficiency, LRAE adopts a large-region-aware exploration route optimization strategy that prioritizes exploring large regions while also considering exploring nearby small regions. To safely and completely explore uneven terrains, LRAE fully introduces traversability information to extract unknown regions and assess exploration safety levels. The safety levels are then integrated into the design of the exploration strategy to ensure safe robotic exploration. We validate LRAE in various challenging simulation scenes and real-world wild uneven terrains. The results show that our method can safely explore uneven terrains and improve exploration efficiency by up to 45.3% compared with state-of-the-art methods.
Video Link: Video on Youtube; Video on Bilibili
Related Paper: Paper on IEEE
Q. Bi, X. Zhang, S. Zhang, R. Wang, L. Li and J. Yuan, "LRAE: Large-Region-Aware Safe and Fast Autonomous Exploration of Ground Robots for Uneven Terrains," in IEEE Robotics and Automation Letters, vol. 9, no. 12, pp. 11186-11193.
(If it is useful to you, please cite our paper and ⭐️ our code.)
- LRAE has been tested on Ubuntu 20.04 with ROS Noetic, please run the following commands to install required dependencies or tools:
sudo apt-get install ros-noetic-gazebo-* \
ros-noetic-gazebo-ros-control* \
ros-noetic-controller-* \
ros-noetic-ros-controllers \
ros-noetic-ros-control \
ros-noetic-tf2-* \
ros-noetic-velodyne-* \
ros-noetic-robot-state-publisher* \
ros-noetic-joint-state-controller* \
ros-noetic-velocity-controllers*
- In addition, we recommend that you download gazebo_models and Supplementary Gazebo Models for LRAE to the directory
~/.gazebo/models
.
Then simply clone and compile our package:
cd ${YOUR_WORKSPACE_PATH}/src
git clone [email protected]:NKU-MobFly-Robotics/LRAE.git
cd ../
catkin_make
-
resource not found: velodyne_description ROS path [0]=/opt/ros/noetic/share/ros ROS path [1]=/${YOUR_WORKSPACE_PATH}/src ROS path [2]=/opt/ros/noetic/share
sudo apt-get install ros-noetic-velodyne-*
-
E: Unable to locate package ros-noetic-velodyne-* E: Couldn't find any package by glob 'ros-noetic-velodyne-*' E: Couldn't find any package by regex 'ros-noetic-velodyne-*'
sudo apt-get update
-
[INFO] [1724678398.723761, 1733.140000]: Loading controller: scout_motor_rr_controller [ERROR] [1724678398.729870298, 1733.145000000]: Could not load controller 'scout_motor_rr_controller' because controller type 'velocity_controllers/JointVelocityController' does not exist. [ERROR] [1724678398.729950407, 1733.146000000]: Use 'rosservice call controller_manager/list_controller_types' to get the available types [ERROR] [1724678399.731316, 1733.943000]: Failed to load scout_motor_rr_controller
sudo apt-get install ros-noetic-ros-controllers ros-noetic-ros-control
-
Some common issues can also be referred to on the "Issues" page.
After the compilation is successful, you need to open two terminals and run the following two commands.
source devel/setup.bash && roslaunch fitplane simulation_scene1.launch
source devel/setup.bash && roslaunch lrae_planner exploration_scene1.launch
After running the above two commands, if you can see the red route path, the purple exploration path, the green local path, and the robot has begun moving to explore in the RVIZ interface, it means that LRAE has started successfully.
We have designed four testing scenes with different characteristics and sizes:
If you want to run LRAE in Scene 2, you need to modify the above two commands to:
source devel/setup.bash && roslaunch fitplane simulation_scene2.launch
source devel/setup.bash && roslaunch lrae_planner exploration_scene2.launch
For Scene 3 and Scene 4, the method is the same as above.
Schematic diagram of some parameters:
We assume that exploration problems have boundaries, otherwise, exploration will continue indefinitely.
Therefore, you need first to define the exploration boundary for the robot according to the scene, then set the parameters of the globalMapData
according to the exploration boundary to ensure that the range of the exploration boundary is within the range of the globalMapData
.
Please follow the following steps:
Let the robot's initial position be the coordinate origin, the robot's orientation be the positive direction of the x-axis, and the y-axis follows the right-hand coordinate system, the range of the exploration boundary in this coordinate system should be within the range of globalMapData
determined by the four parameters map_w
, map_h
, mapinitox
, and mapinitoy
in node “exploration_map_merge”:
- Add the following parameters to node “Traversibility_mapping”:
<param name="use_ex_range" value="true"/>
<param name="ex_robot_back" value="-10.0"/>
<param name="ex_robot_right" value="-10.0"/>
<param name="ex_robot_front" value="50.0"/>
<param name="ex_robot_left" value="50.0"/>
- Modify the following parameters of the
globalMapData
in node “exploration_map_merge”:
<param name="map_w" type="int" value="200" />
<param name="map_h" type="int" value="200" />
<param name="mapinitox" type="double" value="-10.0" />
<param name="mapinitoy" type="double" value="-10.0" />
- The conditions that need to be met between parameters:
- If it is necessary to define the exploration boundary,
use_ex_range
is true; otherwise, it is false; -
ex_robot_front
represents the farthest distance that can be explored along the positive x-axis; -
ex_robot_back
represents the farthest distance that can be explored along the negative x-axis; -
ex_robot_left
represents the farthest distance that can be explored along the positive y-axis; -
ex_robot_right
represents the farthest distance that can be explored along the negative y-axis; -
map_w
is greater than or equal to ((ex_robot_front
+ abs(ex_robot_back
)) / map resolution) then round up -
map_h
is greater than or equal to ((ex_robot_left
+ abs(ex_robot_right
)) / map resolution) then round up; - note: map resolution has been set to 0.3 in this code repository;
-
mapinitox
is less than or equal toex_robot_back
; -
mapinitoy
is less than or equal toex_robot_right
; - In conclusion, the exploration boundary range defined by the “Traversibility_mapping” node must be entirely within the range of the
globalMapData
determined by the “exploration_map_merge” node.
- If it is necessary to define the exploration boundary,
Main parameters affecting terrain traversability analysis:
float max_angle_ = 40.0;
float max_flatness_ = 0.01;
float w1_ = 0.8;
Main parameters affecting exploration performance:
<param name="angle_pen" type="double" value ="0.45" />
<param name="update_cen_thre" type="int" value="6" />
<param name="unknown_num_thre" type="int" value ="200" />
<param name="minrange" type="double" value="20.0" />
<param name="limit_max_square" type="bool" value ="true" />
<param name="use_go_end_nearest" type="bool" value="true" />
<param name="end_neacen_disthre" type="double" value ="10.0" />
<param name="end_cur_disrate" type="double" value="2.0" />
If the robot ends up exploring some tiny unknown regions back and forth, please increase the unknown_num_thre
parameter appropriately.
We sincerely appreciate the following open source projects: FAEL, TARE, PUTN, and Ji Zhang's local_planner.