kinova test accuracy原始碼解析

2021-08-21 13:23:58 字數 2946 閱讀 6182

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...