Skip to content

Commit d661f5c

Browse files
Update because of changes with collision margin data
1 parent ff89246 commit d661f5c

File tree

8 files changed

+69
-88
lines changed

8 files changed

+69
-88
lines changed

tesseract_monitoring/src/contact_monitor.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ struct ContactMonitor::Implementation
103103
throw std::runtime_error("Contact monitor failed to get discrete contact manager from environment!");
104104

105105
manager->setActiveCollisionObjects(monitored_link_names);
106-
manager->setDefaultCollisionMarginData(contact_distance);
106+
manager->setDefaultCollisionMargin(contact_distance);
107107
for (const auto& disabled_link_name : disabled_link_names)
108108
manager->disableCollisionObject(disabled_link_name);
109109

tesseract_msgs/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ add_message_files(
4141
ChainGroup.msg
4242
CollisionGeometry.msg
4343
CollisionMarginData.msg
44-
CollisionMarginOverrideType.msg
44+
CollisionMarginPairOverrideType.msg
4545
ContactManagersPluginInfo.msg
4646
ContactMarginPair.msg
4747
ContactResult.msg

tesseract_msgs/msg/CollisionMarginOverrideType.msg

Lines changed: 0 additions & 20 deletions
This file was deleted.
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# Possible Override Types
2+
# Do not apply contact margin data
3+
uint8 NONE=0
4+
# Replace the contact manager's CollisionMarginData
5+
uint8 REPLACE=1
6+
# Modify the contact managers default margin and pair margin.
7+
# This will preserve existing pairs not being modified by the provided margin data.
8+
# If a pair already exist it will be updated with the provided margin data.
9+
uint8 MODIFY=2
10+
11+
# one of the option above
12+
uint8 type

tesseract_msgs/msg/EnvironmentCommand.msg

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,10 @@ tesseract_msgs/StringDoublePair[] change_joint_acceleration_limits
9292
tesseract_msgs/KinematicsInformation add_kinematics_information
9393

9494
# CHANGE_COLLISION_MARGINS Command
95-
tesseract_msgs/CollisionMarginData collision_margin_data
96-
tesseract_msgs/CollisionMarginOverrideType collision_margin_override_type
95+
bool has_collision_default_margin
96+
float64 collision_default_margin
97+
tesseract_msgs/ContactMarginPair[] collision_margin_pair_data
98+
tesseract_msgs/CollisionMarginPairOverrideType collision_margin_pair_override_type
9799

98100
# ADD_CONTACT_MANAGERS_PLUGIN_INFO Command
99101
tesseract_msgs/ContactManagersPluginInfo add_contact_managers_plugin_info

tesseract_rosutils/include/tesseract_rosutils/utils.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ ROS_DECLARE_MESSAGE(ChainGroup)
5656
ROS_DECLARE_MESSAGE(CollisionGeometry)
5757
ROS_DECLARE_MESSAGE(ContactMarginPair)
5858
ROS_DECLARE_MESSAGE(CollisionMarginData)
59-
ROS_DECLARE_MESSAGE(CollisionMarginOverrideType)
59+
ROS_DECLARE_MESSAGE(CollisionMarginPairOverrideType)
6060
ROS_DECLARE_MESSAGE(ContactResult)
6161
ROS_DECLARE_MESSAGE(ContactResultVector)
6262
ROS_DECLARE_MESSAGE(ContactManagersPluginInfo)
@@ -212,10 +212,10 @@ toMsg(const tesseract_common::PairsCollisionMarginData& contact_margin_pairs);
212212
tesseract_common::CollisionMarginData fromMsg(const tesseract_msgs::CollisionMarginData& contact_margin_data_msg);
213213
tesseract_msgs::CollisionMarginData toMsg(const tesseract_common::CollisionMarginData& contact_margin_data);
214214

215-
tesseract_common::CollisionMarginOverrideType
216-
fromMsg(const tesseract_msgs::CollisionMarginOverrideType& contact_margin_override_type_msg);
217-
tesseract_msgs::CollisionMarginOverrideType
218-
toMsg(const tesseract_common::CollisionMarginOverrideType& contact_margin_override_type);
215+
tesseract_common::CollisionMarginPairOverrideType
216+
fromMsg(const tesseract_msgs::CollisionMarginPairOverrideType& contact_margin_pair_override_type_msg);
217+
tesseract_msgs::CollisionMarginPairOverrideType
218+
toMsg(const tesseract_common::CollisionMarginPairOverrideType& contact_margin_pair_override_type);
219219

220220
tesseract_scene_graph::Joint fromMsg(const tesseract_msgs::Joint& joint_msg);
221221

tesseract_rosutils/src/plotting.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ getContactResultsMarkerArrayMsg(int& id_counter,
203203
if (marker.margin_fn != nullptr)
204204
safety_distance = marker.margin_fn(dist.link_names[0], dist.link_names[1]);
205205
else
206-
safety_distance = marker.margin_data.getPairCollisionMargin(dist.link_names[0], dist.link_names[1]);
206+
safety_distance = marker.margin_data.getCollisionMargin(dist.link_names[0], dist.link_names[1]);
207207

208208
auto base_material = std::make_shared<tesseract_scene_graph::Material>("base_material");
209209
if (dist.distance < 0)

tesseract_rosutils/src/utils.cpp

Lines changed: 45 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ TESSERACT_COMMON_IGNORE_WARNINGS_PUSH
3333
#include <tesseract_msgs/ChainGroup.h>
3434
#include <tesseract_msgs/CollisionGeometry.h>
3535
#include <tesseract_msgs/CollisionMarginData.h>
36-
#include <tesseract_msgs/CollisionMarginOverrideType.h>
36+
#include <tesseract_msgs/CollisionMarginPairOverrideType.h>
3737
#include <tesseract_msgs/ContactMarginPair.h>
3838
#include <tesseract_msgs/ContactResultVector.h>
3939
#include <tesseract_msgs/ContactManagersPluginInfo.h>
@@ -1028,15 +1028,15 @@ toMsg(const tesseract_common::PairsCollisionMarginData& contact_margin_pairs)
10281028

10291029
tesseract_common::CollisionMarginData fromMsg(const tesseract_msgs::CollisionMarginData& contact_margin_data_msg)
10301030
{
1031-
tesseract_common::PairsCollisionMarginData contact_margin_pairs = fromMsg(contact_margin_data_msg.margin_pairs);
1032-
return tesseract_common::CollisionMarginData(contact_margin_data_msg.default_margin, contact_margin_pairs);
1031+
tesseract_common::CollisionMarginPairData pair_data(fromMsg(contact_margin_data_msg.margin_pairs));
1032+
return tesseract_common::CollisionMarginData(contact_margin_data_msg.default_margin, pair_data);
10331033
}
10341034

10351035
tesseract_msgs::CollisionMarginData toMsg(const tesseract_common::CollisionMarginData& contact_margin_data)
10361036
{
10371037
tesseract_msgs::CollisionMarginData contact_margin_data_msg;
10381038
contact_margin_data_msg.default_margin = contact_margin_data.getDefaultCollisionMargin();
1039-
for (const auto& pair : contact_margin_data.getPairCollisionMargins())
1039+
for (const auto& pair : contact_margin_data.getCollisionMarginPairData().getCollisionMargins())
10401040
{
10411041
tesseract_msgs::ContactMarginPair cmp;
10421042
cmp.first.first = pair.first.first;
@@ -1047,80 +1047,53 @@ tesseract_msgs::CollisionMarginData toMsg(const tesseract_common::CollisionMargi
10471047
return contact_margin_data_msg;
10481048
}
10491049

1050-
tesseract_common::CollisionMarginOverrideType
1051-
fromMsg(const tesseract_msgs::CollisionMarginOverrideType& contact_margin_override_type_msg)
1050+
tesseract_common::CollisionMarginPairOverrideType
1051+
fromMsg(const tesseract_msgs::CollisionMarginPairOverrideType& contact_margin_pair_override_type_msg)
10521052
{
1053-
switch (contact_margin_override_type_msg.type)
1053+
switch (contact_margin_pair_override_type_msg.type)
10541054
{
1055-
case tesseract_msgs::CollisionMarginOverrideType::OVERRIDE_DEFAULT_MARGIN:
1055+
case tesseract_msgs::CollisionMarginPairOverrideType::MODIFY:
10561056
{
1057-
return tesseract_common::CollisionMarginOverrideType::OVERRIDE_DEFAULT_MARGIN;
1057+
return tesseract_common::CollisionMarginPairOverrideType::MODIFY;
10581058
}
1059-
case tesseract_msgs::CollisionMarginOverrideType::OVERRIDE_PAIR_MARGIN:
1059+
case tesseract_msgs::CollisionMarginPairOverrideType::REPLACE:
10601060
{
1061-
return tesseract_common::CollisionMarginOverrideType::OVERRIDE_PAIR_MARGIN;
1061+
return tesseract_common::CollisionMarginPairOverrideType::REPLACE;
10621062
}
1063-
case tesseract_msgs::CollisionMarginOverrideType::MODIFY_PAIR_MARGIN:
1063+
case tesseract_msgs::CollisionMarginPairOverrideType::NONE:
10641064
{
1065-
return tesseract_common::CollisionMarginOverrideType::MODIFY_PAIR_MARGIN;
1066-
}
1067-
case tesseract_msgs::CollisionMarginOverrideType::MODIFY:
1068-
{
1069-
return tesseract_common::CollisionMarginOverrideType::MODIFY;
1070-
}
1071-
case tesseract_msgs::CollisionMarginOverrideType::REPLACE:
1072-
{
1073-
return tesseract_common::CollisionMarginOverrideType::REPLACE;
1074-
}
1075-
case tesseract_msgs::CollisionMarginOverrideType::NONE:
1076-
{
1077-
return tesseract_common::CollisionMarginOverrideType::NONE;
1065+
return tesseract_common::CollisionMarginPairOverrideType::NONE;
10781066
}
10791067
default:
10801068
{
1081-
throw std::runtime_error("fromMsg: Invalid CollisionMarginOverrideType!");
1069+
throw std::runtime_error("fromMsg: Invalid CollisionMarginPairOverrideType!");
10821070
}
10831071
}
10841072
}
10851073

1086-
tesseract_msgs::CollisionMarginOverrideType
1087-
toMsg(const tesseract_common::CollisionMarginOverrideType& contact_margin_override_type)
1074+
tesseract_msgs::CollisionMarginPairOverrideType
1075+
toMsg(const tesseract_common::CollisionMarginPairOverrideType& contact_margin_pair_override_type)
10881076
{
1089-
tesseract_msgs::CollisionMarginOverrideType contact_margin_override_type_msg;
1090-
switch (static_cast<int>(contact_margin_override_type))
1077+
tesseract_msgs::CollisionMarginPairOverrideType contact_margin_pair_override_type_msg;
1078+
switch (static_cast<int>(contact_margin_pair_override_type))
10911079
{
1092-
case static_cast<int>(tesseract_collision::CollisionMarginOverrideType::OVERRIDE_DEFAULT_MARGIN):
1080+
case static_cast<int>(tesseract_collision::CollisionMarginPairOverrideType::MODIFY):
10931081
{
1094-
contact_margin_override_type_msg.type = tesseract_msgs::CollisionMarginOverrideType::OVERRIDE_DEFAULT_MARGIN;
1082+
contact_margin_pair_override_type_msg.type = tesseract_msgs::CollisionMarginPairOverrideType::MODIFY;
10951083
break;
10961084
}
1097-
case static_cast<int>(tesseract_collision::CollisionMarginOverrideType::OVERRIDE_PAIR_MARGIN):
1085+
case static_cast<int>(tesseract_collision::CollisionMarginPairOverrideType::REPLACE):
10981086
{
1099-
contact_margin_override_type_msg.type = tesseract_msgs::CollisionMarginOverrideType::OVERRIDE_PAIR_MARGIN;
1087+
contact_margin_pair_override_type_msg.type = tesseract_msgs::CollisionMarginPairOverrideType::REPLACE;
11001088
break;
11011089
}
1102-
case static_cast<int>(tesseract_collision::CollisionMarginOverrideType::MODIFY_PAIR_MARGIN):
1090+
case static_cast<int>(tesseract_collision::CollisionMarginPairOverrideType::NONE):
11031091
{
1104-
contact_margin_override_type_msg.type = tesseract_msgs::CollisionMarginOverrideType::MODIFY_PAIR_MARGIN;
1105-
break;
1106-
}
1107-
case static_cast<int>(tesseract_collision::CollisionMarginOverrideType::MODIFY):
1108-
{
1109-
contact_margin_override_type_msg.type = tesseract_msgs::CollisionMarginOverrideType::MODIFY;
1110-
break;
1111-
}
1112-
case static_cast<int>(tesseract_collision::CollisionMarginOverrideType::REPLACE):
1113-
{
1114-
contact_margin_override_type_msg.type = tesseract_msgs::CollisionMarginOverrideType::REPLACE;
1115-
break;
1116-
}
1117-
case static_cast<int>(tesseract_collision::CollisionMarginOverrideType::NONE):
1118-
{
1119-
contact_margin_override_type_msg.type = tesseract_msgs::CollisionMarginOverrideType::NONE;
1092+
contact_margin_pair_override_type_msg.type = tesseract_msgs::CollisionMarginPairOverrideType::NONE;
11201093
break;
11211094
}
11221095
}
1123-
return contact_margin_override_type_msg;
1096+
return contact_margin_pair_override_type_msg;
11241097
}
11251098

11261099
bool toMsg(std::vector<tesseract_msgs::AllowedCollisionEntry>& acm_msg,
@@ -1350,8 +1323,14 @@ bool toMsg(tesseract_msgs::EnvironmentCommand& command_msg, const tesseract_envi
13501323
{
13511324
command_msg.command = tesseract_msgs::EnvironmentCommand::CHANGE_COLLISION_MARGINS;
13521325
const auto& cmd = static_cast<const tesseract_environment::ChangeCollisionMarginsCommand&>(command);
1353-
command_msg.collision_margin_data = toMsg(cmd.getCollisionMarginData());
1354-
command_msg.collision_margin_override_type = toMsg(cmd.getCollisionMarginOverrideType());
1326+
1327+
std::optional<double> default_margin = cmd.getDefaultCollisionMargin();
1328+
command_msg.has_collision_default_margin = default_margin.has_value();
1329+
if (default_margin.has_value())
1330+
command_msg.collision_default_margin = default_margin.value();
1331+
1332+
command_msg.collision_margin_pair_data = toMsg(cmd.getCollisionMarginPairData().getCollisionMargins());
1333+
command_msg.collision_margin_pair_override_type = toMsg(cmd.getCollisionMarginPairOverrideType());
13551334
return true;
13561335
}
13571336
case tesseract_environment::CommandType::ADD_CONTACT_MANAGERS_PLUGIN_INFO:
@@ -1538,10 +1517,18 @@ std::shared_ptr<tesseract_environment::Command> fromMsg(const tesseract_msgs::En
15381517
}
15391518
case tesseract_msgs::EnvironmentCommand::CHANGE_COLLISION_MARGINS:
15401519
{
1541-
tesseract_common::CollisionMarginData collision_margin_data = fromMsg(command_msg.collision_margin_data);
1542-
tesseract_common::CollisionMarginOverrideType override_type = fromMsg(command_msg.collision_margin_override_type);
1543-
return std::make_shared<tesseract_environment::ChangeCollisionMarginsCommand>(collision_margin_data,
1544-
override_type);
1520+
tesseract_common::CollisionMarginPairData pair_margin_data(fromMsg(command_msg.collision_margin_pair_data));
1521+
tesseract_common::CollisionMarginPairOverrideType pair_override_type =
1522+
fromMsg(command_msg.collision_margin_pair_override_type);
1523+
1524+
if (command_msg.has_collision_default_margin)
1525+
{
1526+
return std::make_shared<tesseract_environment::ChangeCollisionMarginsCommand>(
1527+
command_msg.collision_default_margin, pair_margin_data, pair_override_type);
1528+
}
1529+
1530+
return std::make_shared<tesseract_environment::ChangeCollisionMarginsCommand>(pair_margin_data,
1531+
pair_override_type);
15451532
}
15461533
case tesseract_msgs::EnvironmentCommand::ADD_CONTACT_MANAGERS_PLUGIN_INFO:
15471534
{

0 commit comments

Comments
 (0)