4个版本
0.9.0 | 2022年4月1日 |
---|---|
0.8.0-alpha-2 | 2021年6月18日 |
0.8.0-alpha-1 | 2021年5月4日 |
#70 在 机器人
27 每月下载量
在 franka-interface 中使用
335KB
6.5K SLoC
libfranka-rs
libfranka-rs是使用Rust编写的libfranka的非官方端口。该库可以与Franka Emika机器人的研究版本交互。该库旨在为研究人员提供在实时机器人应用中实验Rust的可能性。
控制机器人时,务必随时准备好停止按钮!
特性
- 机器人的实时控制
- 类似于libfranka的API
- 与Preempt_RT或标准Linux内核一起使用
- 使用夹具
- 使用机器人模型
- 下载机器人模型以供离线使用
- 将libfranka示例端口移植以帮助您入门
- 示例_commons的功能直接包含在库中,因此您无需将这些文件复制到您的项目中
- 直接将nalgebra (Eigen3等效)类型转换为libfranka控制类型(JointPositions、CartesianPose、...)
- 使用Result类型进行适当的错误处理
TODO
- 在Linux x86_64以外的任何地方使用模型
不支持
- Windows(macOS可能可以工作,但我没有测试过)
- 真空夹具(我们没有这些,因此无法测试它们)
示例
一个控制关节位置的小示例。您可以在示例文件夹中找到更多。
use franka::{FrankaResult, JointPositions, MotionFinished, Robot, RobotState};
use std::f64::consts::PI;
use std::time::Duration;
fn main() -> FrankaResult<()> {
let mut robot = Robot::new("robotik-bs.de", None, None)?;
robot.set_default_behavior()?;
println!("WARNING: This example will move the robot! Please make sure to have the user stop button at hand!");
println!("Press Enter to continue...");
std::io::stdin().read_line(&mut String::new()).unwrap();
// Set additional parameters always before the control loop, NEVER in the control loop!
// Set collision behavior.
robot.set_collision_behavior(
[20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0],
[20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0],
[20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0],
[20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0],
[20.0, 20.0, 20.0, 25.0, 25.0, 25.0],
[20.0, 20.0, 20.0, 25.0, 25.0, 25.0],
[20.0, 20.0, 20.0, 25.0, 25.0, 25.0],
[20.0, 20.0, 20.0, 25.0, 25.0, 25.0],
)?;
let q_goal = [0., -PI / 4., 0., -3. * PI / 4., 0., PI / 2., PI / 4.];
robot.joint_motion(0.5, &q_goal)?;
println!("Finished moving to initial joint configuration.");
let mut initial_position = JointPositions::new([0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0]);
let mut time = 0.;
let callback = |state: &RobotState, time_step: &Duration| -> JointPositions {
time += time_step.as_secs_f64();
if time == 0. {
initial_position.q = state.q_d;
}
let mut out = JointPositions::new(initial_position.q);
let delta_angle = PI / 8. * (1. - f64::cos(PI / 2.5 * time));
out.q[3] += delta_angle;
out.q[4] += delta_angle;
out.q[6] += delta_angle;
if time >= 5.0 {
println!("Finished motion, shutting down example");
return out.motion_finished();
}
out
};
robot.control_joint_positions(callback, None, None, None)
}
如何开始
作为直接端口,您可能会发现Franka控制接口文档很有帮助。
零Rust知识
如果您是第一次使用Rust,我建议您阅读Rust Book。
如果您已经安装了Rust并只想玩示例,您也可以运行
cargo install libfranka-rs --examples --version 0.9.0
generate_joint_position_motion <ip_of_your_robot>
如果您已经熟悉原始的libfranka示例。我建议您查看示例文件夹。名称类似于原始libfranka示例的示例是尽可能接近原始示例的端口,希望这可以使您进入Rust世界的过程尽可能顺利。
零libfranka知识
Franka控制接口文档(点击查看)还包括设置指南。由于您将使用libfranka-rs,因此可以跳过libfranka的安装。请查阅文档和示例文件夹。您应该运行communication_test示例以验证您的设置是否正确。
如何使用libfranka-rs
如果您想在项目中使用libfranka-rs,您需要在Cargo.toml文件中添加以下内容:
libfranka-rs = "0.9.0"
libfranka-rs的版本号结构为MAJOR.MINOR.PATCH。主版本和次要版本与原始libfranka版本号匹配。这意味着对于0.8,您的机器人至少需要运行在固件4.0.0上。libfranka-rs不支持旧版本的固件。有关系统更新的更多信息,请参阅此处。
许可证
本库版权所有 © 2021 Marco Boneberger
根据欧盟公共授权协议(EUPL),版本1.2或——一旦获得欧盟委员会批准——后续版本的EUPL(“许可证”);
您只能按照许可证的规定使用本作品。您可以在以下地址获得许可证副本:
https://joinup.ec.europa.eu/software/page/eupl
除非适用法律要求或书面同意,否则在许可证下分发的软件按“原样”基础分发,不提供任何明示或暗示的保证或条件。
有关许可证下管理权限和限制的具体语言,请参阅许可证。
依赖关系
~7.5MB
~148K SLoC