From: Walter Fetter Lages Date: Tue, 20 Mar 2018 16:49:54 +0000 (-0300) Subject: Initial commit X-Git-Tag: 2.0.0~4 X-Git-Url: http://git.ece.ufrgs.br/?a=commitdiff_plain;h=9cd7f43d2c0cbc8bd12d6118a46777920c9715d6;p=twil.git Initial commit twil_control_gazebo twil_controllers: Linearizing controller uses dynamic model computed though KDL, which does not work for mobile robots. twil_description --- 9cd7f43d2c0cbc8bd12d6118a46777920c9715d6 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..35d74bb --- /dev/null +++ b/.gitignore @@ -0,0 +1,51 @@ +devel/ +logs/ +build/ +bin/ +lib/ +msg_gen/ +srv_gen/ +msg/*Action.msg +msg/*ActionFeedback.msg +msg/*ActionGoal.msg +msg/*ActionResult.msg +msg/*Feedback.msg +msg/*Goal.msg +msg/*Result.msg +msg/_*.py +build_isolated/ +devel_isolated/ + +# Generated by dynamic reconfigure +*.cfgc +/cfg/cpp/ +/cfg/*.py + +# Ignore generated docs +*.dox +*.wikidoc + +# eclipse stuff +.project +.cproject + +# qcreator stuff +CMakeLists.txt.user + +srv/_*.py +*.pcd +*.pyc +qtcreator-* +*.user + +/planning/cfg +/planning/docs +/planning/src + +*~ + +# Emacs +.#* + +# Catkin custom files +CATKIN_IGNORE diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..28105dd --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,17 @@ +cmake_minimum_required(VERSION 2.4.6) +include($ENV{ROS_ROOT}/core/rosbuild/rosbuild.cmake) + +# Append to CPACK_SOURCE_IGNORE_FILES a semicolon-separated list of +# directories (or patterns, but directories should suffice) that should +# be excluded from the distro. This is not the place to put things that +# should be ignored everywhere, like "build" directories; that happens in +# rosbuild/rosbuild.cmake. Here should be listed packages that aren't +# ready for inclusion in a distro. +# +# This list is combined with the list in rosbuild/rosbuild.cmake. Note +# that CMake 2.6 may be required to ensure that the two lists are combined +# properly. CMake 2.4 seems to have unpredictable scoping rules for such +# variables. +#list(APPEND CPACK_SOURCE_IGNORE_FILES /core/experimental) + +rosbuild_make_distribution(0.1.0) diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..a818cca --- /dev/null +++ b/Makefile @@ -0,0 +1 @@ +include $(shell rospack find mk)/cmake_stack.mk \ No newline at end of file diff --git a/stack.xml b/stack.xml new file mode 100644 index 0000000..dd41a6b --- /dev/null +++ b/stack.xml @@ -0,0 +1,9 @@ + + TWIL + Maintained by Taiser Barros + GPL + + http://ros.org/wiki/twil + + + diff --git a/twil_control_gazebo/CMakeLists.txt b/twil_control_gazebo/CMakeLists.txt new file mode 100644 index 0000000..0796ff6 --- /dev/null +++ b/twil_control_gazebo/CMakeLists.txt @@ -0,0 +1,33 @@ +cmake_minimum_required(VERSION 2.4.6) +include($ENV{ROS_ROOT}/core/rosbuild/rosbuild.cmake) + +# Set the build type. Options are: +# Coverage : w/ debug symbols, w/o optimization, w/ code-coverage +# Debug : w/ debug symbols, w/o optimization +# Release : w/o debug symbols, w/ optimization +# RelWithDebInfo : w/ debug symbols, w/ optimization +# MinSizeRel : w/o debug symbols, w/ optimization, stripped binaries +#set(ROS_BUILD_TYPE RelWithDebInfo) + +rosbuild_init() + +#set the default path for built executables to the "bin" directory +set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) +#set the default path for built libraries to the "lib" directory +set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib) + +#uncomment if you have defined messages +#rosbuild_genmsg() +#uncomment if you have defined services +#rosbuild_gensrv() + +#common commands for building c++ executables and libraries +#rosbuild_add_library(${PROJECT_NAME} src/example.cpp) +#target_link_libraries(${PROJECT_NAME} another_library) +#rosbuild_add_boost_directories() +#rosbuild_link_boost(${PROJECT_NAME} thread) +#rosbuild_add_executable(example examples/example.cpp) +#target_link_libraries(example ${PROJECT_NAME}) + +# Build RobotSim Interface +rosbuild_add_library(twil_control_gazebo src/robot_sim_twil.cpp) diff --git a/twil_control_gazebo/Makefile b/twil_control_gazebo/Makefile new file mode 100644 index 0000000..b75b928 --- /dev/null +++ b/twil_control_gazebo/Makefile @@ -0,0 +1 @@ +include $(shell rospack find mk)/cmake.mk \ No newline at end of file diff --git a/twil_control_gazebo/manifest.xml b/twil_control_gazebo/manifest.xml new file mode 100644 index 0000000..c3790a8 --- /dev/null +++ b/twil_control_gazebo/manifest.xml @@ -0,0 +1,23 @@ + + + + twil_control_gazebo + + + Walter Fetter Lages + GPL + + http://ros.org/wiki/twil_control_gazebo + + + + + + + + + + + + + diff --git a/twil_control_gazebo/robot_sim_plugins.xml b/twil_control_gazebo/robot_sim_plugins.xml new file mode 100644 index 0000000..9d6b5f8 --- /dev/null +++ b/twil_control_gazebo/robot_sim_plugins.xml @@ -0,0 +1,12 @@ + + + + + A ROS/Gazebo interface Twil, exporting a joint_state_interface and a + joint_effort_interface. + + + diff --git a/twil_control_gazebo/src/robot_sim_twil.cpp b/twil_control_gazebo/src/robot_sim_twil.cpp new file mode 100644 index 0000000..e88b33c --- /dev/null +++ b/twil_control_gazebo/src/robot_sim_twil.cpp @@ -0,0 +1,97 @@ +#include + +#include +#include + +#include + +#include + +#include +#include +#include + +namespace twil_control_gazebo +{ + + class RobotSimTwil:public ros_control_gazebo::RobotSim + { + + unsigned int n_dof_; + + hardware_interface::JointStateInterface js_interface_; + hardware_interface::EffortJointInterface ej_interface_; + + std::vector joint_name_; + std::vector joint_position_; + std::vector joint_velocity_; + std::vector joint_effort_; + std::vector joint_effort_command_; + + std::vector sim_joints_; + + public: + + RobotSimTwil(void):n_dof_(2),joint_name_(n_dof_),joint_position_(n_dof_), + joint_velocity_(n_dof_),joint_effort_(n_dof_),joint_effort_command_(n_dof_) + { + + joint_name_[0]="left_wheel_joint"; + joint_name_[1]="right_wheel_joint"; + + for(unsigned int j=0;j < n_dof_;j++) + { + joint_position_[j]=0.0; + joint_velocity_[j]=0.0; + joint_effort_[j]=0.0; + + joint_effort_command_[j] = 0.0; + + js_interface_.registerJoint(joint_name_[j],&joint_position_[j],&joint_velocity_[j],&joint_effort_[j]); + ej_interface_.registerJoint(js_interface_.getJointStateHandle(joint_name_[j]),&joint_effort_command_[j]); + } + + registerInterface(&js_interface_); + registerInterface(&ej_interface_); + } + + + bool initSim(ros::NodeHandle nh,gazebo::physics::ModelPtr model) + { + for(unsigned int j=0;j < n_dof_;j++) + { + ROS_INFO_STREAM("Getting pointer to gazebo joint: " << joint_name_[j]); + gazebo::physics::JointPtr joint=model->GetJoint(joint_name_[j]); + if(joint) sim_joints_.push_back(joint); + else + { + ROS_ERROR_STREAM("This robot has a joint named \"" << joint_name_[j] + <<"\" which is not in the gazebo model."); + return false; + } + } + return true; + } + + void readSim(ros::Time time,ros::Duration period) + { + for(unsigned int j=0; j < n_dof_;j++) + { +// joint_position_[j]+=angles::shortest_angular_distance +// (joint_position_[j],sim_joints_[j]->GetAngle(0).GetAsRadian()); + joint_position_[j]=sim_joints_[j]->GetAngle(0).GetAsRadian(); + joint_velocity_[j]=sim_joints_[j]->GetVelocity(0); +// joint_effort_[j]=sim_joints_[j]->GetForce(0); + joint_effort_[j]=joint_effort_command_[j]; + } + } + + void writeSim(ros::Time time,ros::Duration period) + { + for(unsigned int j=0;j < n_dof_;j++) sim_joints_[j]->SetForce(0,joint_effort_command_[j]); + } + + }; +} + +PLUGINLIB_DECLARE_CLASS(twil_control_gazebo,RobotSimTwil,twil_control_gazebo::RobotSimTwil,ros_control_gazebo::RobotSim) diff --git a/twil_controllers/CMakeLists.txt b/twil_controllers/CMakeLists.txt new file mode 100644 index 0000000..97a29cd --- /dev/null +++ b/twil_controllers/CMakeLists.txt @@ -0,0 +1,30 @@ +cmake_minimum_required(VERSION 2.4.6) +include($ENV{ROS_ROOT}/core/rosbuild/rosbuild.cmake) + +# Set the build type. Options are: +# Coverage : w/ debug symbols, w/o optimization, w/ code-coverage +# Debug : w/ debug symbols, w/o optimization +# Release : w/o debug symbols, w/ optimization +# RelWithDebInfo : w/ debug symbols, w/ optimization +# MinSizeRel : w/o debug symbols, w/ optimization, stripped binaries +#set(ROS_BUILD_TYPE RelWithDebInfo) + +rosbuild_init() + +#set the default path for built executables to the "bin" directory +set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) +#set the default path for built libraries to the "lib" directory +set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib) + +#uncomment if you have defined messages +#rosbuild_genmsg() +#uncomment if you have defined services +#rosbuild_gensrv() + +#common commands for building c++ executables and libraries +rosbuild_add_library(${PROJECT_NAME} src/cart_linearizing_controller.cpp) +#target_link_libraries(${PROJECT_NAME} another_library) +#rosbuild_add_boost_directories() +#rosbuild_link_boost(${PROJECT_NAME} thread) +#rosbuild_add_executable(example examples/example.cpp) +#target_link_libraries(example ${PROJECT_NAME}) diff --git a/twil_controllers/Makefile b/twil_controllers/Makefile new file mode 100644 index 0000000..b75b928 --- /dev/null +++ b/twil_controllers/Makefile @@ -0,0 +1 @@ +include $(shell rospack find mk)/cmake.mk \ No newline at end of file diff --git a/twil_controllers/README b/twil_controllers/README new file mode 100644 index 0000000..326c0d8 --- /dev/null +++ b/twil_controllers/README @@ -0,0 +1,3 @@ +To publish v: + +rostopic pub /twil/cart_linearizing_controller/command std_msgs/Float64MultiArray "data: [0.0, 0.04]" diff --git a/twil_controllers/config/effort_control.yaml b/twil_controllers/config/effort_control.yaml new file mode 100644 index 0000000..bdca9e8 --- /dev/null +++ b/twil_controllers/config/effort_control.yaml @@ -0,0 +1,13 @@ +twil: + + joint_state_controller: + type: joint_state_controller/JointStateController + publish_rate: 100 + + left_wheel_joint_effort_controller: + type: effort_controllers/JointEffortController + joint: left_wheel_joint + + right_wheel_joint_effort_controller: + type: effort_controllers/JointEffortController + joint: right_wheel_joint diff --git a/twil_controllers/config/linearizing_control.yaml b/twil_controllers/config/linearizing_control.yaml new file mode 100644 index 0000000..a393a24 --- /dev/null +++ b/twil_controllers/config/linearizing_control.yaml @@ -0,0 +1,11 @@ +twil: + + joint_state_controller: + type: joint_state_controller/JointStateController + publish_rate: 100 + + cart_linearizing_controller: + type: twil_controllers/CartLinearizingController + joints: + - left_wheel_joint + - right_wheel_joint diff --git a/twil_controllers/config/velocity_control.yaml b/twil_controllers/config/velocity_control.yaml new file mode 100644 index 0000000..54aa494 --- /dev/null +++ b/twil_controllers/config/velocity_control.yaml @@ -0,0 +1,16 @@ +twil: + + joint_state_controller: + type: joint_state_controller/JointStateController + publish_rate: 100 + + left_wheel_joint_velocity_controller: + type: effort_controllers/JointVelocityController + joint: left_wheel_joint + pid: {p: 0.0, i: 0.0, d: 0.0} + + right_wheel_joint_velocity_controller: + type: effort_controllers/JointVelocityController + joint: right_wheel_joint + pid: {p: 0.0, i: 0.0, d: 0.0} + diff --git a/twil_controllers/include/twil_controllers/cart_linearizing_controller.h b/twil_controllers/include/twil_controllers/cart_linearizing_controller.h new file mode 100644 index 0000000..bb27196 --- /dev/null +++ b/twil_controllers/include/twil_controllers/cart_linearizing_controller.h @@ -0,0 +1,54 @@ +#ifndef TWIL_CONTROLLERS_CART_LINEARIZING_CONTROLLER_H +#define TWIL_CONTROLLERS_CART_LINEARIZING_CONTROLLER_H + +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include + + +namespace twil_controllers +{ + class CartLinearizingController: public controller_interface::Controller + { + public: + CartLinearizingController(void); + ~CartLinearizingController(void); + + bool init(hardware_interface::EffortJointInterface *robot, ros::NodeHandle &n); + void starting(const ros::Time& time); + void update(const ros::Time& time); + + private: + ros::NodeHandle node_; + ros::Time last_time_; + hardware_interface::EffortJointInterface *robot_; + std::vector joints_; + + void commandCB(const std_msgs::Float64MultiArray::ConstPtr &command); + ros::Subscriber sub_command_; + + KDL::ChainIdSolver_RNE *idsolver; + + KDL::JntArray phi; + KDL::JntArray nu; + KDL::JntArray dnu; + KDL::JntArray torque; + std::vector v; + + KDL::Wrenches fext; + + std::vector wheelRadius; + double wheelBase; + }; +} +#endif diff --git a/twil_controllers/launch/cart_linearizing.launch b/twil_controllers/launch/cart_linearizing.launch new file mode 100644 index 0000000..deccc45 --- /dev/null +++ b/twil_controllers/launch/cart_linearizing.launch @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/twil_controllers/launch/joint_effort.launch b/twil_controllers/launch/joint_effort.launch new file mode 100644 index 0000000..c1ac051 --- /dev/null +++ b/twil_controllers/launch/joint_effort.launch @@ -0,0 +1,9 @@ + + + + + + + + diff --git a/twil_controllers/launch/joint_velocity.launch b/twil_controllers/launch/joint_velocity.launch new file mode 100644 index 0000000..4760f53 --- /dev/null +++ b/twil_controllers/launch/joint_velocity.launch @@ -0,0 +1,9 @@ + + + + + + + + diff --git a/twil_controllers/manifest.xml b/twil_controllers/manifest.xml new file mode 100644 index 0000000..9c40ae9 --- /dev/null +++ b/twil_controllers/manifest.xml @@ -0,0 +1,24 @@ + + + + twil_controllers + + + Walter Fetter Lages + GPL + + http://ros.org/wiki/twil_controllers + + + + + + + + + + + + + + diff --git a/twil_controllers/src/cart_linearizing_controller.cpp b/twil_controllers/src/cart_linearizing_controller.cpp new file mode 100644 index 0000000..3d8a03c --- /dev/null +++ b/twil_controllers/src/cart_linearizing_controller.cpp @@ -0,0 +1,162 @@ +#include +#include + +#include +#include +#include + +namespace twil_controllers +{ + CartLinearizingController::CartLinearizingController(void): + phi(0),nu(0),dnu(0),torque(0),v(0),fext(0),wheelRadius(0) + { + } + + CartLinearizingController::~CartLinearizingController(void) + { + sub_command_.shutdown(); + } + + bool CartLinearizingController::init(hardware_interface::EffortJointInterface *robot, ros::NodeHandle &n) + { + node_=n; + robot_=robot; + + XmlRpc::XmlRpcValue joint_names; + if(!node_.getParam("joints",joint_names)) + { + ROS_ERROR("No 'joints' parameter in controller. (namespace: %s)",node_.getNamespace().c_str()); + return false; + } + + if(joint_names.getType() != XmlRpc::XmlRpcValue::TypeArray) + { + ROS_ERROR("The 'joints' parameter is not a struct. (namespace: %s)",node_.getNamespace().c_str()); + return false; + } + + for(int i=0; i < joint_names.size();i++) + { + XmlRpc::XmlRpcValue &name_value=joint_names[i]; + if(name_value.getType() != XmlRpc::XmlRpcValue::TypeString) + { + ROS_ERROR("Array of joint names should contain only strings. (namespace: %s)",node_.getNamespace().c_str()); + return false; + } + + hardware_interface::JointHandle j=robot->getJointHandle((std::string)name_value); + joints_.push_back(j); + v.push_back(0); + } + sub_command_ = node_.subscribe("command",1000,&CartLinearizingController::commandCB, this); + + std::string robot_desc_string; + if(!node_.getParam("/robot_description",robot_desc_string)) + { + ROS_ERROR("Could not find '/robot_description'."); + return false; + } + + KDL::Tree tree; + if (!kdl_parser::treeFromString(robot_desc_string,tree)) + { + ROS_ERROR("Failed to construct KDL tree."); + return false; + } + + KDL::Chain chain; + if (!tree.getChain("left_wheel","right_wheel",chain)) + { + ROS_ERROR("Failed to get chain from KDL tree."); + return false; + } + + // Get gravity from gazebo or set values if not simulating + KDL::Vector g; + node_.param("/gazebo/gravity_x",g[1],0.0); + node_.param("/gazebo/gravity_y",g[1],0.0); + node_.param("/gazebo/gravity_z",g[2],-9.8); + + if((idsolver=new KDL::ChainIdSolver_RNE(chain,g)) == NULL) + { + ROS_ERROR("Failed to create ChainIDSolver_RNE."); + return false; + } + + // get wheelBase from URDF (actually from KDL tree) + KDL::SegmentMap::const_iterator segmentMapIter=tree.getSegment("left_wheel_support"); + KDL::Frame leftSupportFrame=segmentMapIter->second.segment.getFrameToTip(); + + segmentMapIter=tree.getSegment("right_wheel_support"); + KDL::Frame rightSupportFrame=segmentMapIter->second.segment.getFrameToTip(); + + wheelRadius.resize(chain.getNrOfJoints()); + wheelBase=leftSupportFrame(1,3)-rightSupportFrame(1,3); + + // get wheelRadius from URDF (actually from KDL tree) + segmentMapIter=tree.getSegment("chassis"); + KDL::Frame chassisFrame=segmentMapIter->second.segment.getFrameToTip(); + + segmentMapIter=tree.getSegment("left_wheel"); + KDL::Joint leftWheelJoint=segmentMapIter->second.segment.getJoint(); + wheelRadius[0]=chassisFrame(2,3)+leftSupportFrame(2,3)+leftWheelJoint.JointOrigin().z(); + + segmentMapIter=tree.getSegment("right_wheel"); + KDL::Joint rightWheelJoint=segmentMapIter->second.segment.getJoint(); + wheelRadius[1]=chassisFrame(2,3)+rightSupportFrame(2,3)+rightWheelJoint.JointOrigin().z(); + + // set vectors to the right size + phi.resize(chain.getNrOfJoints()); + nu.resize(chain.getNrOfJoints()); + dnu.resize(chain.getNrOfJoints()); + torque.resize(chain.getNrOfJoints()); + + fext.resize(chain.getNrOfSegments()); + + return true; + } + + void CartLinearizingController::starting(const ros::Time& time) + { + last_time_=time; + for(unsigned int i=0; i < joints_.size();i++) v[i]=0.0; + } + + void CartLinearizingController::update(const ros::Time& time) + { + ros::Duration dt=time-last_time_; + last_time_=time; + + for(unsigned int i=0;i < joints_.size();i++) + { + phi(i)=joints_[i].getPosition(); + nu(i)=joints_[i].getVelocity(); + } + + + dnu(0)=v[0]/wheelRadius[0]-v[1]*wheelBase/2.0/wheelRadius[0]; // left wheel + dnu(1)=v[0]/wheelRadius[1]+v[1]*wheelBase/2.0/wheelRadius[1]; // right wheel + + + for(unsigned int i=0;i < fext.size();i++) fext[i].Zero(); + + for(unsigned int i=0;i < joints_.size();i++) + std::cout << "phi=" << phi(i) << " nu=" << nu(i) + << " dnu=" << dnu(i) << std::endl; + + // Compute linearization. + if(idsolver->CartToJnt(phi,nu,dnu,fext,torque) < 0) ROS_ERROR("KDL inverse dynamics solver failed."); + + for(unsigned int i=0;i < joints_.size(); i++) + std::cout << "torque=" << torque(i) << std::endl; + + // Apply torques + for(unsigned int i=0;i < joints_.size();i++) joints_[i].setCommand(torque(i)); + } + + void CartLinearizingController::commandCB(const std_msgs::Float64MultiArray::ConstPtr &command) + { + for(unsigned int i=0;i < command->data.size();i++) v[i]=command->data[i]; + } +} +PLUGINLIB_DECLARE_CLASS(twil_controllers,CartLinearizingController,twil_controllers::CartLinearizingController,controller_interface::ControllerBase) diff --git a/twil_controllers/twil_controllers_plugins.xml b/twil_controllers/twil_controllers_plugins.xml new file mode 100644 index 0000000..2348f16 --- /dev/null +++ b/twil_controllers/twil_controllers_plugins.xml @@ -0,0 +1,11 @@ + + + + + The CartLinearizingController linearizes the Twil dynamic model. The + linearized inputs are linear and angular accelerations. It expects a + EffortJointInterface type of hardware interface. + + + + diff --git a/twil_description/CMakeLists.txt b/twil_description/CMakeLists.txt new file mode 100644 index 0000000..f8f1c9c --- /dev/null +++ b/twil_description/CMakeLists.txt @@ -0,0 +1,30 @@ +cmake_minimum_required(VERSION 2.4.6) +include($ENV{ROS_ROOT}/core/rosbuild/rosbuild.cmake) + +# Set the build type. Options are: +# Coverage : w/ debug symbols, w/o optimization, w/ code-coverage +# Debug : w/ debug symbols, w/o optimization +# Release : w/o debug symbols, w/ optimization +# RelWithDebInfo : w/ debug symbols, w/ optimization +# MinSizeRel : w/o debug symbols, w/ optimization, stripped binaries +#set(ROS_BUILD_TYPE RelWithDebInfo) + +rosbuild_init() + +#set the default path for built executables to the "bin" directory +set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) +#set the default path for built libraries to the "lib" directory +set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib) + +#uncomment if you have defined messages +#rosbuild_genmsg() +#uncomment if you have defined services +#rosbuild_gensrv() + +#common commands for building c++ executables and libraries +#rosbuild_add_library(${PROJECT_NAME} src/example.cpp) +#target_link_libraries(${PROJECT_NAME} another_library) +#rosbuild_add_boost_directories() +#rosbuild_link_boost(${PROJECT_NAME} thread) +#rosbuild_add_executable(example examples/example.cpp) +#target_link_libraries(example ${PROJECT_NAME}) diff --git a/twil_description/Makefile b/twil_description/Makefile new file mode 100644 index 0000000..b75b928 --- /dev/null +++ b/twil_description/Makefile @@ -0,0 +1 @@ +include $(shell rospack find mk)/cmake.mk \ No newline at end of file diff --git a/twil_description/doc/dimensions_battery_bosch_12v.pdf b/twil_description/doc/dimensions_battery_bosch_12v.pdf new file mode 100644 index 0000000..2184e85 Binary files /dev/null and b/twil_description/doc/dimensions_battery_bosch_12v.pdf differ diff --git a/twil_description/doc/dimensions_chassis.pdf b/twil_description/doc/dimensions_chassis.pdf new file mode 100644 index 0000000..114b93c Binary files /dev/null and b/twil_description/doc/dimensions_chassis.pdf differ diff --git a/twil_description/doc/dimensions_cpu.pdf b/twil_description/doc/dimensions_cpu.pdf new file mode 100644 index 0000000..d3488b0 Binary files /dev/null and b/twil_description/doc/dimensions_cpu.pdf differ diff --git a/twil_description/launch/twil.launch b/twil_description/launch/twil.launch new file mode 100644 index 0000000..384f343 --- /dev/null +++ b/twil_description/launch/twil.launch @@ -0,0 +1,4 @@ + + + + diff --git a/twil_description/launch/twil_sim.launch b/twil_description/launch/twil_sim.launch new file mode 100644 index 0000000..9b13c48 --- /dev/null +++ b/twil_description/launch/twil_sim.launch @@ -0,0 +1,6 @@ + + + + + + diff --git a/twil_description/launch/twil_wam.launch b/twil_description/launch/twil_wam.launch new file mode 100644 index 0000000..1abdf97 --- /dev/null +++ b/twil_description/launch/twil_wam.launch @@ -0,0 +1,4 @@ + + + + diff --git a/twil_description/launch/twil_wam_sim.launch b/twil_description/launch/twil_wam_sim.launch new file mode 100644 index 0000000..eccc16a --- /dev/null +++ b/twil_description/launch/twil_wam_sim.launch @@ -0,0 +1,7 @@ + + + + + + + diff --git a/twil_description/manifest.xml b/twil_description/manifest.xml new file mode 100644 index 0000000..d5b36a3 --- /dev/null +++ b/twil_description/manifest.xml @@ -0,0 +1,14 @@ + + + + twil_description + + + Walter Fetter Lages + GPL + + http://ros.org/wiki/twil_description + + + + diff --git a/twil_description/meshes/battery_bosch_12v.stl b/twil_description/meshes/battery_bosch_12v.stl new file mode 100644 index 0000000..a8fa985 Binary files /dev/null and b/twil_description/meshes/battery_bosch_12v.stl differ diff --git a/twil_description/meshes/castor_base.stl b/twil_description/meshes/castor_base.stl new file mode 100644 index 0000000..d7cc923 Binary files /dev/null and b/twil_description/meshes/castor_base.stl differ diff --git a/twil_description/meshes/castor_support.stl b/twil_description/meshes/castor_support.stl new file mode 100644 index 0000000..4cac77b Binary files /dev/null and b/twil_description/meshes/castor_support.stl differ diff --git a/twil_description/meshes/castor_wheel.stl b/twil_description/meshes/castor_wheel.stl new file mode 100644 index 0000000..718450c Binary files /dev/null and b/twil_description/meshes/castor_wheel.stl differ diff --git a/twil_description/meshes/chassis.stl b/twil_description/meshes/chassis.stl new file mode 100644 index 0000000..57c9257 Binary files /dev/null and b/twil_description/meshes/chassis.stl differ diff --git a/twil_description/meshes/cpu.stl b/twil_description/meshes/cpu.stl new file mode 100644 index 0000000..3e77b3d Binary files /dev/null and b/twil_description/meshes/cpu.stl differ diff --git a/twil_description/meshes/fixed_wheel.stl b/twil_description/meshes/fixed_wheel.stl new file mode 100644 index 0000000..ca0f19f Binary files /dev/null and b/twil_description/meshes/fixed_wheel.stl differ diff --git a/twil_description/meshes/fixed_wheel_support.stl b/twil_description/meshes/fixed_wheel_support.stl new file mode 100644 index 0000000..e9500ca Binary files /dev/null and b/twil_description/meshes/fixed_wheel_support.stl differ diff --git a/twil_description/meshes/left_wheel_support.stl b/twil_description/meshes/left_wheel_support.stl new file mode 100644 index 0000000..e9500ca Binary files /dev/null and b/twil_description/meshes/left_wheel_support.stl differ diff --git a/twil_description/meshes/right_wheel_support.stl b/twil_description/meshes/right_wheel_support.stl new file mode 100644 index 0000000..20054ff Binary files /dev/null and b/twil_description/meshes/right_wheel_support.stl differ diff --git a/twil_description/xacro/battery_bosch_12v.urdf.xacro b/twil_description/xacro/battery_bosch_12v.urdf.xacro new file mode 100644 index 0000000..289089b --- /dev/null +++ b/twil_description/xacro/battery_bosch_12v.urdf.xacro @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gazebo/FlatBlack + + + + + diff --git a/twil_description/xacro/castor_base.urdf.xacro b/twil_description/xacro/castor_base.urdf.xacro new file mode 100644 index 0000000..9271976 --- /dev/null +++ b/twil_description/xacro/castor_base.urdf.xacro @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gazebo/White + + + + + + diff --git a/twil_description/xacro/castor_support.urdf.xacro b/twil_description/xacro/castor_support.urdf.xacro new file mode 100644 index 0000000..b5c86d0 --- /dev/null +++ b/twil_description/xacro/castor_support.urdf.xacro @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gazebo/Grey + + + + + diff --git a/twil_description/xacro/castor_wheel.urdf.xacro b/twil_description/xacro/castor_wheel.urdf.xacro new file mode 100644 index 0000000..21172a2 --- /dev/null +++ b/twil_description/xacro/castor_wheel.urdf.xacro @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gazebo/Grey + + + + + diff --git a/twil_description/xacro/chassis.urdf.xacro b/twil_description/xacro/chassis.urdf.xacro new file mode 100644 index 0000000..dc9e36c --- /dev/null +++ b/twil_description/xacro/chassis.urdf.xacro @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gazebo/Gold + + + + + diff --git a/twil_description/xacro/cpu.urdf.xacro b/twil_description/xacro/cpu.urdf.xacro new file mode 100644 index 0000000..dcc4a58 --- /dev/null +++ b/twil_description/xacro/cpu.urdf.xacro @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gazebo/Grey + + + + + diff --git a/twil_description/xacro/eurocard.urdf.xacro b/twil_description/xacro/eurocard.urdf.xacro new file mode 100644 index 0000000..b28b461 --- /dev/null +++ b/twil_description/xacro/eurocard.urdf.xacro @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gazebo/Green + + + + + diff --git a/twil_description/xacro/fixed_wheel.urdf.xacro b/twil_description/xacro/fixed_wheel.urdf.xacro new file mode 100644 index 0000000..dfc8761 --- /dev/null +++ b/twil_description/xacro/fixed_wheel.urdf.xacro @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gazebo/FlatBlack + + + + + diff --git a/twil_description/xacro/fixed_wheel_support.urdf.xacro b/twil_description/xacro/fixed_wheel_support.urdf.xacro new file mode 100644 index 0000000..1346e56 --- /dev/null +++ b/twil_description/xacro/fixed_wheel_support.urdf.xacro @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + /> + + + + + + + + + + + + + + + + + + Gazebo/White + + + + + diff --git a/twil_description/xacro/twil.urdf.xacro b/twil_description/xacro/twil.urdf.xacro new file mode 100644 index 0000000..efca20e --- /dev/null +++ b/twil_description/xacro/twil.urdf.xacro @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + twil + twil_control_gazebo/RobotSimTwil + 0.001 + + + + diff --git a/twil_description/xacro/twil_wam.urdf.xacro b/twil_description/xacro/twil_wam.urdf.xacro new file mode 100644 index 0000000..1c1e31c --- /dev/null +++ b/twil_description/xacro/twil_wam.urdf.xacro @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +