{"id":14992260,"url":"https://github.com/openrr/gear","last_synced_at":"2025-09-25T14:30:59.660Z","repository":{"id":57633397,"uuid":"106292760","full_name":"openrr/gear","owner":"openrr","description":"Collision Avoidance Path Planning in Rust-lang","archived":true,"fork":false,"pushed_at":"2021-01-07T00:57:25.000Z","size":169,"stargazers_count":33,"open_issues_count":0,"forks_count":5,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-01-02T01:24:53.814Z","etag":null,"topics":["path-planning","robotics","rust-lang"],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/openrr.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-10-09T14:16:02.000Z","updated_at":"2024-05-15T05:56:34.000Z","dependencies_parsed_at":"2022-08-31T13:22:01.564Z","dependency_job_id":null,"html_url":"https://github.com/openrr/gear","commit_stats":null,"previous_names":["otl/gear"],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openrr%2Fgear","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openrr%2Fgear/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openrr%2Fgear/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openrr%2Fgear/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/openrr","download_url":"https://codeload.github.com/openrr/gear/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":234200175,"owners_count":18795139,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["path-planning","robotics","rust-lang"],"created_at":"2024-09-24T15:00:53.787Z","updated_at":"2025-09-25T14:30:59.333Z","avatar_url":"https://github.com/openrr.png","language":"Rust","funding_links":[],"categories":["Path Planning"],"sub_categories":[],"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)\n\n**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.**\n\n\nCollision Avoidance Path Planning for robotics in Rust-lang\n\n[![Video](https://j.gifs.com/kZZyJK.gif)](http://www.youtube.com/watch?v=jEu3EfpVAI8)\n\n[Documents](https://docs.rs/gear)\n\n## Code example\n\n### [minimum code example](examples/minimum.rs)\n\n```rust\nextern crate gear;\nextern crate nalgebra as na;\n\nfn main() {\n    // Create path planner with loading urdf file and set end link name\n    let planner = gear::JointPathPlannerBuilder::from_urdf_file(\"sample.urdf\")\n        .expect(\"failed to create planner from urdf file\")\n        .collision_check_margin(0.01)\n        .finalize();\n    // Create inverse kinematics solver\n    let solver = gear::JacobianIKSolverBuilder::\u003cf64\u003e::new()\n        .num_max_try(1000)\n        .allowable_target_distance(0.01)\n        .move_epsilon(0.0001)\n        .finalize();\n    let solver = gear::RandomInitializeIKSolver::new(solver, 100);\n    // Create path planner with IK solver\n    let mut planner = gear::JointPathPlannerWithIK::new(planner, solver);\n    // Create kinematic chain from the end of the link\n    let mut arm = planner.create_arm(\"l_wrist2\").unwrap();\n\n    // Create obstacles\n    let obstacles =\n        gear::create_compound_from_urdf(\"obstacles.urdf\").expect(\"obstacle file not found\");\n\n    // Set IK target transformation\n    let mut ik_target_pose = na::Isometry3::from_parts(\n        na::Translation3::new(0.40, 0.20, 0.3),\n        na::UnitQuaternion::from_euler_angles(0.0, -0.1, 0.0),\n    );\n    // Plan the path, path is the vector of joint angles for root to \"l_wrist2\"\n    let plan1 = planner\n        .plan_with_ik(\u0026mut arm, \u0026ik_target_pose, \u0026obstacles)\n        .unwrap();\n    println!(\"plan1 = {:?}\", plan1);\n    ik_target_pose.translation.vector[2] += 0.50;\n    // plan the path from previous result\n    let plan2 = planner\n        .plan_with_ik(\u0026mut arm, \u0026ik_target_pose, \u0026obstacles)\n        .unwrap();\n    println!(\"plan2 = {:?}\", plan2);\n}\n```\n\n## Run example with GUI\n\n### How to run\n\n```bash\ncargo run --release --example reach\n```\n\n### GUI control\n\n* Up/Down/Left/Right/`f`/`b` to translate IK target\n* Shift + Up/Down/Left/Right/`f`/`b` to rotate IK target\n* type `g` to move the end of the arm to the target\n* type `i` to just solve inverse kinematics for the target without collision check\n* type `r` to set random pose\n* type `c` to check collision\n* type `v` to toggle shown element collision\u003c-\u003evisual\n\n### Use your robot\n\nThe example can handle any urdf files (sample.urdf is used as default).\nIt requires the name of the target end link name.\n\n```bash\ncargo run --release --example reach YOUR_URDF_FILE_PATH END_LINK_NAME\n```\n\nFor example,\n\n#### PR2\n\n```bash\ncargo run --release --example reach $(rospack find pr2_description)/robots/pr2.urdf.xacro l_gripper_palm_link\n```\n\n[![Video](https://j.gifs.com/kZZyJK.gif)](http://www.youtube.com/watch?v=jEu3EfpVAI8)\n\n#### Universal Robot: UR10\n\n```bash\ncargo run --release --example reach $(rospack find ur_description)/urdf/ur10_robot.urdf.xacro ee_link\n```\n\n[![Sawyer movie](https://j.gifs.com/ZVVqDw.gif)](https://www.youtube.com/watch?v=0YujRKUto-4)\n\n#### Sawyer\n\n```bash\ncargo run --release --example reach $(rospack find sawyer_description)/urdf/sawyer.urdf right_hand\n```\n\n[![UR5 movie](https://j.gifs.com/G55yxL.gif)](https://www.youtube.com/watch?v=0YujRKUto-4)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenrr%2Fgear","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopenrr%2Fgear","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenrr%2Fgear/lists"}