example.cpp
Go to the documentation of this file.
2 #include <ros/ros.h>
3 
14 enum Code
15 {
16  FG_BLACK = 30,
17  FG_RED = 31,
18  FG_GREEN = 32,
19  FG_YELLOW = 33,
20  FG_BLUE = 34,
21  FG_MAGENTA = 35,
22  FG_CYAN = 36,
24  FG_DEFAULT = 39,
25  BG_RED = 41,
26  BG_GREEN = 42,
27  BG_BLUE = 44,
28  BG_DEFAULT = 49,
36  FG_WHITE = 97
37 };
38 
39 std::ostream& operator<<(std::ostream& os,
40  Code code)
41 {
42  return os << "\033[" << static_cast<int>(code) << "m";
43 }
44 
45 using namespace fanuc_post_processor;
46 
51 int main(int argc,
52  char **argv)
53 {
54  ros::init(argc, argv, "fanuc_post_processor_application");
55  ros::NodeHandle node;
56 
57  try
58  {
59  FanucPostProcessor fanuc_pp;
60  fanuc_pp.setProgramName("ROS_TP_program_");
61  fanuc_pp.setProgramComment("ROS generated");
62  fanuc_pp.setApplicative("ARC Welding Equipment : 1,*,*,*,*");
63 
64  fanuc_pp.appendComment("This is a ROS generated TP program");
65  fanuc_pp.appendEmptyLine();
66  fanuc_pp.appendDigitalOutput(5, true);
67  fanuc_pp.appendWait(0.5);
68  fanuc_pp.appendDigitalOutput(5, false);
69  fanuc_pp.appendDigitalOutput(3, 0.5);
70  fanuc_pp.appendWait(1);
71  fanuc_pp.appendUFrame(9);
72  fanuc_pp.appendUTool(2);
73  fanuc_pp.appendGroupOutput(3, 5);
74  fanuc_pp.appendSetRegister(4, 50);
75  fanuc_pp.appendRun("MY_OTHER_TP_PROGRAM");
76  fanuc_pp.appendLabel(1);
77  fanuc_pp.appendDataMonitorStart(19);
78 
79  FanucPose pose;
80  // Add external linear axis
81  FanucAxis ext_axis(FanucAxis::AxisType::LINEAR, "E1", M_PI);
82  pose.groups_.at(0).axis_.push_back(ext_axis);
83 
84  // Add extra group with 2 rotative axis, J1 and J2
85  std::vector<FanucAxis> axes;
86  axes.push_back(FanucAxis(FanucAxis::AxisType::ROTATIVE, "J1", 1));
87  axes.push_back(FanucAxis(FanucAxis::AxisType::ROTATIVE, "J2", 2));
88 
89  FanucGroup group_positionner(axes);
90  pose.groups_.push_back(group_positionner);
91 
92  FanucPose::Config config;
93  std::get<0>(config) = FanucPose::FlipNonFlip::Flip;
94  std::get<1>(config) = FanucPose::Elbow::Up;
95  std::get<2>(config) = FanucPose::BackFront::Front;
96  pose.configuration_ = config;
97 
98  // With C++14, gcc 6 or higher you can do this instead:
99  //pose.configuration_ =
100  //{ FanucPose::FlipNonFlip::Flip, FanucPose::Elbow::Up, FanucPose::BackFront::Front};
101 
102  for (unsigned i(0); i < 10; ++i)
103  {
104  pose.move_type_ = FanucPose::MovementType::LINEAR;
105  pose.speed_register_ = false;
106  pose.speed_ = 20;
107  pose.speed_type_ = FanucPose::SpeedType::CM_MIN;
108  pose.cnt_ = 100;
109  pose.option_ = "INC";
110  Eigen::Isometry3d pose_1(Eigen::Isometry3d::Identity());
111  pose_1.translation() << 0.1, 0.2, 0;
112  pose.setRobotPose(pose_1);
113  pose.groups_.at(0).user_frame_ = 2;
114  pose.groups_.at(0).tool_frame_ = 6;
115  pose.groups_.at(1).user_frame_ = 8;
116  pose.groups_.at(1).tool_frame_ = 9;
117  fanuc_pp.appendPose(pose);
118  }
119 
120  pose.move_type_ = FanucPose::MovementType::JOINT;
121  pose.speed_register_ = true; // Use register for speed
122  pose.speed_ = 4; // Register 4
123  pose.speed_type_ = FanucPose::SpeedType::PERCENTAGE;
124  pose.cnt_ = 60;
125  pose.option_.clear();
126  Eigen::Isometry3d pose_2(Eigen::Isometry3d::Identity());
127  pose_2.translation() << 0.12, 0.1, 0.1;
128  pose.setRobotPose(pose_2);
129  pose.groups_.at(0).user_frame_ = 1;
130  pose.groups_.at(0).tool_frame_ = 1;
131  pose.groups_.at(1).user_frame_ = 6;
132  pose.groups_.at(1).tool_frame_ = 4;
133  fanuc_pp.appendPose(pose);
134 
135  FanucPose pose_id;
136  pose_id.is_pose_id_ = true; // We will ignore the groups_ of this pose and look for pose_id_ to get it
137  pose_id.pose_id_ = 1; // Set the pose ID to be used to 1 (first pose added)
138  pose_id.move_type_ = FanucPose::MovementType::LINEAR;
139  pose_id.speed_ = 10;
140  pose_id.speed_type_ = FanucPose::SpeedType::CM_MIN;
141  pose_id.cnt_ = 100;
142  fanuc_pp.appendPoseId(pose_id);
143 
144  fanuc_pp.appendDataMonitorStop();
145  fanuc_pp.appendJumpLabel(1);
146 
147  std::vector<std::pair<FanucPostProcessor::ProgramName, FanucPostProcessor::Program>> programs;
148  fanuc_pp.generatePrograms(programs, 20);
149  ROS_INFO_STREAM("These are the generated programs:");
150  for (unsigned i(0); i < programs.size(); ++i)
151  ROS_INFO_STREAM(FG_GREEN << programs.at(i).first << FG_DEFAULT << std::endl << programs.at(i).second);
152 
153  // Try to upload program
154  fanuc_pp.uploadToFtp(programs, "192.168.1.1");
155  }
156  catch (std::runtime_error &e)
157  {
158  ROS_ERROR_STREAM(e.what());
159  return 1;
160  }
161 
162  return 0;
163 }
bool speed_register_
void appendGroupOutput(const unsigned id, const unsigned value)
unsigned cnt_
void appendComment(const std::string comment)
Config configuration_
ROSCPP_DECL void init(int &argc, char **argv, const std::string &name, uint32_t options=0)
void appendSetRegister(const unsigned r_id, const double value)
unsigned generatePrograms(std::vector< std::pair< ProgramName, Program >> &output_programs, const unsigned lines_per_program=0)
void appendPose(FanucPose &pose)
void appendPoseId(FanucPose &pose)
void appendJumpLabel(const unsigned id)
std::ostream & operator<<(std::ostream &os, Code code)
Definition: example.cpp:39
unsigned pose_id_
void appendLabel(const unsigned id)
std::vector< FanucGroup > groups_
void appendDigitalOutput(const unsigned digital_out_id, const bool state)
void setProgramName(std::string name)
Code
Definition: example.cpp:14
double speed_
std::string option_
int main(int argc, char **argv)
The main function.
Definition: example.cpp:51
void setRobotPose(const Eigen::Isometry3d &pose)
MovementType move_type_
void appendEmptyLine()
std::tuple< FlipNonFlip, Elbow, BackFront > Config
bool is_pose_id_
void appendDataMonitorStart(const unsigned id)
void setProgramComment(const std::string comment)
#define ROS_INFO_STREAM(args)
void setApplicative(const std::string appl)
void appendWait(const double time)
void appendUFrame(const unsigned uf_id)
void uploadToFtp(const std::vector< std::pair< ProgramName, Program >> programs, const std::string ip_address, const std::string port_number="21", const std::string username="", const std::string password="")
#define ROS_ERROR_STREAM(args)
void appendUTool(const unsigned ut_id)
void appendRun(const std::string program_name)
void appendDataMonitorStop()
SpeedType speed_type_


fanuc_post_processor_example
Author(s): Victor Lamoine - Institut Maupertuis
autogenerated on Mon Jun 10 2019 13:17:00