7 个版本
0.1.0 | 2023 年 3 月 31 日 |
---|---|
0.0.7 | 2022 年 12 月 9 日 |
0.0.6 | 2021 年 7 月 1 日 |
0.0.5 | 2021 年 3 月 29 日 |
0.0.3 | 2021 年 2 月 19 日 |
#99 在 机器人 中
69 每月下载量
用于 7 个 crate(3 个直接使用)
89KB
2K SLoC
OpenRR Planner
使用 Rust-lang 机器人避碰路径规划。这最初是 gear
crate 的副本。
代码示例
最小代码示例
use std::{path::Path, sync::Arc};
use k::nalgebra as na;
use ncollide3d::shape::Compound;
use openrr_planner::FromUrdf;
fn main() {
let urdf_path = Path::new("sample.urdf");
let robot = Arc::new(k::Chain::from_urdf_file(urdf_path).unwrap());
// Create path planner with loading urdf file and set end link name
let planner = openrr_planner::JointPathPlannerBuilder::from_urdf_file(urdf_path)
.expect("failed to create planner from urdf file")
.collision_check_margin(0.01)
.reference_robot(robot.clone())
.finalize()
.unwrap();
// Create inverse kinematics solver
let solver = openrr_planner::JacobianIkSolver::default();
let solver = openrr_planner::RandomInitializeIkSolver::new(solver, 100);
// Create path planner with IK solver
let mut planner = openrr_planner::JointPathPlannerWithIk::new(planner, solver);
let target_name = "l_tool_fixed";
// Create obstacles
let obstacles = Compound::from_urdf_file("obstacles.urdf").expect("obstacle file not found");
// Set IK target transformation
let mut ik_target_pose = na::Isometry3::from_parts(
na::Translation3::new(0.40, 0.20, 0.3),
na::UnitQuaternion::from_euler_angles(0.0, -0.1, 0.0),
);
// Plan the path, path is the vector of joint angles for root to target_name
let plan1 = planner
.plan_with_ik(target_name, &ik_target_pose, &obstacles)
.unwrap();
println!("plan1 = {plan1:?}");
// Apply plan1 to the reference robot (regarded as the real robot)
let arm = k::Chain::from_end(robot.find(target_name).unwrap());
arm.set_joint_positions_clamped(plan1.iter().last().unwrap());
// Plan the path from previous result
ik_target_pose.translation.vector[2] += 0.50;
let plan2 = planner
.plan_with_ik(target_name, &ik_target_pose, &obstacles)
.unwrap();
println!("plan2 = {plan2:?}");
}
带有 GUI 运行示例
如何运行
cargo run --release --example reach
GUI 控制
- 上/下/左/右/
f
/b
来平移 IK 目标 - Shift + 上/下/左/右/
f
/b
来旋转 IK 目标 - 输入
g
将机械臂末端移动到目标 - 输入
i
仅为目标求解逆运动学而不进行碰撞检查 - 输入
r
设置随机姿态 - 输入
c
检查碰撞 - 输入
v
切换显示元素的碰撞<-->可视
使用您的机器人
示例可以处理任何 urdf 文件(默认使用 sample.urdf)。它需要目标末端连杆的名称。
cargo run --release --example reach YOUR_URDF_FILE_PATH END_LINK_NAME
例如:
PR2
cargo run --release --example reach $(rospack find pr2_description)/robots/pr2.urdf.xacro l_gripper_palm_link
通用机器人:UR10
cargo run --release --example reach $(rospack find ur_description)/urdf/ur10_robot.urdf.xacro ee_link
Sawyer
cargo run --release --example reach $(rospack find sawyer_description)/urdf/sawyer.urdf right_hand
许可证
根据 Apache 许可证,版本 2.0 许可。
依赖项
~22–30MB
~433K SLoC