7 #include <Eigen/Geometry>
9 #include <VirtualRobot/Robot.h>
24 std::map<std::string, float>
neck_joint_angles = {{
"Neck_1_Yaw", 0.0}, {
"Neck_2_Pitch", 0.3}};
28 Base(DefaultSkillDescription())
36 return ::armarx::skills::Skill::InitResult{
37 .
status = ::armarx::skills::TerminatedSkillStatus::Succeeded};
45 float yaw_step_size = (goal_yaw -
neck_joint_angles[
"Neck_1_Yaw"]) / waypoints_num;
46 float pitch_step_size = (goal_pitch -
neck_joint_angles[
"Neck_2_Pitch"]) / waypoints_num;
48 for (
int i = 1; i < waypoints_num; i++)
52 srv_->kinematicUnit->setJointAngles(
55 std::this_thread::sleep_for(std::chrono::milliseconds(300));
57 std::this_thread::sleep_for(std::chrono::milliseconds(300));
63 ARMARX_INFO <<
"Saying '" << text.substr(0, 50) <<
"...'";
64 srv_->textToSpeech->reportText(text);
72 srv_->kinematicUnit->switchControlMode(
73 {{
"Neck_1_Yaw", armarx::ControlMode::ePositionControl},
74 {
"Neck_2_Pitch", armarx::ControlMode::ePositionControl},
75 {
"TorsoJoint", armarx::ControlMode::ePositionControl}});
76 srv_->kinematicUnit->setJointAngles({{
"TorsoJoint", -109.76679992675781}});
77 std::this_thread::sleep_for(std::chrono::milliseconds(300));
86 std::this_thread::sleep_for(std::chrono::milliseconds(450));
89 std::this_thread::sleep_for(std::chrono::milliseconds(450));
91 std::this_thread::sleep_for(std::chrono::milliseconds(450));
100 std::vector<std::string> predefined_poses = {
"r003-door",
111 "mobile-kitchen-counter",
112 "guard-support-full-with-light",
119 std::vector<std::string> objects_names;
123 for (
auto o : objectPoses)
126 const std::string className = o.objectID.className();
128 if (
std::find(predefined_poses.begin(), predefined_poses.end(), className) ==
129 predefined_poses.end() &&
130 std::find(objects_names.begin(), objects_names.end(), className) ==
133 std::string objectName;
134 std::optional<armarx::ObjectInfo> info = objFind.
findObject(o.objectID);
137 std::optional<std::vector<std::string>>
names = info->loadSpokenNames();
140 objectName =
names->front();
144 if (objectName.empty())
146 objectName = className;
147 objectName.erase(std::remove_if(std::begin(objectName),
148 std::end(objectName),
149 [](
auto ch) {
return std::isdigit(ch); }),
153 objects_names.push_back(objectName);
158 for (
int i = 0; i < static_cast<int>(objects_names.size()); i++)
162 if (
static_cast<int>(objects_names.size()) == 1)
164 speak(
"I can see the following object");
165 std::this_thread::sleep_for(std::chrono::milliseconds(200));
170 speak(
"I can see the following objects");
171 std::this_thread::sleep_for(std::chrono::milliseconds(200));
176 else if (i == (
static_cast<int>(objects_names.size()) - 1))
179 std::this_thread::sleep_for(std::chrono::milliseconds(200));
181 speak(objects_names[i]);
182 std::this_thread::sleep_for(std::chrono::milliseconds(200));
186 return ::armarx::skills::Skill::MainResult{
187 .status = ::armarx::skills::TerminatedSkillStatus::Succeeded};
191 LookForObjectsWithKinematicUnit::onStopRequested()
204 .rootProfileDefaults = defaultParameters.toAron(),
206 .parametersType = Params::ToAronType(),