소스 정보
- 저장소
- MIUAV/vibe-coding-ros2
- 최근 소스 활동
- 2026년 4월 3일 16:37
- 감지된 SKILL.md 언어
- 중국어
- 스타
- 26
- 포크
- 2
설치 방법
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
소스 파일 검토
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
메뉴
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/MIUAV/vibe-coding-ros2 --skill dds-qos-configuration명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
SOC 직업 분류 기준
SKILL.md 표시 중
| name | dds-qos-configuration |
| description | DDS QoS 配置技能 - QoS 策略、可靠性、持久性、 Deadline、Lifespan |
| argument-hint | QoS OR DDS OR reliability OR durability OR deadline |
| user-invocable | true |
ROS2 DDS QoS 策略配置
当需要以下帮助时使用此技能:
| 策略 | 描述 | 典型用途 |
|---|---|---|
| Reliability | 可靠 vs 最大努力 | 可靠: 控制命令; 最大努力: 传感器数据 |
| Durability | 持久性 | 服务端: Volatile; 订阅者需要历史: TransientLocal |
| Deadline | 周期期望 | 传感器: 10ms; 控制: 20ms |
| Liveliness | 节点存活性 | 确保通信伙伴存活 |
| History | 历史深度 | KeepLast(n), KeepAll |
import rclpy
from rclpy.node import Node
from rclpy.qos import (
QoSProfile, ReliabilityPolicy, DurabilityPolicy,
HistoryPolicy, DeadlinePolicy
)
class QoSExample(Node):
def __init__(self):
super().__init__('qos_example')
# 传感器数据 - 快速但不要求完全可靠
sensor_qos = QoSProfile(
reliability=ReliabilityPolicy.BEST_EFFORT,
durability=DurabilityPolicy.VOLATILE,
history=HistoryPolicy.KEEP_LAST,
depth=5,
deadline=DeadlinePolicy(duration=0.1)
)
self.lidar_sub = self.create_subscription(
LaserScan, '/lidar/scan', self.lidar_callback,
qos_profile=sensor_qos)
# 控制命令 - 必须可靠
control_qos = QoSProfile(
reliability=ReliabilityPolicy.RELIABLE,
durability=DurabilityPolicy.VOLATILE,
history=HistoryPolicy.KEEP_LAST,
depth=1,
deadline=DeadlinePolicy(duration=0.02)
)
self.cmd_pub = self.create_publisher(
Twist, '/cmd_vel', qos_profile=control_qos)
# 地图数据 - 需要持久性
map_qos = QoSProfile(
reliability=ReliabilityPolicy.RELIABLE,
durability=DurabilityPolicy.TRANSIENT_LOCAL,
history=HistoryPolicy.KEEP_ALL
)
self.map_pub = self.create_publisher(
OccupancyGrid, '/map', qos_profile=map_qos)
<!-- dds_qos.xml -->
<dds>
<profiles xmlns="http://www.eprosima.com/XMLSchemas/fastRTPSProfiles">
<!-- 可靠发布者 -->
<publisher profile_name="reliable_publisher">
<qos>
<reliability>
<kind>RELIABLE</kind>
</reliability>
<durability>
<kind>VOLATILE_DURABILITY_QOS</kind>
</durability>
<deadline>
<period>20000000</period> <!-- 20ms -->
</deadline>
</qos>
</publisher>
<!-- 持久订阅者 -->
<subscriber profile_name="durable_subscriber">
<qos>
<reliability>
<kind>RELIABLE</kind>
</reliability>
TRANSIENT_LOCAL_DURABILITY_QOS
class QoSCompatibility:
@staticmethod
def are_compatible(pub_qos, sub_qos):
"""检查发布者和订阅者 QoS 是否兼容"""
# 可靠性兼容性
if pub_qos.reliability == ReliabilityPolicy.RELIABLE:
# 可靠发布者可以和任何订阅者通信
pass
else:
# 最大努力发布者只能和最大努力订阅者通信
if sub_qos.reliability != ReliabilityPolicy.BEST_EFFORT:
return False
# 持久性兼容性
if sub_qos.durability == DurabilityPolicy.TRANSIENT_LOCAL:
# 订阅者要求持久性,发布者必须是 TRANSIENT_LOCAL
if pub_qos.durability != DurabilityPolicy.TRANSIENT_LOCAL:
return False
return True