一、核心函数 1:p.getNumJoints(robot_id)
1. 语法格式
num_joints = p.getNumJoints(bodyUniqueId)
2. 关键参数
| 参数名 | 类型 | 说明 |
|---|---|---|
bodyUniqueId(此处为 robot_id) | int | 必选参数,机器人模型的唯一 ID(由 p.loadURDF() 加载模型时返回),用于指定要查询的目标机器人 |
3. 返回值
整数类型(int),表示目标机器人的总关节数量(包含固定关节、旋转关节、移动关节等所有类型的关节,基座不被计入关节数量)。
4. 代码中的作用
num_joints = p.getNumJoints(robot_id)
获取 robot_id 对应的机器人总关节数,为后续遍历所有关节(for i in range(num_joints))提供循环范围,确保不会遗漏或超出关节索引范围。
二、核心函数 2:p.getJointInfo(robot_id, i)
1. 语法格式
joint_info_tuple = p.getJointInfo(bodyUniqueId, jointIndex)
2. 关键参数
| 参数名 | 类型 | 说明 |
|---|---|---|
bodyUniqueId(robot_id) | int | 必选参数,机器人模型唯一 ID,指定查询对象 |
jointIndex(此处为 i) | int | 必选参数,关节索引(范围:0 ~ 总关节数 -1),指定要查询的具体关节 |
3. 返回值
不可变元组(tuple),包含约 20 项关节属性。
通过 info[2] != p.JOINT_FIXED 筛选可动关节,关键常量说明:
| 常量名 | 数值 | 含义 | 是否可动 |
|---|---|---|---|
p.JOINT_FIXED | 4 | 固定关节(连杆间刚性连接,无相对运动) | 否(需过滤) |
p.JOINT_REVOLUTE | 0 | 旋转关节(绕单轴旋转,如机械臂关节) | 是(保留) |
p.JOINT_PRISMATIC | 1 |

