撰写控制器配置文件
1. 准备
若希望使用TeleXperience的通用控制器,控制机器人的关节空间运动,则需要撰写控制器配置文件。
以OpenLoong为例:
首先在OpenLoong
路径下找到vr_configs.yml
,将其中的wo_controller
设置为fasle。
继续在OpenLoong
路径下,创建controller_v2.yml
文件作为控制器配置文件。
2. 撰写配置文件
控制器配置文件主要包括三部分:
- ros节点设置,对应
control_ros
,用来设置ros节点通信频率rate
以及通信话题名称joint_target
,joint_cmd
,joint_state
,ee_target
,ee_state
,sol_q
。 - 模型参数设置,对应
model
,用来设置urdf的加载路径urdf
,选择可活动关节free_joints
,基坐标系对应link名称base_name
,跟踪目标对应link名称ee_name
。 - 控制器参数设置,对应
controller
,用来设置采样时间dt
,跟踪目标各自由度误差优化权重ee_weight
,各关节角度误差优化权重j_weight
,跟踪目标比例控制增益x_p_gain
,各关节比例控制增益j_p_gain
,关节速度限制q_dot_limit
,跟踪目标工作空间限制x_limit
和跟踪目标速度限制x_dot_limit
。
controller_v2.yml
示例如下:
control_ros:
rate: 100
joint_target: "/io_teleop/target_joint_from_mocap"
joint_cmd: "/io_teleop/joint_cmd"
joint_state: "/io_teleop/joint_states"
ee_target: "/io_teleop/target_ee_poses"
ee_state: "/io_teleop/state_ee_poses"
sol_q: "/io_teleop/sol_q"
model:
urdf: azureloong_description/urdf/AzureLoong_sr.urdf
free_joints: [
"J_arm_l_01",
"J_arm_l_02",
"J_arm_l_03",
"J_arm_l_04",
"J_arm_l_05",
"J_arm_l_06",
"J_arm_l_07",
"J_arm_r_01",
"J_arm_r_02",
"J_arm_r_03",
"J_arm_r_04",
"J_arm_r_05",
"J_arm_r_06",
"J_arm_r_07",
]
base_name: ["base_link", "base_link"]
ee_name: ["Link_arm_r_07", "Link_arm_l_07"]
controller:
dt: 0.01
ee_weight: [[5, 5, 5, 1, 1, 1], [5, 5, 5, 1, 1, 1]]
j_weight: [0, 0.1, 0, 0, 0, 0, 0, 0, 0.1, 0, 0, 0, 0, 0]
x_p_gain: [10, 10, 10, 100, 100, 100]
j_p_gain: [100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100]
q_dot_limit: [180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180]
x_limit: []
x_dot_limit: [[0.2, 0.2, 0.2, 90, 90, 90],[0.2, 0.2, 0.2, 90, 90, 90]]
注意事项:
- 文件名
controller_v2.yml
,文件中各变量名称(eg.control_ros
,rate
),以及通信话题内容(eg."/io_teleop/target_joint_from_mocap"
)无需改动,改动可能造成控制器无法正常运行。 - ros节点通信频率
rate
和控制器采样时间dt
对应,互为倒数,按实际通信频率设置。 - urdf的加载路径
urdf
为controller_v2.yml
文件的相对路径,应都放在OpenLoong
路径下。 - 可活动关节
free_joints
和跟踪目标ee_name
可任意选择urdf文件中已有的关节和连杆,关节和连杆的名称即为urdf文件里对应关节和连杆的名称,无顺序要求。 - 基坐标系
base_name
的选取与跟踪目标ee_name
必须一一对应。如示例中所示,基坐标系中第一个base_link
对应跟踪目标的Link_arm_r_07
,第二个base_link
对应Link_arm_l_07
。 - 控制器变量
j_weight
,j_p_gain
,q_dot_limit
内的数据和free_joints
内的关节必须一一对应(eg.j_weight
中的两个0.1
分别对应J_arm_l_02
和J_arm_r_02
);ee_weight
,x_dot_limit
内的数据和ee_name
内的跟踪目标一一对应。 - v2.0版本没有用到变量
x_p_gain
和x_limit
,参数设置为空即可。 base_name
和ee_name
的设置需与vr_configs.yml
中controller_indices
的base
和cmd_ee
保持一致,否则会导致机器人不跟踪vr设备的移动,并朝向其他方向移动,可能造成机器人的损坏。
控制器参数设置:
- 控制器变量
ee_weight
和j_weight
分别表示跟踪目标位姿误差优化权重和动捕信号对应关节角度误差优化权重,权重越高,对应物理量的误差惩罚力度越大,误差越小。其中,ee_weight
的第二维数值按顺序分别对应跟踪目标的xyz位置误差和xyz角度误差[errX.p, errY.p, errZ.p, errX.ang, errY.ang, errZ.ang]
,其他与跟踪目标相关的变量(x_dot_limit
)也按该顺序进行设置。 j_p_gain
为关节比例控制增益,数值越大系统相应越迅速,置0则关节无响应。q_dot_limit
和x_dot_limit
分别表示关节速度限制和跟踪目标速度限制。