void pickplace::evaluate_move_accuracy()
else
sensor_msgs::jointstateconstptr msg = ros::topic::waitformessage(topic, ros::duration(1.0));
for (int i =0;iposition[i]) );
}current_state.update();
eigen::affine3d transform = current_state.getgloballinktransform (robot_type_ + "_end_effector");
geometry_msgs::pose feeback_pose;
tf::poseeigentomsg(transform,feeback_pose);
transform = target_state.getgloballinktransform (robot_type_ + "_end_effector");
geometry_msgs::pose target_state_pose;
tf::poseeigentomsg(transform,target_state_pose);
std::string error_out,joints_out,torques_out;
error_out.clear();
joints_out.clear();
torques_out.clear();
o_file_<("/tf", ros::duration(1.0));
if (cartesian_move_)
o_file_<<"error --- x = "double torque = msg->effort[i];
double error = fabs(target - current);
error = fmod(error, 360);
if (error>180)
error = fabs(error-360);
joints_out = joints_out + joint_names_[i]+ " target=" + boost::lexical_cast(target) + " feedback=" + boost::lexical_cast(current) + " ";
error_out = error_out + boost::lexical_cast(error) + " ";
torques_out = torques_out + boost::lexical_cast(torque) + " ";
}o_file_<1、得到當前狀態
robot_state::robotstate target_state = group_->getjointvaluetarget();
target_state.update();
//group_->getcurrentstate does not give the correct values
robot_state::robotstate current_state(target_state);
2、得到當前和目標狀態的末端執行器的位姿資訊
sensor_msgs::jointstateconstptr msg = ros::topic::waitformessage(topic, ros::duration(1.0));
for (int i =0;iposition[i]) );
}current_state.update();
eigen::affine3d transform = current_state.getgloballinktransform (robot_type_ + "_end_effector");
geometry_msgs::pose feeback_pose;
tf::poseeigentomsg(transform,feeback_pose);
transform = target_state.getgloballinktransform (robot_type_ + "_end_effector");
geometry_msgs::pose target_state_pose;
tf::poseeigentomsg(transform,target_state_pose);
通過ros::topic::waitformessage(topic, ros::duration(1.0));等待sensor_msgs::jointstate型別的message到達topic,等待時間為ros::duration(1.0),返回值為當前的msg。
通過current_state.setjointpositions(joint_name,msg->position),設定各個關節的position,同樣還能設定關節的速度,加速度
之後就得到當前與目標狀態的位姿的msg形式
3、輸出目標位姿和當前位姿的資訊
if (cartesian_move_)
o_file_<<"error --- x = "《通過 //geometry_msgs::posestamped target_pose = group_->getposetarget(robot_type_ + "_end_effector");
//geometry_msgs::posestamped current_pose = group_->getcurrentpose (robot_type_ + "_end_effector");
可以分別得到當前的位姿以及設定的目標的位姿資訊。
通過訂閱/j2n6s300_driver/out/tool_pose,訊息型別為geometry_msgs::posestamped,輸入當檔案中,注意,輸出檔案只能輸出msg型別。
最後列印各個方向的差的絕對值。
4、列印最終資訊
o_file_《關節是弧度資訊,弧度×180/pi換算成角度。
azkaban web server原始碼解析
azkaban主要用於hadoop相關job任務的排程,但也可以應用任何需要排程管理的任務,可以完全代替crontab。azkaban主要分為web server 任務上傳,管理,排程 executor server 接受web server的排程指令,進行任務執行 1.資料表 projects 工...
JDK LinkedHashMap原始碼解析
今天來分析一下jdk linkedhashmap的源 public class linkedhashmapextends hashmapimplements map可以看到,linkedhashmap繼承自hashmap,並且也實現了map介面,所以linkedhashmap沿用了hashmap的大...
Redux原始碼createStore解讀常用方法
const store createstore reducer,preloadedstate enhancer 直接返回當前currentstate,獲取state值,return state 我覺得應該深轉殖乙個新的物件返回,不然有可能會被外部修改 function getstate consol...