1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
/* Copyright 2017 Takashi Ogura Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ use errors::*; use joints::*; use na::{Isometry3, Real}; /// Container of links with joints pub trait JointContainer<T> where T: Real, { /// Set the angles of the joints /// /// If the angle are out of the limit, it returns error. fn set_joint_angles(&mut self, angles: &[T]) -> Result<(), JointError>; /// Get the angles of the joints fn joint_angles(&self) -> Vec<T>; /// Get the limits of the joints, if it exists. fn joint_limits(&self) -> Vec<Option<Range<T>>>; /// Get the all names of the joints fn joint_names(&self) -> Vec<String>; } /// Container of links which has a transformation pub trait LinkContainer<T> where T: Real, { /// Calculate the transforms of all of the links fn link_transforms(&self) -> Vec<Isometry3<T>>; /// Get the names of the links fn link_names(&self) -> Vec<String>; } /// `JointContainer` which has an end transform pub trait KinematicChain<T>: JointContainer<T> where T: Real, { /// Calculate and return the transform of the end of the links fn end_transform(&self) -> Isometry3<T>; } /// Create KinematicChain pub trait ChainContainer { type Chain; fn new_chain(&self, end_link_name: &str) -> Option<Self::Chain>; }