1、创作工作空间
mkdir -p barrett_ws/src
2、进入工作空间并下载资源包,二者缺一不可。
cd barrett_ws/src
git clone https://github.com/RobotnikAutomation/barrett_hand_sim
git clone https://github.com/RobotnikAutomation/barrett_hand_common.git
两个链接分别对应两个文件,两个文件内部的各个文件内容为何,有何意义,自行搜索。必须下 载到src目录下。
如果下载不成功:
(1)检查是否联网成功
(2)可能需要翻墙利用外网
(3)将链接中https换成git,再进行下载。
3、编译功能包
cd .. #从src文件夹下退出,编译必须在根目录下
catkin_make
前述步骤如下图所示
本人使用Ubuntu18.04、melodic版本ROS ,编译后报错,如下图所示。
上网搜索后,应该与gazebo版本相关,gazebo版本更新以后,相关函数也会更新。根据报错提示,进入对应文件,将下面代码复制进去,把原来代码完全替换。
#include <gazebo_mimic_plugin/mimic_plugin.h>
using namespace gazebo;
MimicPlugin::MimicPlugin(): ModelPlugin()
{
kill_sim = false;
joint_.reset();
mimic_joint_.reset();
}
MimicPlugin::~MimicPlugin()
{
this->updateConnection.reset();
kill_sim = true;
}
void MimicPlugin::Load(physics::ModelPtr _parent, sdf::ElementPtr _sdf )
{
this->model_ = _parent;
this->world_ = this->model_->GetWorld();
joint_name_ = "joint";
if (_sdf->HasElement("joint"))
joint_name_ = _sdf->GetElement("joint")->Get<std::string>();
mimic_joint_name_ = "mimicJoint";
if (_sdf->HasElement("mimicJoint"))
mimic_joint_name_ = _sdf->GetElement("mimicJoint")->Get<std::string>();
multiplier_ = 1.0;
if (_sdf->HasElement("multiplier"))
multiplier_ = _sdf->GetElement("multiplier")->Get<double>();
// Get the name of the parent model
std::string modelName = _sdf->GetParent()->Get<std::string>("name");
// Listen to the update event. This event is broadcast every
// simulation iteration.
this->updateConnection = event::Events::ConnectWorldUpdateBegin(
boost::bind(&MimicPlugin::UpdateChild, this));
ROS_INFO_STREAM("MimicPlugin model name: "<< modelName);
joint_ = model_->GetJoint(joint_name_);
mimic_joint_ = model_->GetJoint(mimic_joint_name_);
}
void MimicPlugin::UpdateChild()
{
mimic_joint_->SetPosition(0, joint_->Position(0)*multiplier_);
}
GZ_REGISTER_MODEL_PLUGIN(MimicPlugin);
再次编译,结果如下图
4、运行仿真(csdn为本人所建包名,执行命令时将其忽略即可)
melodic@melodic:~/csdn$ source devel/setup.bash
melodic@melodic:~/csdn$ roslaunch barrett_hand_gazebo barrett_hand.launch
结果如下图
终端中会有如下报错,搜索后发现该错误似乎无影响。
5、发布指令控制关节
列出话题(该资源只有四个可控关节,实际上应该是八个)
rostopic list #列出话题
/bh_j11_position_controller/command
/bh_j12_position_controller/command
/bh_j22_position_controller/command
/bh_j32_position_controller/command
/clock
/gazebo/link_states
/gazebo/model_states
/gazebo/parameter_descriptions
/gazebo/parameter_updates
/gazebo/set_link_state
/gazebo/set_model_state
/joint_states
/rosout
/rosout_agg
/tf
/tf_static
发布指令
rostopic pub /bh_j11_position_controller/command std_msgs/Fat64 '1.0' #弧度制
rostopic pub /bh_j12_position_controller/command std_msgs/Float64 "data: 1.0"
结果如下图
6、参考链接
https://github.com/gaolongsen/Barrett-Hand.git(该作者发布内容截止目前有错误,通过邮件联系,作者将会做出更改,注意作者发布的版本)
https://github.com/kuri-kustar/barrett_hand.git(编译时会报错,删除错误功能包可编译成功,删除错误功能包会丧失部分功能。运行时仍会报错,笔者没有继续往下进行)