Creating new workspace error with stretch_description

Hi! I’ve been trying now for a few hours with no luck to create a new ament workspace on my Stretch RE1 (With Ubunto 22.04 and ROS2 and all that). I’m running this command

./factory/22.04/stretch_create_ament_workspace.sh -w ~/space_ws

When I run this, everything is fine up until it compiles the workspace, which then spits out this error:

###########################################
CREATING HUMBLE AMENT WORKSPACE at /home/hello-robot/space_ws
###########################################
Ensuring correct version of ROS is sourced…
Deleting /home/hello-robot/space_wsif it already exists…
Creating the workspace directory…
Cloning the workspace’s packages…
Fetch ROS packages’ dependencies (this might take a while)…
Install web interface dependencies…
Generating web interface certs…
Compile the workspace (this might take a while)…
Source setup.bash file…
Updating port privledges…
Update ~/.bashrc dotfile to source workspace…
Updating meshes and xacros to ROS from stretch_urdf package.
Setup uncalibrated robot URDF…
update_uncalibrated_urdf.py ERROR: Traceback (most recent call last):
File “/opt/ros/humble/local/lib/python3.10/dist-packages/xacro/init.py”, line 1012, in parse
inp = f = open(filename)
FileNotFoundError: [Errno 2] No such file or directory: ‘/home/hello-robot/space_ws/src/stretch_ros2/stretch_description/urdf/stretch_description.xacro’

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File “/opt/ros/humble/local/lib/python3.10/dist-packages/xacro/init.py”, line 1119, in _process
doc = process_file(input_file_name, **opts)
File “/opt/ros/humble/local/lib/python3.10/dist-packages/xacro/init.py”, line 1096, in process_file
doc = parse(None, input_file_name)
File “/opt/ros/humble/local/lib/python3.10/dist-packages/xacro/init.py”, line 1016, in parse
raise XacroException(e.strerror + ": " + e.filename, exc=e)
xacro.XacroException: No such file or directory: /home/hello-robot/space_ws/src/stretch_ros2/stretch_description/urdf/stretch_description.xacro [Errno 2] No such file or directory: ‘/home/hello-robot/space_ws/src/stretch_ros2/stretch_description/urdf/stretch_description.xacro’

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File “/opt/ros/humble/lib/xacro/xacro”, line 33, in
sys.exit(load_entry_point(‘xacro==2.0.8’, ‘console_scripts’, ‘xacro’)())
File “/opt/ros/humble/local/lib/python3.10/dist-packages/xacro/init.py”, line 1171, in main
_process(input_file_name, vars(opts))
File “/opt/ros/humble/local/lib/python3.10/dist-packages/xacro/init.py”, line 1124, in _process
except xml.parsers.expat.ExpatError as e:
AttributeError: module ‘xml’ has no attribute ‘parsers’

I’m not sure if it matters, but feel its worth noting, I’m not using an Tool on the End of Arm. As such, I’ve changed the stretch_user_params.yaml to reflect that. I have NOT changed the urdf yet, so would that be an issue? Thanks in advance!

Found the issue and created a new issue on the github. I’m sure it’ll be fixed in the coming days, but for anyone else having this issue, basically the script that was copying over the URDF files from the stretch_urdf package in python had the directory to copy to hard coded to be ament_ws. Which is why it works fine when creating ament_ws during the system setup the first time and when you upgrade OS’s, but not when you create new workspaces.
I’m not sure if this actually is an issue or anything, since I might just be missing something, but if you are having the same problem I had and they haven’t fixed the bug yet, just change line 62 of stretch_urdf_ros_update.py.

/home/hello-robot/.local/bin/stretch_urdf_ros_update.py:

def verify_ros():
global ros_version, ros_repo_path
ros_version = get_ros_version()

if ros_version is None:
    print("Unable to find a valid ROS Installation")
    sys.exit()

if ros_version==2:
    ros_repo_path = '/home/hello-robot/mercer_ws/src/stretch_ros2' #<---------- This line
    if not os.path.exists(ros_repo_path):
        print("Unable to find stretch_ros2 packages folder in '~/ament_ws/src/'.")
        sys.exit(1)
else:
    ros_repo_path = '/home/hello-robot/catkin_ws/src/stretch_ros'
    if not os.path.exists(ros_repo_path):
        print("Unable to find stretch_ros packages folder in '~/catkin_ws/src/'.")
        sys.exit(1)

Hi @byrnete, Thank you so much for raising this issue. After fixing it, I can get back to you by removing the hard-coded workspace name and trying to make the script agnostic to other work spaces.

1 Like

@byrnete I have updated the script with this commit, which removes the hard-coded workspace. It should be able to find the stretch description package path under the stretch_ros2 repository existing within any workspace now.
Upgrade your Stretch URDF package

pip3 install -U hello-robot-stretch-urdf

Let me know if this solves your issue.

1 Like