diff --git a/rbs_mill_assist/CMakeLists.txt b/rbs_mill_assist/CMakeLists.txt
index 43e6bc2..84deb0d 100644
--- a/rbs_mill_assist/CMakeLists.txt
+++ b/rbs_mill_assist/CMakeLists.txt
@@ -48,9 +48,13 @@ install(
DESTINATION lib/${PROJECT_NAME}
)
-install(DIRECTORY launch urdf config world assets meshes
+
+install(DIRECTORY world urdf meshes launch config assets bt/xmls bt/config
DESTINATION share/${PROJECT_NAME})
+add_subdirectory(scripts)
+add_subdirectory(bt)
+
if(BUILD_TESTING)
find_package(ament_lint_auto REQUIRED)
# the following line skips the linter which checks for copyrights
diff --git a/rbs_mill_assist/assets/bunker/meshes/bunker.stl b/rbs_mill_assist/assets/bunker/meshes/bunker.stl
new file mode 100644
index 0000000..d4ef85c
Binary files /dev/null and b/rbs_mill_assist/assets/bunker/meshes/bunker.stl differ
diff --git a/rbs_mill_assist/assets/bunker/model.config b/rbs_mill_assist/assets/bunker/model.config
new file mode 100644
index 0000000..6c7bb6b
--- /dev/null
+++ b/rbs_mill_assist/assets/bunker/model.config
@@ -0,0 +1,16 @@
+
+
+
+ bunker
+ 0.1
+ model.sdf
+
+
+ Bill Finger
+ ur.narmak@gmail.com
+
+
+
+ Empty
+
+
diff --git a/rbs_mill_assist/assets/bunker/model.sdf b/rbs_mill_assist/assets/bunker/model.sdf
new file mode 100644
index 0000000..ede8a4e
--- /dev/null
+++ b/rbs_mill_assist/assets/bunker/model.sdf
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+ model://bunker/meshes/bunker.stl
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ model://bunker/meshes/bunker.stl
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/rbs_mill_assist/assets/laser/meshes/laser.stl b/rbs_mill_assist/assets/laser/meshes/laser.stl
new file mode 100644
index 0000000..a15df0e
Binary files /dev/null and b/rbs_mill_assist/assets/laser/meshes/laser.stl differ
diff --git a/rbs_mill_assist/assets/laser/model.config b/rbs_mill_assist/assets/laser/model.config
new file mode 100644
index 0000000..08762f2
--- /dev/null
+++ b/rbs_mill_assist/assets/laser/model.config
@@ -0,0 +1,16 @@
+
+
+
+ laser
+ 0.1
+ model.sdf
+
+
+ Bill Finger
+ ur.narmak@gmail.com
+
+
+
+ Empty
+
+
diff --git a/rbs_mill_assist/assets/laser/model.sdf b/rbs_mill_assist/assets/laser/model.sdf
new file mode 100644
index 0000000..0713e03
--- /dev/null
+++ b/rbs_mill_assist/assets/laser/model.sdf
@@ -0,0 +1,50 @@
+
+
+
+
+ 0 0 0 1.57 0 0
+
+
+
+
+ model://laser/meshes/laser.stl
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ model://laser/meshes/laser.stl
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/rbs_mill_assist/assets/shildik/model.sdf b/rbs_mill_assist/assets/shildik/model.sdf
index 84c495a..1674d34 100644
--- a/rbs_mill_assist/assets/shildik/model.sdf
+++ b/rbs_mill_assist/assets/shildik/model.sdf
@@ -2,6 +2,7 @@
+
diff --git a/rbs_mill_assist/bt/CMakeLists.txt b/rbs_mill_assist/bt/CMakeLists.txt
new file mode 100644
index 0000000..70f2b16
--- /dev/null
+++ b/rbs_mill_assist/bt/CMakeLists.txt
@@ -0,0 +1,33 @@
+
+find_package(behaviortree_ros2 REQUIRED)
+find_package(behaviortree_cpp REQUIRED)
+find_package(rbs_skill_interfaces REQUIRED)
+find_package(geometry_msgs REQUIRED)
+# find_package(std_srvs REQUIRED)
+
+# Behaviortree interfaces
+set(dependencies
+ rclcpp
+ rbs_skill_interfaces
+ geometry_msgs
+ behaviortree_ros2
+ std_srvs
+)
+
+add_library(vacuum_gripper_toggle SHARED plugins/vacuum_gripper_toggle.cpp)
+list(APPEND plugin_libs vacuum_gripper_toggle)
+
+add_library(get_grasp_place_pose SHARED plugins/get_grasp_place_pose.cpp)
+list(APPEND plugin_libs get_grasp_place_pose)
+
+foreach(bt_plugin ${plugin_libs})
+ ament_target_dependencies(${bt_plugin} ${dependencies})
+ target_compile_definitions(${bt_plugin} PRIVATE BT_PLUGIN_EXPORT)
+endforeach()
+
+install(TARGETS
+ ${plugin_libs}
+ ARCHIVE DESTINATION share/${PROJECT_NAME}/bt_plugins
+ LIBRARY DESTINATION share/${PROJECT_NAME}/bt_plugins
+ RUNTIME DESTINATION share/${PROJECT_NAME}/bt_plugins
+)
diff --git a/rbs_mill_assist/bt/config/bt_executor.yaml b/rbs_mill_assist/bt/config/bt_executor.yaml
new file mode 100644
index 0000000..6feace9
--- /dev/null
+++ b/rbs_mill_assist/bt/config/bt_executor.yaml
@@ -0,0 +1,13 @@
+bt_action_server:
+ ros__parameters:
+ action_name: "behavior_server" # Optional (defaults to `bt_action_server`)
+ tick_frequency: 100 # Optional (defaults to 100 Hz)
+ groot2_port: 1667 # Optional (defaults to 1667)
+ ros_plugins_timeout: 1000 # Optional (defaults 1000 ms)
+
+ plugins:
+ - rbs_mill_assist/bt_plugins
+ - rbs_bt_executor/bt_plugins
+
+ behavior_trees:
+ - rbs_mill_assist/xmls
diff --git a/rbs_mill_assist/bt/plugins/get_grasp_place_pose.cpp b/rbs_mill_assist/bt/plugins/get_grasp_place_pose.cpp
new file mode 100644
index 0000000..7eeb671
--- /dev/null
+++ b/rbs_mill_assist/bt/plugins/get_grasp_place_pose.cpp
@@ -0,0 +1,118 @@
+#include "behaviortree_ros2/bt_service_node.hpp"
+
+#include "behaviortree_ros2/plugins.hpp"
+#include
+// #include
+#include "rbs_skill_interfaces/srv/get_pick_place_poses.hpp"
+#include
+#include
+#include
+#include
+// #include
+#include
+#include
+
+using GraspingService = rbs_skill_interfaces::srv::GetPickPlacePoses;
+using namespace BT;
+
+class Grasping : public RosServiceNode {
+public:
+ Grasping(const std::string &name, const NodeConfig &conf,
+ const RosNodeParams ¶ms)
+ : RosServiceNode(name, conf, params) {
+
+ RCLCPP_INFO(this->logger(), "Starting GetGraspPose");
+ }
+
+ static PortsList providedPorts() {
+ return providedBasicPorts(
+ {InputPort("object_name"),
+ InputPort("action_name"),
+ OutputPort>("pose"),
+ OutputPort>("pre_pose"),
+ OutputPort>("post_pose")});
+ }
+
+ bool setRequest(Request::SharedPtr &request) override {
+ RCLCPP_INFO(this->logger(), "Starting send request for: [%s]",
+ this->service_name_.c_str());
+ if (!getInput("action_name", request->action_name)) {
+ RCLCPP_ERROR(this->node_.lock()->get_logger(),
+ "Failed to get object_name from input port");
+ return false;
+ }
+ return true;
+ }
+
+ NodeStatus onResponseReceived(const Response::SharedPtr &response) override {
+ if (!response->ok) {
+ RCLCPP_ERROR(this->node_.lock()->get_logger(),
+ "Response indicates failure.");
+ return NodeStatus::FAILURE;
+ }
+
+ RCLCPP_INFO(this->node_.lock()->get_logger(),
+ "Response received successfully.");
+
+ auto logPose = [this](const std::string &pose_name,
+ const geometry_msgs::msg::Pose &pose) {
+ RCLCPP_INFO(this->node_.lock()->get_logger(),
+ "%s:\n"
+ " Position: x = %.4f, y = %.4f, z = %.4f\n"
+ " Orientation: x = %.4f, y = %.4f, z = %.4f, w = %.4f",
+ pose_name.c_str(), pose.position.x, pose.position.y,
+ pose.position.z, pose.orientation.x, pose.orientation.y,
+ pose.orientation.z, pose.orientation.w);
+ };
+ if (!response->grasp.empty()) {
+ RCLCPP_INFO(this->logger(), "Got Pick Response");
+ std::vector poses = {"Pregrasp Pose", "Grasp Pose",
+ "Postgrasp Pose"};
+
+ for (size_t n = 0; n < poses.size() && n < response->grasp.size(); ++n) {
+ logPose(poses[n], response->grasp.at(n));
+ }
+
+ auto grasp_pose = std::make_shared();
+ auto pregrasp_pose = std::make_shared();
+ auto postgrasp_pose = std::make_shared();
+
+ *pregrasp_pose = response->grasp.at(0);
+ *grasp_pose = response->grasp.at(1);
+ *postgrasp_pose = response->grasp.at(2);
+
+ setOutput("pre_pose", pregrasp_pose);
+ setOutput("pose", grasp_pose);
+ setOutput("post_pose", postgrasp_pose);
+ return NodeStatus::SUCCESS;
+ }
+ if (!response->place.empty()) {
+ RCLCPP_INFO(this->logger(), "Got Place Response");
+ std::vector poses = {"Preplace Pose", "Place Pose",
+ "Postplace Pose"};
+
+ for (size_t n = 0; n < poses.size() && n < response->place.size(); ++n) {
+ logPose(poses[n], response->place.at(n));
+ }
+
+ auto place_pose = std::make_shared();
+ auto preplace_pose = std::make_shared();
+ auto postplace_pose = std::make_shared();
+
+ *preplace_pose = response->place.at(0);
+ *place_pose = response->place.at(1);
+ *postplace_pose = response->place.at(2);
+
+ setOutput("pre_pose", preplace_pose);
+ setOutput("pose", place_pose);
+ setOutput("post_pose", postplace_pose);
+ return NodeStatus::SUCCESS;
+ }
+
+ RCLCPP_FATAL(this->logger(), "Could not response grasp pose");
+ return NodeStatus::FAILURE;
+ }
+ // virtual NodeStatus onFailure(ServiceNodeErrorCode error) override {}
+};
+
+CreateRosNodePlugin(Grasping, "GetGraspPlacePose");
diff --git a/rbs_mill_assist/bt/plugins/vacuum_gripper_toggle.cpp b/rbs_mill_assist/bt/plugins/vacuum_gripper_toggle.cpp
new file mode 100644
index 0000000..a7a2fb1
--- /dev/null
+++ b/rbs_mill_assist/bt/plugins/vacuum_gripper_toggle.cpp
@@ -0,0 +1,47 @@
+#include "behaviortree_ros2/bt_service_node.hpp"
+
+#include "behaviortree_ros2/plugins.hpp"
+#include "std_srvs/srv/set_bool.hpp"
+#include
+#include
+#include
+#include
+
+using ToggleVacuumGripperService = std_srvs::srv::SetBool;
+using namespace BT;
+
+class ToggleVacuumGrippper : public RosServiceNode {
+public:
+ ToggleVacuumGrippper(const std::string &name, const NodeConfig &conf,
+ const RosNodeParams ¶ms)
+ : RosServiceNode(name, conf, params) {
+
+ RCLCPP_INFO(this->logger(), "Starting ToggleVacuumGrippper");
+ }
+
+ static PortsList providedPorts() {
+ return providedBasicPorts({InputPort("enable")});
+ }
+
+ bool setRequest(Request::SharedPtr &request) override {
+ RCLCPP_INFO(this->logger(), "Starting send request");
+ if (!getInput("enable", request->data)) {
+ RCLCPP_ERROR(this->node_.lock()->get_logger(),
+ "Failed to get sending data from input port");
+ return false;
+ }
+ return true;
+ }
+
+ NodeStatus onResponseReceived(const Response::SharedPtr &response) override {
+ if (!response->success) {
+ RCLCPP_ERROR(this->logger(), "Response indicates failure.");
+ return NodeStatus::FAILURE;
+ }
+
+ return NodeStatus::SUCCESS;
+ }
+ // virtual NodeStatus onFailure(ServiceNodeErrorCode error) override {}
+};
+
+CreateRosNodePlugin(ToggleVacuumGrippper, "ToggleVacuumGrippper");
diff --git a/rbs_mill_assist/bt/xmls/Grasp.xml b/rbs_mill_assist/bt/xmls/Grasp.xml
new file mode 100644
index 0000000..4d1bde0
--- /dev/null
+++ b/rbs_mill_assist/bt/xmls/Grasp.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/rbs_mill_assist/bt/xmls/MainTree.xml b/rbs_mill_assist/bt/xmls/MainTree.xml
new file mode 100644
index 0000000..2133fa1
--- /dev/null
+++ b/rbs_mill_assist/bt/xmls/MainTree.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/rbs_mill_assist/bt/xmls/Place.xml b/rbs_mill_assist/bt/xmls/Place.xml
new file mode 100644
index 0000000..b7be311
--- /dev/null
+++ b/rbs_mill_assist/bt/xmls/Place.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/rbs_mill_assist/config/grasping.yaml b/rbs_mill_assist/config/grasping.yaml
new file mode 100644
index 0000000..02a27ae
--- /dev/null
+++ b/rbs_mill_assist/config/grasping.yaml
@@ -0,0 +1,60 @@
+pregrasp_pose:
+ position:
+ x: 0.10395
+ y: -0.28
+ z: 0.1
+ orientation:
+ x: 0.0
+ y: 1.0
+ z: 0.0
+ w: 0.0
+grasp_pose:
+ position:
+ x: 0.10395
+ y: -0.28
+ z: 0.004
+ orientation:
+ x: 0.0
+ y: 1.0
+ z: 0.0
+ w: 0.04
+postgrasp_pose:
+ position:
+ x: 0.10395
+ y: -0.28
+ z: 0.1
+ orientation:
+ x: 0.0
+ y: 1.0
+ z: 0.0
+ w: 0.0
+preplace_pose:
+ position:
+ x: 0.360
+ y: -0.06
+ z: 0.1
+ orientation:
+ x: -0.707
+ y: 0.707
+ z: 0.0
+ w: 0.0
+place_pose:
+ position:
+ x: 0.360
+ y: -0.06
+ z: 0.05
+ orientation:
+ x: -0.707
+ y: 0.707
+ z: 0.0
+ w: 0.0
+postplace_pose:
+ position:
+ x: 0.360
+ y: -0.06
+ z: 0.1
+ orientation:
+ x: -0.707
+ y: 0.707
+ z: 0.0
+ w: 0.0
diff --git a/rbs_mill_assist/launch/bt_executor.launch.py b/rbs_mill_assist/launch/bt_executor.launch.py
new file mode 100644
index 0000000..96dacea
--- /dev/null
+++ b/rbs_mill_assist/launch/bt_executor.launch.py
@@ -0,0 +1,23 @@
+from launch import LaunchDescription
+from launch.actions import DeclareLaunchArgument
+from launch_ros.actions import Node
+from launch.substitutions import LaunchConfiguration, PathJoinSubstitution
+from launch_ros.substitutions import FindPackageShare
+
+def generate_launch_description():
+
+ executor_params = PathJoinSubstitution([FindPackageShare("rbs_mill_assist"), "config", "bt_executor.yaml"])
+
+ nodes_to_start = [
+ Node(
+ package='rbs_bt_executor',
+ executable='rbs_bt_executor',
+ # prefix=['gdbserver localhost:1234'],
+ parameters=[
+ executor_params,
+ {'use_sim_time': True}
+ ],
+ )
+ ]
+
+ return LaunchDescription(nodes_to_start)
diff --git a/rbs_mill_assist/launch/simulation.launch.py b/rbs_mill_assist/launch/simulation.launch.py
index 2d8446c..f125236 100644
--- a/rbs_mill_assist/launch/simulation.launch.py
+++ b/rbs_mill_assist/launch/simulation.launch.py
@@ -165,12 +165,18 @@ def launch_setup(context, *args, **kwargs):
config_file=os.path.join(description_package_abs_path, "config", "gz_bridge.yaml")
)
+ grasping_service = Node(
+ package="rbs_mill_assist",
+ executable="grasping_service.py"
+ )
+
nodes_to_start = [
rbs_robot_setup,
rviz_node,
gazebo,
gazebo_spawn_robot,
- gz_bridge
+ gz_bridge,
+ grasping_service
]
return nodes_to_start
@@ -272,7 +278,7 @@ def generate_launch_description():
declared_arguments.append(
DeclareLaunchArgument(
"ee_link_name",
- default_value="Link6",
+ default_value="grasp_point",
description="End effector name of robot arm",
)
)
@@ -302,7 +308,7 @@ def generate_launch_description():
declared_arguments.append(
DeclareLaunchArgument(
"interactive",
- default_value="true",
+ default_value="false",
description="Wheter to run the motion_control_handle controller",
),
)
diff --git a/rbs_mill_assist/package.xml b/rbs_mill_assist/package.xml
index 1e8add8..3900d05 100644
--- a/rbs_mill_assist/package.xml
+++ b/rbs_mill_assist/package.xml
@@ -19,6 +19,7 @@
cartesian_force_controller
cartesian_motion_controller
cartesian_twist_controller
+ rbs_bt_executor
ament_lint_auto
diff --git a/rbs_mill_assist/scripts/CMakeLists.txt b/rbs_mill_assist/scripts/CMakeLists.txt
new file mode 100644
index 0000000..fa24557
--- /dev/null
+++ b/rbs_mill_assist/scripts/CMakeLists.txt
@@ -0,0 +1,4 @@
+install(PROGRAMS
+ grasping_service.py
+ DESTINATION lib/${PROJECT_NAME}
+)
diff --git a/rbs_mill_assist/scripts/grasping_service.py b/rbs_mill_assist/scripts/grasping_service.py
new file mode 100755
index 0000000..bbec6a1
--- /dev/null
+++ b/rbs_mill_assist/scripts/grasping_service.py
@@ -0,0 +1,101 @@
+#!/usr/bin/env python3
+
+import os
+from typing import Dict
+
+import rclpy
+import yaml
+from ament_index_python.packages import get_package_share_directory
+from geometry_msgs.msg import Pose
+from rbs_skill_interfaces.srv import GetPickPlacePoses
+from rclpy.node import Node
+from rclpy.service import Service
+
+
+class GetGraspPickPoses(Node):
+ def __init__(self) -> None:
+ super().__init__("get_grasp_pick_poses")
+ self.srv: Service = self.create_service(
+ GetPickPlacePoses, "get_pick_place_poses", self.get_grasp_pick_poses
+ )
+ yaml_file_path: str = os.path.join(
+ get_package_share_directory("rbs_mill_assist"), "config", "grasping.yaml"
+ )
+ with open(yaml_file_path, "r", encoding="utf-8") as file:
+ self.grasping: Dict = yaml.safe_load(file)
+
+ def create_pose(self, pose_data: Dict) -> Pose:
+ """
+ Helper function to create a Pose from the given pose data.
+ """
+ pose = Pose()
+ if pose_data:
+ pose.position.x = pose_data.get("position", {}).get("x", 0.0)
+ pose.position.y = pose_data.get("position", {}).get("y", 0.0)
+ pose.position.z = pose_data.get("position", {}).get("z", 0.0)
+ pose.orientation.x = pose_data.get("orientation", {}).get("x", 0.0)
+ pose.orientation.y = pose_data.get("orientation", {}).get("y", 0.0)
+ pose.orientation.z = pose_data.get("orientation", {}).get("z", 0.0)
+ pose.orientation.w = pose_data.get("orientation", {}).get("w", 1.0)
+ return pose
+
+ def get_grasp_pick_poses(
+ self, request: GetPickPlacePoses.Request, response: GetPickPlacePoses.Response
+ ) -> GetPickPlacePoses.Response:
+ if request.action_name == "pick":
+ pregrasp_pose = self.grasping.get("pregrasp_pose", None)
+ grasp_pose = self.grasping.get("grasp_pose", None)
+ postgrasp_pose = self.grasping.get("postgrasp_pose", None)
+
+ if None in [pregrasp_pose, grasp_pose, postgrasp_pose]:
+ response.ok = False
+ self.get_logger().error(
+ "Missing one or more of the pregrasp, grasp, or postgrasp poses."
+ )
+ return response
+
+ # Create Pose messages
+ response.grasp = [
+ self.create_pose(pregrasp_pose),
+ self.create_pose(grasp_pose),
+ self.create_pose(postgrasp_pose),
+ ]
+
+ elif request.action_name == "place":
+ preplace_pose = self.grasping.get("preplace_pose", None)
+ place_pose = self.grasping.get("place_pose", None)
+ postplace_pose = self.grasping.get("postplace_pose", None)
+
+ if None in [preplace_pose, place_pose, postplace_pose]:
+ response.ok = False
+ self.get_logger().error(
+ "Missing one or more of the preplace, place, or postplace poses."
+ )
+ return response
+
+ # Create Pose messages for placing
+ response.place = [
+ self.create_pose(preplace_pose),
+ self.create_pose(place_pose),
+ self.create_pose(postplace_pose),
+ ]
+
+ response.ok = True
+ self.get_logger().info(f"Handled action: {request.action_name}")
+ return response
+
+
+def main():
+ rclpy.init()
+ executor = rclpy.executors.SingleThreadedExecutor()
+ # executor = rclpy.executors.MultiThreadedExecutor() # can't be used
+ i_node = GetGraspPickPoses()
+ executor.add_node(i_node)
+ try:
+ executor.spin()
+ except (KeyboardInterrupt, rclpy.executors.ExternalShutdownException):
+ i_node.destroy_node()
+
+
+if __name__ == "__main__":
+ main()
diff --git a/rbs_mill_assist/urdf/rbs_arm.xacro b/rbs_mill_assist/urdf/rbs_arm.xacro
index 554d9f0..4ababe3 100644
--- a/rbs_mill_assist/urdf/rbs_arm.xacro
+++ b/rbs_mill_assist/urdf/rbs_arm.xacro
@@ -8,7 +8,7 @@
-
+
diff --git a/rbs_mill_assist/urdf/rbs_arm_macro.xacro b/rbs_mill_assist/urdf/rbs_arm_macro.xacro
index a4446d2..e6c17c1 100644
--- a/rbs_mill_assist/urdf/rbs_arm_macro.xacro
+++ b/rbs_mill_assist/urdf/rbs_arm_macro.xacro
@@ -160,7 +160,7 @@
+ xyz="1 0 0" />
+ xyz="0 0 1" />
+
+
+
+
+
+
+
+
+
+
+ true
+
+
+
+
+
-
-
+
+
-
-
+
+
+
+
+
+
+
$(arg simulation_controllers)
@@ -524,14 +552,21 @@
- Link6
+ Link8
-
-
+
+
- Link6_collision
+ Link8_collision
+
+
+
+
+
+
+ Link7_collision
diff --git a/rbs_mill_assist/urdf/rbs_arm_modular.xacro b/rbs_mill_assist/urdf/rbs_arm_modular.xacro
deleted file mode 100644
index 25c92f4..0000000
--- a/rbs_mill_assist/urdf/rbs_arm_modular.xacro
+++ /dev/null
@@ -1,62 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/rbs_mill_assist/urdf/rbs_arm_modular_macro.xacro b/rbs_mill_assist/urdf/rbs_arm_modular_macro.xacro
deleted file mode 100644
index 2d91c3a..0000000
--- a/rbs_mill_assist/urdf/rbs_arm_modular_macro.xacro
+++ /dev/null
@@ -1,63 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- $(arg simulation_controllers)
-
- ${namespace}
-
-
-
- ee_link
-
-
-
-
-
-
- ee_link_collision
-
-
-
-
-
diff --git a/rbs_mill_assist/world/default.sdf b/rbs_mill_assist/world/default.sdf
index 8aecf35..6837e9c 100644
--- a/rbs_mill_assist/world/default.sdf
+++ b/rbs_mill_assist/world/default.sdf
@@ -10,7 +10,7 @@
0.001
1.0
- bullet
+
@@ -55,9 +55,42 @@
- -0.35 0.0 0 0 0 0
+ shildik_0
+ 0.0 -0.28 0.0 0 0 3.14159
model://shildik
+
+ shildik_1
+ 0.0 -0.28 0.01 0 0 3.14159
+ model://shildik
+
+
+ shildik_2
+ 0.0 -0.28 0.02 0 0 3.14159
+ model://shildik
+
+
+ shildik_3
+ 0.0 -0.28 0.03 0 0 3.14159
+ model://shildik
+
+
+ shildik_4
+ 0.0 -0.28 0.04 0 0 3.14159
+ model://shildik
+
+
+
+ true
+ 0.30 0.0 0 0 0 -1.57
+ model://laser
+
+
+
+
+
+
+