Skip to content

About

Dual-robot cell performing holding and welding at the same time with integrated grasp sampler and weld finder

Topics

Resources

Stars

31 stars

Watchers

2 watching

Forks

Repository files navigation

Hold and Weld

A ROS 2 framework for automated dual-arm robotic welding systems that perform holding and welding simultaneously with integrated grasp sampler and weld finder. Currently at PoC stage. Targets ROS 2 Jazzy.

hold_and_weld.mp4

Packages

Key packages have detailed READMEs.

Architecture

System Architecture

Capabilities

  • Weld seam extraction from CAD and mesh geometry
  • Constraint-aware grasp sampling on exact CAD surfaces
  • Dual-arm coordination connecting both into an executable workcell

Results

Grasp candidates example generated by hold_and_weld_gripper_sampler:

Prism Grasp

Weld seam extraction example via the mesh pipeline in hold_and_weld_planning:

Cylinder Weld Finding

Quick Start

Ubuntu 24.04 with ROS 2 Jazzy. The repo is expected at <ws>/src/hold_and_weld.

Docker (instead of steps 1–4)

The image builds OpenCASCADE and pythonocc-core from source, so the first build takes a while.

cd <ws>/src/hold_and_weld
docker build -t hold_and_weld .
xhost +local:docker
docker run -it --rm --net=host -e DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix \
  --device /dev/dri hold_and_weld ros2 launch hold_and_weld_bringup system_bringup.launch.py

1. ROS and system dependencies

MoveIt 2, Gazebo, Ceres, FCL, Embree and the rest come from rosdep:

cd <ws>
rosdep install --from-paths src --ignore-src -y

2. Python dependencies

pip install --user --break-system-packages -r src/hold_and_weld/requirements.txt

3. OpenCASCADE 7.9.3 and pythonocc-core 7.9.0

These are built from source: apt only ships OCCT 7.6, and pythonocc-core is not on pip. pythonocc-core must be built against the same OCCT.

sudo apt install cmake swig python3-dev python3-numpy rapidjson-dev tcl-dev tk-dev \
  libfreetype-dev libgl1-mesa-dev libxi-dev libxmu-dev

git clone --depth 1 -b V7_9_3 https://github.com/Open-Cascade-SAS/OCCT.git
cmake -S OCCT -B OCCT/build -DCMAKE_BUILD_TYPE=Release \
  -DCMAKE_INSTALL_PREFIX=$HOME/tools/occt_7.9.3
cmake --build OCCT/build -j$(nproc) && cmake --install OCCT/build

git clone --depth 1 -b 7.9.0 https://github.com/tpaviot/pythonocc-core.git
# 7.9.0 asks for SWIG 4.2.1; Ubuntu 24.04 ships 4.2.0, which builds it fine
sed -i 's/find_package(SWIG 4.2.1/find_package(SWIG 4.2.0/' pythonocc-core/CMakeLists.txt
cmake -S pythonocc-core -B pythonocc-core/build -DCMAKE_BUILD_TYPE=Release \
  -DOCCT_INCLUDE_DIR=$HOME/tools/occt_7.9.3/include/opencascade \
  -DOCCT_LIBRARY_DIR=$HOME/tools/occt_7.9.3/lib \
  -DPYTHONOCC_INSTALL_DIRECTORY=$(python3 -m site --user-site)/OCC \
  -DPYTHONOCC_MESHDS_NUMPY=ON
cmake --build pythonocc-core/build -j$(nproc) && cmake --install pythonocc-core/build

Add to your shell rc, so CMake and the runtime find OCCT:

export CASROOT=$HOME/tools/occt_7.9.3
export CMAKE_PREFIX_PATH=$CASROOT:$CMAKE_PREFIX_PATH
export LD_LIBRARY_PATH=$CASROOT/lib:$LD_LIBRARY_PATH

4. Build

colcon build --symlink-install
source install/setup.bash

5. Launch the system

ros2 launch hold_and_weld_bringup system_bringup.launch.py

For comprehensive guide for usage see USAGE.md. For adding a new robot to the workcell see ADDING_A_ROBOT.md. For the development roadmap see ROADMAP.md, including the planned AI-based improvements: behavior trees checked in OmniSim before they run, primary models picking grasps and approach configurations, and grasp dataset generation.

References

Duff, T., Burgess, B., & Hery, C. (2017). Building an orthonormal basis, revisited. Journal of Computer Graphics Techniques (JCGT), 6(1), 1–8.

Acknowledgements

The robot and gripper models in hold_and_weld_description come from these projects. Thanks to their authors and maintainers.

Model Source License
Yaskawa GP25, AR2010 ros-industrial/motoman BSD-3-Clause
Yaskawa HC10DT, GP8L Yaskawa-Global/motoman_ros2_support_packages BSD-3-Clause
OnRobot 2FG7 juandpenan/onrobot_2FG7_gripper_description MIT
Rethink Robotics electric gripper RethinkRobotics/baxter_common BSD-3-Clause
Robotiq 2F-140 ros-industrial/robotiq BSD-3-Clause
Schunk PG 70 ipa320/schunk_modular_robotics Apache-2.0

Their license texts are in hold_and_weld_description/vendor/.

License

Apache-2.0, see LICENSE. The vendored robot and gripper models keep their own licenses, listed above. The Docker image also ships OpenCASCADE (LGPL-2.1 with the OCCT exception) and pythonocc-core (LGPL-3.0); their license texts are in the image under /opt/occt/share/doc/opencascade/ and /opt/pythonocc/.

About

Dual-robot cell performing holding and welding at the same time with integrated grasp sampler and weld finder

Topics

Resources

Stars

31 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages