用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/MIUAV/vibe-coding-ros2 --skill px4-ros2命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
基于 SOC 职业分类
正在显示 SKILL.md
| name | px4-ros2 |
| description | PX4 ROS2 集成与控制 - MAVROS/mavros2 配置、Offboard 控制、话题订阅发布 |
| argument-hint | PX4 ROS2 OR MAVROS OR Offboard控制 OR 无人机ROS |
| user-invocable | true |
用于将 PX4 与 ROS2 系统集成实现自主控制
当需要以下帮助时使用此技能:
# ROS2 安装
sudo apt install ros-${ROS_DISTRO}-mavros ros-${ROS_DISTRO}-mavros-extras
# 安装 mavros 工具
sudo apt install mavros-utils
# 通过 UDP 连接 SITL
ros2 launch mavros px4.launch fcu_url:="udp://:14540@"
# 通过 UDP 连接真实飞控
ros2 launch mavros px4.launch fcu_url:="udp://192.168.1.1:14550@"
# 通过串口连接
ros2 launch mavros px4.launch fcu_url:="/dev/ttyUSB0:921600"
| 话题 | 类型 | 说明 |
|---|---|---|
/mavros/state | mavros_msgs/State | 连接状态 |
/mavros/local_position/pose | geometry_msgs/PoseStamped | 局部位置 |
/mavros/global_position/global | sensor_msgs/NavSatFix | GPS 位置 |
/mavros/imu/data | sensor_msgs/Imu | IMU 数据 |
/mavros/battery | sensor_msgs/BatteryState | 电池状态 |
/mavros/rc/in | mavros_msgs/RCIn | 遥控输入 |
| 话题 | 类型 | 说明 |
|---|---|---|
/mavros/setpoint_position/local | geometry_msgs/PoseStamped | 位置目标 |
/mavros/setpoint_velocity/cmd_vel | geometry_msgs/Twist | 速度目标 |
/mavros/setpoint_raw/attitude | mavros_msgs/AttitudeTarget | 姿态目标 |
/mavros/cmd/arming | mavros_msgs/CommandBool | 解锁/锁定 |
/mavros/cmd/land | mavros_msgs/CommandVtolTransition | 降落 |
/mavros/cmd/takeoff | mavros_msgs/CommandTOL | 起飞 |
#!/usr/bin/env python3
import rclpy
from rclpy.node import Node
from geometry_msgs.msg import PoseStamped
from mavros_msgs.srv import CommandBool, SetMode
from mavros_msgs.msg import State
class OffboardNode(Node):
def __init__(self):
super().__init__('offboard_node')
# 状态订阅
self.state_sub = self.create_subscription(
State,
'/mavros/state',
self.state_callback)
# 位置发布
self.pos_pub = self.create_publisher(
PoseStamped,
'/mavros/setpoint_position/local',
10)
# 服务客户端
self.arm_client = self.create_client(CommandBool, '/mavros/cmd/arming')
self.mode_client = self.create_client(SetMode, '/mavros/set_mode')
self.connected = False
self.armed = False
def state_callback(self, msg):
self.connected = msg.connected
.armed = msg.armed
():
pose = PoseStamped()
pose.header.stamp = .get_clock().now().to_msg()
pose.pose.position.x = x
pose.pose.position.y = y
pose.pose.position.z = z
.pos_pub.publish(pose)
# 通过 service
ros2 service call /mavros/cmd/takeoff mavros_msgs/srv/CommandTOL \
"{min_pitch: 0.0, yaw: 0.0, latitude: 0.0, longitude: 0.0, altitude: 2.0}"
ros2 service call /mavros/cmd/land mavros_msgs/srv/CommandTOL \
"{min_pitch: 0.0, yaw: 0.0, latitude: 0.0, longitude: 0.0, altitude: 0.0}"
# 解锁
ros2 service call /mavros/cmd/arming mavros_msgs/srv/CommandBool \
"{value: true}"
# 锁定
ros2 service call /mavros/cmd/arming mavros_msgs/srv/CommandBool \
"{value: false}"
# Offboard 模式
ros2 service call /mavros/set_mode mavros_msgs/srv/SetMode \
"{custom_mode: 'OFFBOARD'}"
# Position 模式
ros2 service call /mavros/set_mode mavros_msgs/srv/SetMode \
"{custom_mode: 'POSCTL'}"
# Stabilized 模式
ros2 service call /mavros/set_mode mavros_msgs/srv/SetMode \
"{custom_mode: 'STABILIZED'}"
ros2 topic pub /mavros/setpoint_velocity/cmd_vel geometry_msgs/Twist \
"{linear: {x: 1.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.0}}"
mavros:
fcu_url: "udp://:14540@"
fcu_protocol: "v2.0"
protocol_version: "2.0"
pub_global_position: {frame_id: "map", rate: 100.0}
pub_local_position: {frame_id: "base_link", rate: 50.0}
pub_imu: {frame_id: "base_link", rate: 100.0}
subscribe_attitude: true
subscribe_rc: true
# 启用 uXRCE-DDS
UXRCE_DDS_CFG = 1 # 启用
UXRCE_DDS_PRT # 端口
# 安装 micro_ros_agent
sudo apt install ros-humble-micro-ros-agent
# 启动 agent
micro_ros_agent udp 8888
检查飞控模式
# 需要先切换到 Offboard 模式
检查防火墙
sudo ufw allow 14540/udp
检查话题映射
# 确认 Offboard 模式已激活
# 确认已解锁
# 检查 MAVLink 状态