Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/MIUAV/vibe-coding-ros2 --skill wheeled-vehicle명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
SOC 직업 분류 기준
SKILL.md 표시 중
| name | wheeled_vehicle |
| description | 轮式车辆导航与控制 - 差速/阿克曼/麦克纳姆轮运动控制、路径规划 |
| argument-hint | 轮式车辆 OR 差速驱动 OR 阿克曼 OR 麦克纳姆轮 |
| user-invocable | true |
用于开发轮式底盘机器人的运动控制和导航系统
当需要以下帮助时使用此技能:
| 类型 | 机动性 | 负载 | 适用场景 |
|---|---|---|---|
| 两轮差速 | ★★★★ | 中 | 室内机器人 |
| 四轮差速 | ★★★ | 高 | 轮式机器人 |
| 阿克曼 | ★★ | 高 | 室外车辆 |
| 麦克纳姆轮 | ★★★★★ | 中 | 狭窄空间 |
| 全向轮 | ★★★★★ | 中 | 精密操作 |
| 履带式 | ★★★★ | 高 | 复杂地形 |
class DifferentialDrive:
def __init__(self, wheel_radius, axle_track):
self.r = wheel_radius
self.L = axle_track
def forward_kinematics(self, v_left, v_right):
"""速度转位姿"""
v = (v_left + v_right) / 2 # 线速度
omega = (v_right - v_left) / self.L # 角速度
return v, omega
def inverse_kinematics(self, v, omega):
"""位姿转速度"""
v_left = (v - omega * self.L / 2) / self.r
v_right = (v + omega * self.L / 2) / self.r
return v_left, v_right
class AckermannDrive:
def __init__(self, wheelbase, track_width):
self.L = wheelbase
self.T = track_width
def steering_angle(self, radius):
"""计算转向角"""
# 阿克曼几何
alpha = atan(self.L / radius)
# 左右轮转向角差异
alpha_inner = atan(self.L / (radius - self.T/2))
alpha_outer = atan(self.L / (radius + self.T/2))
return alpha_inner, alpha_outer
class MecanumDrive:
def __init__(self, a, b, r):
# a: 轮子到中心X距离
# b: 轮子到中心Y距离
# r: 轮子半径
self.a = a
self.b = b
self.r = r
def inverse_kinematics(self, vx, vy, omega):
"""全向运动"""
# 4个轮子的速度
v1 = (vx - vy - omega*(self.a+self.b)) / self.r
v2 = (vx + vy + omega*(self.a+self.b)) / self.r
v3 = (vx + vy - omega*(self.a+self.b)) / self.r
v4 = (vx - vy + omega*(self.a+self.b)) / self.r
return [v1, v2, v3, v4]
class VelocityController:
def __init__(self, kp, ki, kd):
self.kp = kp
self.ki = ki
self.kd = kd
self.integral = 0
self.prev_error = 0
def compute(self, target_vel, current_vel, dt):
error = target_vel - current_vel
# PID
P = self.kp * error
self.integral += error * dt
I = self.ki * self.integral
D = self.kd * (error - self.prev_error) / dt
output = P + I + D
self.prev_error = error
return output
class PurePursuit:
def __init__(self, lookahead_dist, gain):
self.lookahead = lookahead_dist
self.gain = gain
def compute_control(self, pose, path):
# 1. 找到前瞻点
lookahead_point = find_lookahead_point(
pose, path, self.lookahead)
# 2. 计算角度误差
angle_to_point = atan2(
lookahead_point.y - pose.y,
lookahead_point.x - pose.x)
error_angle = angle_to_point - pose.theta
# 3. 计算曲率
curvature = (2 * sin(error_angle)) / self.lookahead
# 4. 速度控制
velocity = self.gain * (1 - abs(error_angle) / pi)
return curvature, velocity
navigation:
local_planner: "dwb" # DWB 局部规划
global_planner: "navfn" # NavFn 全局规划
# 运动参数
max_vel_x: 1.0
max_vel_theta: 1.0
acc_lim_x: 0.5
acc_lim_theta: 0.5
# 目标容差
xy_goal_tolerance: 0.1
yaw_goal_tolerance: 0.05
| 包 | 功能 |
|---|---|
navigation2 | 导航堆栈 |
nav2_bringup | 启动配置 |
diff_drive_controller | 差速控制 |
ackermann_controller | 阿克曼控制 |