Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/openrr/gear
Collision Avoidance Path Planning in Rust-lang
https://github.com/openrr/gear
path-planning robotics rust-lang
Last synced: 25 days ago
JSON representation
Collision Avoidance Path Planning in Rust-lang
- Host: GitHub
- URL: https://github.com/openrr/gear
- Owner: openrr
- License: apache-2.0
- Archived: true
- Created: 2017-10-09T14:16:02.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2021-01-07T00:57:25.000Z (about 4 years ago)
- Last Synced: 2025-01-02T01:24:53.814Z (about 1 month ago)
- Topics: path-planning, robotics, rust-lang
- Language: Rust
- Size: 165 KB
- Stars: 33
- Watchers: 5
- Forks: 5
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-rust-list - gear - lang. (Path Planning)
- awesome-rust-list - gear - lang. (Path Planning)
README
# gear [![Build Status](https://travis-ci.org/openrr/gear.svg?branch=master)](https://travis-ci.org/openrr/gear) [![crates.io](https://img.shields.io/crates/v/gear.svg)](https://crates.io/crates/gear)
**WARNING!: Development of `gear` is stopped and moved into [openrr/openrr-planner](https://github.com/openrr/openrr/tree/main/openrr-planner). It is the same except for the package name now.**
Collision Avoidance Path Planning for robotics in Rust-lang
[![Video](https://j.gifs.com/kZZyJK.gif)](http://www.youtube.com/watch?v=jEu3EfpVAI8)
[Documents](https://docs.rs/gear)
## Code example
### [minimum code example](examples/minimum.rs)
```rust
extern crate gear;
extern crate nalgebra as na;fn main() {
// Create path planner with loading urdf file and set end link name
let planner = gear::JointPathPlannerBuilder::from_urdf_file("sample.urdf")
.expect("failed to create planner from urdf file")
.collision_check_margin(0.01)
.finalize();
// Create inverse kinematics solver
let solver = gear::JacobianIKSolverBuilder::::new()
.num_max_try(1000)
.allowable_target_distance(0.01)
.move_epsilon(0.0001)
.finalize();
let solver = gear::RandomInitializeIKSolver::new(solver, 100);
// Create path planner with IK solver
let mut planner = gear::JointPathPlannerWithIK::new(planner, solver);
// Create kinematic chain from the end of the link
let mut arm = planner.create_arm("l_wrist2").unwrap();// Create obstacles
let obstacles =
gear::create_compound_from_urdf("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 "l_wrist2"
let plan1 = planner
.plan_with_ik(&mut arm, &ik_target_pose, &obstacles)
.unwrap();
println!("plan1 = {:?}", plan1);
ik_target_pose.translation.vector[2] += 0.50;
// plan the path from previous result
let plan2 = planner
.plan_with_ik(&mut arm, &ik_target_pose, &obstacles)
.unwrap();
println!("plan2 = {:?}", plan2);
}
```## Run example with GUI
### How to run
```bash
cargo run --release --example reach
```### GUI control
* Up/Down/Left/Right/`f`/`b` to translate IK target
* Shift + Up/Down/Left/Right/`f`/`b` to rotate IK target
* type `g` to move the end of the arm to the target
* type `i` to just solve inverse kinematics for the target without collision check
* type `r` to set random pose
* type `c` to check collision
* type `v` to toggle shown element collision<->visual### Use your robot
The example can handle any urdf files (sample.urdf is used as default).
It requires the name of the target end link name.```bash
cargo run --release --example reach YOUR_URDF_FILE_PATH END_LINK_NAME
```For example,
#### PR2
```bash
cargo run --release --example reach $(rospack find pr2_description)/robots/pr2.urdf.xacro l_gripper_palm_link
```[![Video](https://j.gifs.com/kZZyJK.gif)](http://www.youtube.com/watch?v=jEu3EfpVAI8)
#### Universal Robot: UR10
```bash
cargo run --release --example reach $(rospack find ur_description)/urdf/ur10_robot.urdf.xacro ee_link
```[![Sawyer movie](https://j.gifs.com/ZVVqDw.gif)](https://www.youtube.com/watch?v=0YujRKUto-4)
#### Sawyer
```bash
cargo run --release --example reach $(rospack find sawyer_description)/urdf/sawyer.urdf right_hand
```[![UR5 movie](https://j.gifs.com/G55yxL.gif)](https://www.youtube.com/watch?v=0YujRKUto-4)