Skip to content
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ For hardware we run the UR pendantless, which is a two part launch process:
```bash
# To launch the hardware robot, first deploy the UR tools to activate the dashboard client
# in its own long-lived shell.
ros2 launch chonkur_deploy ur_tools.launch.py
ros2 launch chonkur_deploy chonkur_comm.launch.py

# Start the hardware interfaces for the rail, lift, and ChonkUR.
ros2 launch clr_deploy clr_hw.launch.py
Expand Down
2 changes: 1 addition & 1 deletion chonkur/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ For hardware we run the UR pendantless, which is a two part launch process:
```bash
# To launch the hardware robot, first deploy the UR tools to activate the dashboard client
# in its own long-lived shell.
ros2 launch chonkur_deploy ur_tools.launch.py
ros2 launch chonkur_deploy chonkur_comm.launch.py
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should this be run on controls or console?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think running hande tool comm would benefit from being on controls but everything else should run on console. I'm going to separate those too out in the launch file and readme then merge this today


# Then start the hardware interface.
ros2 launch chonkur_deploy chonkur_hw.launch.py
Expand Down
14 changes: 14 additions & 0 deletions chonkur/chonkur_deploy/config/drt_ur_gui_config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
drt_ur_gui:
ros__parameters:
program: "ext_ctrl.urp"
window.name: "DRT UR Remote Commander: Single Arm Testing Configuration"
window.stylesheet: |
QMainWindow {
background-color: darkgrey;
color: #000000;
}
QPlainTextEdit {
background-color: lightgrey;
color: #000000;
font-size: 8px;
}
133 changes: 133 additions & 0 deletions chonkur/chonkur_deploy/launch/chonkur_comm.launch.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
#!/usr/bin/env python3
#
# Copyright (c) 2025, United States Government, as represented by the
# Administrator of the National Aeronautics and Space Administration.
#
# All rights reserved.
#
# This software is licensed under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with the
# License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.

import os

from launch import LaunchDescription
from launch.actions import DeclareLaunchArgument
from launch.substitutions import LaunchConfiguration
from launch_ros.actions import Node
from chonkur_deploy.launch_helpers import include_launch_file
from ament_index_python.packages import get_package_share_directory


def generate_launch_description():

# Declare arguments
declared_arguments = []
declared_arguments.append(
DeclareLaunchArgument(
"namespace",
default_value="",
description="Namespace for the robot.",
)
)
declared_arguments.append(
DeclareLaunchArgument(
"headless_mode",
default_value="true",
description="Enable headless mode for robot control",
)
)
declared_arguments.append(
DeclareLaunchArgument(
"robot_ip",
default_value="192.168.1.102",
description="IP address by which the robot can be reached.",
)
)
declared_arguments.append(
DeclareLaunchArgument(
"hande_dev_name",
default_value="/tmp/ttyUR",
description="File descriptor that will be generated for the tool communication device. "
"The user has be be allowed to write to this location. ",
)
)
declared_arguments.append(
DeclareLaunchArgument(
"tool_tcp_port",
default_value="54321",
description="Remote port that will be used for bridging the tool's serial device. "
"Only effective, if use_tool_communication is set to True.",
Copy link
Contributor

@ndunkelb-nasa ndunkelb-nasa Feb 10, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think this is true? This may have been copied from somewhere, but it was probably wrong there too lol. Can just take out the second line, unless you know if this is the case.

)
)

# Initialize Arguments
namespace = LaunchConfiguration("namespace")
headless_mode = LaunchConfiguration("headless_mode")
robot_ip = LaunchConfiguration("robot_ip")
hande_dev_name = LaunchConfiguration("hande_dev_name")
tool_tcp_port = LaunchConfiguration("tool_tcp_port")

robot_state_helper_node = Node(
package="ur_robot_driver",
executable="robot_state_helper",
name="ur_robot_state_helper",
output="screen",
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

And for the rest of these,

Suggested change
output="screen",
output="both",

parameters=[
{"headless_mode": headless_mode},
{"robot_ip": robot_ip},
],
)

urscript_interface = Node(
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Because I know nothing about hardware, do we interact with the script interface from the GUI?

package="ur_robot_driver",
executable="urscript_interface",
parameters=[{"robot_ip": robot_ip}],
output="screen",
)

ur_dashboard_client = Node(
package="ur_robot_driver",
executable="dashboard_client",
name="dashboard_client",
output="screen",
parameters=[{"robot_ip": robot_ip}],
)

hande_comm_node = Node(
name="ur_tool_communication_hande",
package="ur_robot_driver",
executable="tool_communication.py",
namespace=namespace,
output="both",
parameters=[
{
"robot_ip": robot_ip,
"tcp_port": tool_tcp_port,
"device_name": hande_dev_name,
}
],
)

gui_config_path = os.path.join(get_package_share_directory("chonkur_deploy"), "config", "drt_ur_gui_config.yaml")

ur_gui = include_launch_file(
package_name="drt_ur_gui",
launch_file="one_arm.launch.py",
launch_arguments={
"ns": namespace,
"config_file_path": gui_config_path,
}.items(),
)

nodes = [robot_state_helper_node, urscript_interface, ur_dashboard_client, hande_comm_node, ur_gui]

return LaunchDescription(declared_arguments + nodes)
Loading