Back to Projects
Dexsent_round2
Auto-synced

Dexsent_round2

Dual-arm Fanuc CRX-10iA robotic system with ros2_control, Cartesian control, and synchronized motion - ROS2 Humble

Fanuc CRX-10iA Dual-Arm ROS2 System

A complete ROS2 Humble implementation of a dual-arm robotic system using two Fanuc CRX-10iA collaborative robots with Robotiq grippers.

ROS2 Humble ROS2 Build & Test License

Version History / Milestones

TagDescriptionView Code
v1.0-task1Task 1 Complete: Robot Setup & Gripper Integrationgit checkout v1.0-task1
v2.0-task2Task 2 Complete: Dual-Arm Cartesian Controlgit checkout v2.0-task2
HEADLatest: Documentation, CI, and refinementsgit checkout master

For reviewers: Use tags to view the code at each milestone completion.

Project Overview

This project implements a dual-arm robotic workcell with:

  • Two Fanuc CRX-10iA robots mounted at 45° angles
  • Robotiq 2F-85 grippers on each arm
  • ros2_control integration with fake hardware
  • Cartesian control capability
  • Synchronized dual-arm motion

Demo Videos

Task 1: Single Arm with Gripper

Download Task 1 Demo

Task 2: Dual-Arm Synchronized Motion

Download Working Demo


Repository Structure

Dexsent_round2/
├── .github/workflows/
│   └── ros2-ci.yml              # GitHub Actions CI/CD
├── src/
│   ├── fanuc_crx10ia_description/   # Single arm URDF + meshes
│   └── fanuc_dual_arm_description/  # Dual-arm system + control
├── docs/
│   ├── imgs/                    # Reference images
│   ├── vids/                    # Demo videos
│   ├── references/              # Research papers
│   ├── report.pdf               # Technical report (1-2 pages)
│   ├── task1_robot_setup.md     # Task 1 documentation
│   ├── task2_cartesian_control.md   # Task 2 documentation
│   ├── architecture.md          # System architecture
│   ├── troubleshooting.md       # Common issues & fixes
│   ├── flex.md                  # Project highlights
│   └── my_exp.md                # Development experience
├── docker-compose.yml
├── Dockerfile
├── docker-entrypoint.sh
└── README.md

Quick Start

Prerequisites

  • Docker & Docker Compose
  • X11 display server (for RViz)

1. Clone & Build

git clone https://github.com/ashwin-r11/Dexsent_round2.git

cd  Dexsent_round2

# Allow X11 forwarding
xhost +local:docker

# Start Docker environment
docker compose up -d
docker compose exec ros2-dev bash

2. Build Workspace

source /opt/ros/humble/setup.bash
colcon build
source install/setup.bash

3. Launch

Task 1: Single Arm with Gripper

Display Mode (with joint sliders):

ros2 launch fanuc_crx10ia_description display.launch.py

Control Mode (with ros2_control):

ros2 launch fanuc_crx10ia_description bringup.launch.py

Run Demo:

# In another terminal
python3 /ros2_ws/src/fanuc_crx10ia_description/scripts/trajectory_demo.py

Task 2: Dual-Arm with Cartesian Control

Display Mode (with joint sliders):

ros2 launch fanuc_dual_arm_description display.launch.py

Control Mode (with Cartesian controller):

ros2 launch fanuc_dual_arm_description dual_arm_cartesian.launch.py

Run Demo:

# In another terminal
python3 /ros2_ws/src/fanuc_dual_arm_description/scripts/pick_place_demo.py

Tasks Completed

Task 1: Robot Setup & Gripper Integration

  • Fanuc CRX-10iA loaded into ROS2
  • Robot displayed in RViz
  • Joint trajectory execution via ros2_control
  • Robotiq gripper integrated
  • FollowJointTrajectory support

See Task 1 Documentation

Task 2: Dual-Arm Cartesian Control

  • Two robots mounted at 45° angles
  • Cartesian control implemented
  • Synchronized dual-arm motion
  • Pick-and-place demo with gripper control

See Task 2 Documentation

📄 Technical Report (PDF) — Architecture, challenges, solutions, and design decisions


Architecture

┌─────────────────────────────────────────────────────────┐
│                    ROS2 Humble                          │
├─────────────────────────────────────────────────────────┤
│     RViz2          Controller Manager     Cartesian     │
│                                           Controller    │
├─────────────────────────────────────────────────────────┤
│                     ros2_control                        │
│   Left Arm Controller    │    Right Arm Controller      │
│   Left Gripper           │    Right Gripper             │
├─────────────────────────────────────────────────────────┤
│              Fake Hardware Interface                    │
│           (fake_components/GenericSystem)               │
└─────────────────────────────────────────────────────────┘

See Full Architecture


Packages

PackageDescription
fanuc_crx10ia_descriptionSingle arm URDF, meshes, and basic launch
fanuc_dual_arm_descriptionDual-arm URDF, controllers, demos

Available Launch Files

Launch FileDescription
display.launch.pyRViz + joint_state_publisher_gui (for testing)
dual_arm_bringup.launch.pyros2_control without Cartesian node
dual_arm_cartesian.launch.pyFull system with Cartesian control

Controller Configuration

Defined in dual_arm_controllers.yaml:

  • joint_state_broadcaster
  • left_arm_controller (JointTrajectoryController)
  • right_arm_controller (JointTrajectoryController)
  • left_gripper_controller (GripperActionController)
  • right_gripper_controller (GripperActionController)

Design Decisions

DecisionRationale
Fake HardwareUsing fake_components/GenericSystem for simulation
Simple IKGeometric IK for demo (production would use KDL/MoveIt)
Symmetric Mounting45° roll for each arm creating V-shape
Delta-based MotionDemo uses deltas from neutral pose for symmetric motion

References

Environment Setup

Dual-Arm Robotics

Mounting Reference Sketch

Sketch by: Ashwin R

Dual-Arm Mounting Sketch

Motion Planning

Grippers & End Effectors

Robot Specifications


License

BSD-3-Clause


Author

Ashwin R

Developed for DexSent Robotics Technical Screening