diff --git a/doc/c-tutorials/direct-geometry.md b/doc/c-tutorials/direct-geometry.md
index d10501abc6e01e609a96ac17e3a147a1177643b7..e425b58a3aee6c848b3babb2bb01d16f6d4b9103 100644
--- a/doc/c-tutorials/direct-geometry.md
+++ b/doc/c-tutorials/direct-geometry.md
@@ -4,9 +4,10 @@
 
 ```py
 from pinocchio.robot_wrapper import RobotWrapper
+from os.path import join
 
-PKG = '/opt/openrobots/share/'
-URDF = PKG + 'ur5_description/urdf/ur5_gripper.urdf'
+PKG = '/opt/openrobots/share'
+URDF = join(PKG, 'ur5_description/urdf/ur5_gripper.urdf'@
 
 robot = RobotWrapper(URDF, [PKG])
 ```
diff --git a/doc/c-tutorials/inverse-kinematics.md b/doc/c-tutorials/inverse-kinematics.md
index f4e99d8406f788e153f36766bfde95569530ed2a..0bdbeb788071f61fa4d40570546b0d80e4464536 100644
--- a/doc/c-tutorials/inverse-kinematics.md
+++ b/doc/c-tutorials/inverse-kinematics.md
@@ -4,9 +4,10 @@
 
 ```py
 import pinocchio
+from os.path import join
 
-PKG = '/opt/openrobots/share/'
-URDF = PKG + 'ur5_description/urdf/ur5_gripper.urdf'
+PKG = '/opt/openrobots/share'
+URDF = join(PKG, 'ur5_description/urdf/ur5_gripper.urdf')
 
 robot = pinocchio.robot_wrapper.RobotWrapper(URDF, [PKG])
 robot.initDisplay(loadModel=True)
diff --git a/doc/d-labs/1-directgeom.md b/doc/d-labs/1-directgeom.md
index 85cdef6351c08da62038e73a9449941ace2a99be..84ded87ed675fa51ea71a6baa3a1e77e306db6d4 100644
--- a/doc/d-labs/1-directgeom.md
+++ b/doc/d-labs/1-directgeom.md
@@ -127,9 +127,10 @@ of pinocchio (available in the homedir of the VBox).
 
 ```py
 from pinocchio.robot_wrapper import RobotWrapper
+from os.path import join
 
 PKG = '/opt/openrobots/share'
-URDF = PKG + '/ur5_description/urdf/ur5_gripper.urdf'
+URDF = join(PKG, 'ur5_description/urdf/ur5_gripper.urdf')
 robot = RobotWrapper(URDF, [PKG])
 ```
 
diff --git a/doc/d-labs/2-invgeom.md b/doc/d-labs/2-invgeom.md
index 4c1f89d4c2e2cefa414e3fff0739924d70fe88cd..3f606dc80c03a533528985061f44614f8063b248 100644
--- a/doc/d-labs/2-invgeom.md
+++ b/doc/d-labs/2-invgeom.md
@@ -138,11 +138,12 @@ sudo apt install robotpkg-romeo-description
 Romeo can be loaded with:
 
 ```py
+from os.path import join
 import pinocchio as se3
 from pinocchio.romeo_wrapper import RomeoWrapper
 
 PKG = '/opt/openrobots/share'
-URDF = PKG + 'romeo_description/urdf/romeo.urdf'
+URDF = join(PKG, 'romeo_description/urdf/romeo.urdf')
 
 robot = RomeoWrapper(URDF, [PKG])  # Load urdf model
 robot.initDisplay(loadModel=True)
diff --git a/doc/d-labs/3-invkine.md b/doc/d-labs/3-invkine.md
index 2d71f8d1c26b83aee5c1f34f776b0126d30beee3..f8c7fe4b8f63222ae5f180b594899dde95c9c4e3 100644
--- a/doc/d-labs/3-invkine.md
+++ b/doc/d-labs/3-invkine.md
@@ -21,12 +21,13 @@ the tool. They are displayed when the robot moves.
 Example of how to use the robot is has below.
 
 ```py
+from os.path import join
 import pinocchio as se3
 from mobilerobot import MobileRobotWrapper
 from pinocchio.utils import *
 
 PKG = '/opt/openrobots/share'
-URDF = PKG + '/ur5_description/urdf/ur5_gripper.urdf'
+URDF = join(PKG, 'ur5_description/urdf/ur5_gripper.urdf')
 
 robot = MobileRobotWrapper(URDF, [PKG])
 robot.initDisplay(loadModel=True)
diff --git a/doc/d-labs/src/ur5x4.py b/doc/d-labs/src/ur5x4.py
index ae77d9d059713f679fe40b3788d30b012c63091e..1cc5fa4b52a66351c865180ebf54cf00fa397ec6 100644
--- a/doc/d-labs/src/ur5x4.py
+++ b/doc/d-labs/src/ur5x4.py
@@ -3,6 +3,8 @@ Load 4 times the UR5 model, plus a plate object on top of them, to feature a sim
 No optimization, this file is just an example of how to load the models.
 '''
 
+from os.path import join
+
 from pinocchio import SE3
 from pinocchio.robot_wrapper import RobotWrapper
 from pinocchio.utils import rotate, zero, eye, se3ToXYZQUAT, urdf
@@ -10,7 +12,7 @@ from pinocchio.utils import rotate, zero, eye, se3ToXYZQUAT, urdf
 import numpy as np
 
 PKG = '/opt/openrobots/share'
-URDF = PKG + '/ur5_description/urdf/ur5_gripper.urdf'
+URDF = join(PKG, 'ur5_description/urdf/ur5_gripper.urdf')
 
 
 def loadRobot(M0, name):