feat(udp_teleop): add vision grasp bringup launch file
Bundles arm_control + vision_grasp + optional box_detection_grasp into single ros2 launch. Launch arguments: detection (enable YOLO), auto_grasp, udp_ip, show_debug. Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
75
ros2/src/udp_teleop/launch/vision_grasp.launch.py
Normal file
75
ros2/src/udp_teleop/launch/vision_grasp.launch.py
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""视觉抓取 bringup:机械臂控制 + 视觉抓取 + (可选) YOLO 方框检测。
|
||||||
|
|
||||||
|
组件依赖:arm_control → vision_grasp → box_detection_grasp
|
||||||
|
三个节点通过 ROS 服务通信,启动顺序由 lifecycle 自发处理。
|
||||||
|
|
||||||
|
用法:
|
||||||
|
ros2 launch udp_teleop vision_grasp.launch.py
|
||||||
|
ros2 launch udp_teleop vision_grasp.launch.py udp_ip:=192.168.4.1 detection:=true
|
||||||
|
ros2 launch udp_teleop vision_grasp.launch.py detection:=true auto_grasp:=true
|
||||||
|
"""
|
||||||
|
|
||||||
|
import os
|
||||||
|
|
||||||
|
from ament_index_python.packages import get_package_share_directory
|
||||||
|
from launch import LaunchDescription
|
||||||
|
from launch.actions import DeclareLaunchArgument
|
||||||
|
from launch.conditions import IfCondition
|
||||||
|
from launch.substitutions import LaunchConfiguration
|
||||||
|
from launch_ros.actions import Node
|
||||||
|
|
||||||
|
|
||||||
|
def generate_launch_description():
|
||||||
|
pkg_share = get_package_share_directory('udp_teleop')
|
||||||
|
|
||||||
|
arm_params = os.path.join(pkg_share, 'config', 'arm_control.yaml')
|
||||||
|
vision_params = os.path.join(pkg_share, 'config', 'vision_grasp.yaml')
|
||||||
|
detection_params = os.path.join(pkg_share, 'config', 'box_detection_grasp.yaml')
|
||||||
|
|
||||||
|
detection = LaunchConfiguration('detection')
|
||||||
|
auto_grasp = LaunchConfiguration('auto_grasp')
|
||||||
|
udp_ip = LaunchConfiguration('udp_ip')
|
||||||
|
show_debug = LaunchConfiguration('show_debug')
|
||||||
|
|
||||||
|
return LaunchDescription([
|
||||||
|
DeclareLaunchArgument('detection', default_value='false',
|
||||||
|
description='是否启动 YOLO 方框检测节点'),
|
||||||
|
DeclareLaunchArgument('auto_grasp', default_value='false',
|
||||||
|
description='检测到方框后自动抓取'),
|
||||||
|
DeclareLaunchArgument('udp_ip', default_value='192.168.245.67',
|
||||||
|
description='ESP32 UDP IP 地址'),
|
||||||
|
DeclareLaunchArgument('show_debug', default_value='false',
|
||||||
|
description='显示 YOLO 检测调试窗口'),
|
||||||
|
|
||||||
|
# ===== arm_control =====
|
||||||
|
Node(
|
||||||
|
package='udp_teleop',
|
||||||
|
executable='arm_control',
|
||||||
|
name='arm_control',
|
||||||
|
output='screen',
|
||||||
|
parameters=[arm_params, {'udp_ip': udp_ip}],
|
||||||
|
),
|
||||||
|
|
||||||
|
# ===== vision_grasp =====
|
||||||
|
Node(
|
||||||
|
package='udp_teleop',
|
||||||
|
executable='vision_grasp',
|
||||||
|
name='vision_grasp',
|
||||||
|
output='screen',
|
||||||
|
parameters=[vision_params],
|
||||||
|
),
|
||||||
|
|
||||||
|
# ===== box_detection_grasp (可选) =====
|
||||||
|
Node(
|
||||||
|
package='udp_teleop',
|
||||||
|
executable='box_detection_grasp',
|
||||||
|
name='box_detection_grasp',
|
||||||
|
output='screen',
|
||||||
|
parameters=[detection_params, {
|
||||||
|
'auto_grasp': auto_grasp,
|
||||||
|
'show_debug_window': show_debug,
|
||||||
|
}],
|
||||||
|
condition=IfCondition(detection),
|
||||||
|
),
|
||||||
|
])
|
||||||
@@ -15,6 +15,8 @@ setup(
|
|||||||
('share/' + package_name, ['package.xml']),
|
('share/' + package_name, ['package.xml']),
|
||||||
(os.path.join('share', package_name, 'config'),
|
(os.path.join('share', package_name, 'config'),
|
||||||
glob('config/*.yaml')),
|
glob('config/*.yaml')),
|
||||||
|
(os.path.join('share', package_name, 'launch'),
|
||||||
|
glob('launch/*.launch.py')),
|
||||||
(os.path.join('share', package_name, 'models'),
|
(os.path.join('share', package_name, 'models'),
|
||||||
glob('models/*.pt')),
|
glob('models/*.pt')),
|
||||||
],
|
],
|
||||||
|
|||||||
Reference in New Issue
Block a user