{"id":16680947,"url":"https://github.com/marcbone/franka-interface","last_synced_at":"2025-10-24T11:52:42.885Z","repository":{"id":57631847,"uuid":"378109622","full_name":"marcbone/franka-interface","owner":"marcbone","description":"Interface for simulated and real Panda robots from Franka Emika ","archived":false,"fork":false,"pushed_at":"2022-09-05T07:54:28.000Z","size":32,"stargazers_count":5,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-24T00:38:07.690Z","etag":null,"topics":["franka","franka-emika","robotics","robotics-simulation"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"eupl-1.2","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/marcbone.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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":"2021-06-18T10:06:48.000Z","updated_at":"2024-04-26T09:51:05.000Z","dependencies_parsed_at":"2022-08-31T13:01:49.182Z","dependency_job_id":null,"html_url":"https://github.com/marcbone/franka-interface","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcbone%2Ffranka-interface","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcbone%2Ffranka-interface/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcbone%2Ffranka-interface/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcbone%2Ffranka-interface/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/marcbone","download_url":"https://codeload.github.com/marcbone/franka-interface/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247953106,"owners_count":21023947,"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":["franka","franka-emika","robotics","robotics-simulation"],"created_at":"2024-10-12T13:44:29.268Z","updated_at":"2025-10-24T11:52:37.828Z","avatar_url":"https://github.com/marcbone.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![crates.io](https://img.shields.io/crates/v/franka-interface.svg)](https://crates.io/crates/franka-interface)\n![GitHub Workflow Status](https://img.shields.io/github/workflow/status/marcbone/franka-interface/Rust)\n[![crates.io](https://img.shields.io/crates/l/franka-interface.svg)](https://crates.io/crates/franka-interface)\n[![crates.io](https://img.shields.io/crates/d/franka-interface.svg)](https://crates.io/crates/franka-interface)\n[![docs.rs](https://docs.rs/franka-interface/badge.svg)](https://docs.rs/franka-interface)\n# franka-interface\n\nfranka-interface allows developing software for controlling Franka Emika Panda robots in simulation and then run it on\nthe real hardware.\n\nThis is done by providing an abstraction over [libfranka-rs](https://github.com/marcbone/libfranka-rs) and [RuBullet](https://github.com/neachdainn/rubullet).\n![](https://i.imgur.com/M6Mi8qr.png)\n## Example\n```rust\nuse franka_interface::experiment::{Experiment, Mode, RealSetup, SimulationSetup};\nuse franka_interface::RobotArguments;\nuse std::f64::consts::PI;\nuse std::path::PathBuf;\n\nstruct MySimSetup {}\nimpl SimulationSetup for MySimSetup {\n    fn set_franka_urdf_path(\u0026self) -\u003e PathBuf {\n        \"path/to/panda.urdf\".into()\n    }\n}\nstruct MyRealSetup {}\nimpl RealSetup for MyRealSetup {}\nfn main() {\n    let mode = Mode::Simulation;\n    let mut experiment = Experiment::new(mode, MySimSetup {}, MyRealSetup {});\n    let mut robot = experiment.new_robot(RobotArguments {\n        name: \"franka-ip\".to_string(), // IP-Address or hostname of the real Panda (Not needed for the simulation)\n        base_pose: None,\n        initial_config: None,\n    });\n    robot.joint_motion(\n        0.1,\n        [1., PI / 4., 0., -2. * PI / 4., 0., PI / 2., -PI / 4.].into(),\n    );\n}\n```\n\nThis example will spawn the panda robot in RuBullet and perform a join movement.\nTo run the program on the real robot it is necessary to set the mode to ```Mode::Real```.\nAlso, you have to build the program in `Release`-Mode or with `opt-level = 3` to run it on the real robot.\n\nThe URDF of the panda can be downloaded from the\n[bullet3](https://github.com/bulletphysics/bullet3/tree/master/examples/pybullet/gym/pybullet_data/franka_panda) repository.\nMake sure to also download the mesh files.\n\n\n\n## Features\nRobots in franka-interface do allow the following control modes:\n* Joint position control\n* Cartesian pose control\n* Torque control\n* Joint motions by specifying a goal configuration (see example above)\n\nThe robot has access to the following properties:\n* Joint position\n* Joint velocity\n* Cartesian pose\n* Jacobian\n* Mass matrix\n* Coriolis torques\n* Gravity torques\n\nFurther, the library is very flexible as the user can define custom mechanisms for interacting with\nthe simulation or the real robot. For example, it is possible to create a camera and get images from\nthe simulation or adding visualization markers inside the simulation.\nTake a look at the examples in the examples folder.\n\n## Limitations\nWhile it is possible to spawn/connect to multiple robots, it is not possible to control multiple\nrobots at the same time.\n\n## Licence\nThis library is copyrighted © 2021 Marco Boneberger\n\n\nLicensed under the EUPL, Version 1.2 or – as soon they will be approved by the European Commission - subsequent versions of the EUPL (the \"Licence\");\n\nYou may not use this work except in compliance with the Licence.\nYou may obtain a copy of the Licence at:\n\n[https://joinup.ec.europa.eu/software/page/eupl](https://joinup.ec.europa.eu/software/page/eupl)\n\nUnless required by applicable law or agreed to in writing, software distributed under the Licence is distributed on an \"AS IS\" basis\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\nSee the Licence for the specific language governing permissions and limitations under the Licence.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarcbone%2Ffranka-interface","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmarcbone%2Ffranka-interface","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarcbone%2Ffranka-interface/lists"}