Quick notes on how to set up the environment, launch the simulator, and extend it with custom tracks.
- Premade tracks live in the shared archive on drive.
Select all, download, and unzip the files in the
maps/folder so each bundle sits undermaps/(e.g.,maps/l_track/l_track.usd).
- Clone the repository and install uv:
You will need
git clone [email protected]:AhmadAmine998/NonPlanarIsaacSim.git pip install uv
uvto install and run the simulator. - Install dependencies (one-time):
bash install_env.sh
- Load the environment for every new shell before running the sim:
source setup_env.sh - Start the ROS-enabled Isaac sim:
The script picks the map referenced by
uv run python ros_sim.py
MAP_IDXinros_sim.pyand will open the simulator GUI once the assets load.
- Run keyboard teleop with
ros2 run teleop_twist_keyboard teleop_twist_keyboard, which publishesgeometry_msgs/Twistoncmd_vel. - Any higher-level controller should publish
AckermannDriveStampedto eitherackermann_cmdor/driveto command speed/steering directly, or publishTwistoncmd_vel. - The node republishes odometry on
/fixposition/odometryand ground-truth drive states on/ground_truth/statefor downstream consumers.
- Place each new asset in its own subfolder inside
maps/(e.g.,maps/new_map/new_map.usdplus any textures or dependencies) to keep things organized. - Supported formats are
.usd,.usda,.usdz,.usdc,.obj, and.ply. Meshes are auto-converted to USD on first use and cached in.converted_maps/. - Add the new file path to
AVAILABLE_MAPSinros_sim.py, setMAP_IDXto point to it, and updateINITIAL_POSITION_PER_MAPso the rig spawns above the correct location/scale.
That is all that is required; just remember to re-run source setup_env.sh in any new terminal before launching the simulator.