add test MoveitCpp node

This commit is contained in:
Ilya Uraev 2021-11-03 15:18:12 +04:00
parent b2a89ecbde
commit 554a33fc43
15 changed files with 653 additions and 430 deletions

View file

@ -1,3 +1,7 @@
# Robossembler ROS2 # Robossembler ROS2
Repo for ROS2 packages related to Robossembler Repo for ROS2 packages related to Robossembler
## Known issues
Controller manager can not loaded with `gazebo_ros2_control/GazeboSystem` but MoveitCpp and controller manager completely loaded with `fake_components/GenericSystem` in `ros2_control` tag in file `rasms_descroption/urdf/rasms.control.xacro`

View file

@ -6,7 +6,6 @@ Panels:
Expanded: Expanded:
- /Global Options1 - /Global Options1
- /Status1 - /Status1
- /RobotModel1
Splitter Ratio: 0.5 Splitter Ratio: 0.5
Tree Height: 787 Tree Height: 787
- Class: rviz_common/Selection - Class: rviz_common/Selection
@ -43,68 +42,74 @@ Visualization Manager:
Plane Cell Count: 10 Plane Cell Count: 10
Reference Frame: <Fixed Frame> Reference Frame: <Fixed Frame>
Value: true Value: true
- Alpha: 1 - Class: moveit_rviz_plugin/PlanningScene
Class: rviz_default_plugins/RobotModel
Collision Enabled: false
Description File: ""
Description Source: Topic
Description Topic:
Depth: 5
Durability Policy: Volatile
History Policy: Keep Last
Reliability Policy: Reliable
Value: /robot_description
Enabled: true Enabled: true
Links: Move Group Namespace: ""
All Links Enabled: true Name: PlanningScene
Expand Joint Details: false Planning Scene Topic: /monitored_planning_scene
Expand Link Details: false Robot Description: robot_description
Expand Tree: false Scene Geometry:
Link Tree Style: Links in Alphabetic Order Scene Alpha: 0.8999999761581421
base: Scene Color: 50; 230; 50
Alpha: 1 Scene Display Time: 0.009999999776482582
Show Axes: false Show Scene Geometry: true
Show Trail: false Voxel Coloring: Z-Axis
Value: true Voxel Rendering: Occupied Voxels
link1: Scene Robot:
Alpha: 1 Attached Body Color: 150; 50; 150
Show Axes: false Links:
Show Trail: false All Links Enabled: true
Value: true Expand Joint Details: false
link2: Expand Link Details: false
Alpha: 1 Expand Tree: false
Show Axes: false Link Tree Style: Links in Alphabetic Order
Show Trail: false base:
Value: true Alpha: 1
link3: Show Axes: false
Alpha: 1 Show Trail: false
Show Axes: false Value: true
Show Trail: false link1:
Value: true Alpha: 1
link4: Show Axes: false
Alpha: 1 Show Trail: false
Show Axes: false Value: true
Show Trail: false link2:
Value: true Alpha: 1
link5: Show Axes: false
Alpha: 1 Show Trail: false
Show Axes: false Value: true
Show Trail: false link3:
Value: true Alpha: 1
link6: Show Axes: false
Alpha: 1 Show Trail: false
Show Axes: false Value: true
Show Trail: false link4:
Value: true Alpha: 1
Name: RobotModel Show Axes: false
TF Prefix: "" Show Trail: false
Update Interval: 0 Value: true
link5:
Alpha: 1
Show Axes: false
Show Trail: false
Value: true
link6:
Alpha: 1
Show Axes: false
Show Trail: false
Value: true
world:
Alpha: 1
Show Axes: false
Show Trail: false
Robot Alpha: 1
Show Robot Collision: false
Show Robot Visual: true
Value: true Value: true
Visual Enabled: true
Enabled: true Enabled: true
Global Options: Global Options:
Background Color: 48; 48; 48 Background Color: 48; 48; 48
Fixed Frame: base Fixed Frame: world
Frame Rate: 30 Frame Rate: 30
Name: root Name: root
Tools: Tools:
@ -144,25 +149,25 @@ Visualization Manager:
Views: Views:
Current: Current:
Class: rviz_default_plugins/Orbit Class: rviz_default_plugins/Orbit
Distance: 1.4318417310714722 Distance: 2.053321123123169
Enable Stereo Rendering: Enable Stereo Rendering:
Stereo Eye Separation: 0.05999999865889549 Stereo Eye Separation: 0.05999999865889549
Stereo Focal Distance: 1 Stereo Focal Distance: 1
Swap Stereo Eyes: false Swap Stereo Eyes: false
Value: false Value: false
Focal Point: Focal Point:
X: 0.01542382501065731 X: 0.35200047492980957
Y: -0.006365143693983555 Y: 0.026240859180688858
Z: 0.15774454176425934 Z: 0.2903156876564026
Focal Shape Fixed Size: true Focal Shape Fixed Size: true
Focal Shape Size: 0.05000000074505806 Focal Shape Size: 0.05000000074505806
Invert Z Axis: false Invert Z Axis: false
Name: Current View Name: Current View
Near Clip Distance: 0.009999999776482582 Near Clip Distance: 0.009999999776482582
Pitch: 0.5703980326652527 Pitch: 0.7903980612754822
Target Frame: <Fixed Frame> Target Frame: <Fixed Frame>
Value: Orbit (rviz) Value: Orbit (rviz)
Yaw: 0.5603898763656616 Yaw: 5.348577976226807
Saved: ~ Saved: ~
Window Geometry: Window Geometry:
Displays: Displays:

View file

@ -5,6 +5,7 @@
<!-- ros_control-plugin --> <!-- ros_control-plugin -->
<gazebo> <gazebo>
<plugin name="gazebo_ros2_control" filename="libgazebo_ros2_control.so"> <plugin name="gazebo_ros2_control" filename="libgazebo_ros2_control.so">
<robot_sim_type>gazebo_ros2_control/GazeboSystem</robot_sim_type>
<parameters>$(find rasms_moveit_config)/config/rasms_controllers.yml</parameters> <parameters>$(find rasms_moveit_config)/config/rasms_controllers.yml</parameters>
<robotNamespace>/rasms</robotNamespace> <robotNamespace>/rasms</robotNamespace>
</plugin> </plugin>

View file

@ -1,146 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<sdf version='1.7'>
<world name="default">
<physics name="1ms" type="ignored">
<max_step_size>0.001</max_step_size>
<real_time_factor>1.0</real_time_factor>
</physics>
<plugin
filename="ignition-gazebo-physics-system"
name="ignition::gazebo::systems::Physics">
</plugin>
<plugin
filename="ignition-gazebo-user-commands-system"
name="ignition::gazebo::systems::UserCommands">
</plugin>
<plugin
filename="ignition-gazebo-scene-broadcaster-system"
name="ignition::gazebo::systems::SceneBroadcaster">
</plugin>
<plugin
filename="ignition-gazebo-contact-system"
name="ignition::gazebo::systems::Contact">
</plugin>
<plugin
filename="ignition-gazebo-sensors-system"
name="ignition::gazebo::systems::Sensors">
<render_enfine>ogre2</render_enfine>
</plugin>
<!--gui>
<plugin filename="GzScene3D" name="3D View">
<ignition-gui>
<title>3D View</title>
<property type="bool" key="showTitleBar">false</property>
<property type="string" key="state">docked</property>
</ignition-gui>
<engine>ogre2</engine>
<scene>scene</scene>
<ambient_light>1.0 1.0 1.0</ambient_light>
<background_color>0.4 0.6 1.0</background_color>
<camera_pose>8.3 7 7.8 0 0.5 -2.4</camera_pose>
</plugin>
</gui-->
<light type="directional" name="sun">
<cast_shadows>true</cast_shadows>
<pose>0 0 10 0 0 0</pose>
<diffuse>0.8 0.8 0.8 1</diffuse>
<specular>0.2 0.2 0.2 1</specular>
<attenuation>
<range>1000</range>
<constant>0.9</constant>
<linear>0.01</linear>
<quadratic>0.001</quadratic>
</attenuation>
<direction>-0.5 0.1 -0.9</direction>
</light>
<model name="ground_plane">
<static>true</static>
<link name="link">
<collision name="collision">
<geometry>
<plane>
<normal>0 0 1</normal>
<size>100 100</size>
</plane>
</geometry>
</collision>
<visual name="visual">
<geometry>
<plane>
<normal>0 0 1</normal>
<size>100 100</size>
</plane>
</geometry>
<material>
<ambient>0.8 0.8 0.8 1</ambient>
<diffuse>0.8 0.8 0.8 1</diffuse>
<specular>0.8 0.8 0.8 1</specular>
</material>
</visual>
</link>
</model>
<include>
<uri>rasms_model</uri>
</include>
<!--include>
<uri>realsense_camera</uri>
<pose>1 0 1 0 0.97 3.14159</pose>
<static>true</static>
</include-->
<model name="3d_camera">
<static>true</static>
<link name="kinect_sensor">
<pose>1 0 1 0 1 3.14159</pose>
<collision name="collision">
<geometry>
<box>
<size>0.05 0.05 0.05</size>
</box>
</geometry>
</collision>
<visual name="visual">
<geometry>
<box>
<size>0.05 0.05 0.05</size>
</box>
</geometry>
</visual>
<sensor name="camera" type="rgbd_camera">
<topic>rgbd_camera</topic>
<always_on>1</always_on>
<update_rate>30</update_rate>
<camera name="rgbd_sens">
<image>
<width>212</width>
<heigth>120</heigth>
</image>
<horizontal_fov>1.567821</horizontal_fov>
<vertical_fov>1.022238</vertical_fov>
<clip>
<near>0.01</near>
<far>1000.0</far>
</clip>
<depth_camera>
<clip>
<near>0.01</near>
<far>10.0</far>
</clip>
</depth_camera>
<noise>
<type>gaussian</type>
<mean>0</mean>
<stddev>0</stddev>
</noise>
<visibility_mask>2</visibility_mask>
</camera>
</sensor>
</link>
</model>
</world>
</sdf>

View file

@ -0,0 +1,78 @@
cmake_minimum_required(VERSION 3.5)
project(rasms_moveit_actions)
#find_package(moveit_common REQUIRED)
#moveit_package()
# Default to C99
if(NOT CMAKE_C_STANDARD)
set(CMAKE_C_STANDARD 99)
endif()
# Default to C++14
if(NOT CMAKE_CXX_STANDARD)
set(CMAKE_CXX_STANDARD 14)
endif()
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
add_compile_options(-Wall -Wextra -Wpedantic)
endif()
# find dependencies
find_package(Eigen3 REQUIRED)
find_package(Boost REQUIRED system filesystem date_time thread)
find_package(ament_cmake REQUIRED)
find_package(control_msgs REQUIRED)
find_package(moveit_core REQUIRED)
find_package(moveit_ros_planning REQUIRED)
find_package(moveit_ros_planning_interface REQUIRED)
find_package(moveit_ros_perception REQUIRED)
find_package(moveit_servo REQUIRED)
find_package(moveit_visual_tools REQUIRED)
find_package(geometric_shapes REQUIRED)
find_package(rclcpp REQUIRED)
find_package(rclcpp_action REQUIRED)
find_package(pluginlib REQUIRED)
find_package(tf2_ros REQUIRED)
find_package(tf2_eigen REQUIRED)
find_package(tf2_geometry_msgs REQUIRED)
set(THIS_PACKAGE_INCLUDE_DEPENDS
ament_cmake
rclcpp
rclcpp_action
tf2_geometry_msgs
tf2_ros
moveit_core
moveit_visual_tools
moveit_ros_planning_interface
tf2_geometry_msgs
moveit_ros_planning
pluginlib
Eigen3
Boost
control_msgs
moveit_servo
)
include_directories(${THIS_PACKAGE_INCLUDE_DIRS})
add_executable(rasms_moveit src/run_moveit.cpp)
#target_include_directories(rasms_moveit PRIVATE include)
ament_target_dependencies(rasms_moveit
${THIS_PACKAGE_INCLUDE_DEPENDS}
)
install(TARGETS rasms_moveit
DESTINATION lib/${PROJECT_NAME}
)
#install(TARGETS rasms_moveit
# EXPORT export_${PROJECT_NAME}
# LIBRARY DESTINATION lib
# ARCHIVE DESTINATION lib
# RUNTIME DESTINATION lib/${PROJECT_NAME}
# INCLUDES DESTINATION include
#)
#ament_export_targets(export_${PROJECT_NAME})
ament_package()

View file

@ -0,0 +1,48 @@
<?xml version="1.0"?>
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3">
<name>rasms_moveit_actions</name>
<version>0.0.0</version>
<description>TODO: Package description</description>
<maintainer email="ur.narmak@gmail.com">bill-finger</maintainer>
<license>TODO: License declaration</license>
<buildtool_depend>ament_cmake</buildtool_depend>
<!--build_depend>moveit_common</build_depend-->
<depend>control_msgs</depend>
<depend>moveit_core</depend>
<depend>moveit_ros_perception</depend>
<depend>moveit_ros_planning_interface</depend>
<depend>moveit_servo</depend>
<depend>moveit_visual_tools</depend>
<depend>pluginlib</depend>
<depend>rviz_visual_tools</depend>
<depend>tf2_eigen</depend>
<depend>tf2_geometry_msgs</depend>
<depend>tf2_ros</depend>
<build_depend>eigen</build_depend>
<build_depend>geometric_shapes</build_depend>
<build_depend>moveit_common</build_depend>
<build_depend>moveit_ros_planning</build_depend>
<exec_depend>controller_manager</exec_depend>
<exec_depend>gripper_controllers</exec_depend>
<exec_depend>joint_state_broadcaster</exec_depend>
<exec_depend>joint_state_publisher</exec_depend>
<exec_depend>joint_trajectory_controller</exec_depend>
<exec_depend>moveit</exec_depend>
<exec_depend>robot_state_publisher</exec_depend>
<exec_depend>rviz2</exec_depend>
<exec_depend>warehouse_ros_mongo</exec_depend>
<exec_depend>xacro</exec_depend>
<!--test_depend>ament_lint_auto</test_depend>
<test_depend>ament_lint_common</test_depend-->
<test_depend>ament_cmake_gtest</test_depend>
<export>
<build_type>ament_cmake</build_type>
</export>
</package>

View file

@ -0,0 +1,314 @@
#include <rclcpp/rclcpp.hpp>
#include <memory>
// MoveitCpp
#include <moveit/moveit_cpp/moveit_cpp.h>
#include <moveit/moveit_cpp/planning_component.h>
#include <geometry_msgs/msg/point_stamped.h>
#include <moveit_visual_tools/moveit_visual_tools.h>
//#include <urdf/urdf_world_parser.hpp>
namespace rvt = rviz_visual_tools;
// All source files that use ROS logging should define a file-specific
// static const rclcpp::Logger named LOGGER, located at the top of the file
// and inside the namespace with the narrowest scope (if there is one)
static const rclcpp::Logger LOGGER = rclcpp::get_logger("moveit_cpp_tutorial");
int main(int argc, char** argv)
{
rclcpp::init(argc, argv);
rclcpp::NodeOptions node_options;
RCLCPP_INFO(LOGGER, "Initialize node");
// This enables loading undeclared parameters
// best practice would be to declare parameters in the corresponding classes
// and provide descriptions about expected use
node_options.automatically_declare_parameters_from_overrides(true);
rclcpp::Node::SharedPtr node = rclcpp::Node::make_shared("run_moveit_cpp", "", node_options);
// We spin up a SingleThreadedExecutor for the current state monitor to get information
// about the robot's state.
rclcpp::executors::SingleThreadedExecutor executor;
executor.add_node(node);
std::thread([&executor]() { executor.spin(); }).detach();
// BEGIN_TUTORIAL
//
// Setup
// ^^^^^
//
static const std::string PLANNING_GROUP = "rasms";
static const std::string LOGNAME = "moveit_interface";
/* Otherwise robot with zeros joint_states */
rclcpp::sleep_for(std::chrono::seconds(1));
RCLCPP_INFO(LOGGER, "Starting MoveIt Tutorials...");
auto moveit_cpp_ptr = std::make_shared<moveit_cpp::MoveItCpp>(node);
moveit_cpp_ptr->getPlanningSceneMonitor()->providePlanningSceneService();
auto planning_components = std::make_shared<moveit_cpp::PlanningComponent>(PLANNING_GROUP, moveit_cpp_ptr);
auto robot_model_ptr = moveit_cpp_ptr->getRobotModel();
auto robot_start_state = planning_components->getStartState();
auto joint_model_group_ptr = robot_model_ptr->getJointModelGroup(PLANNING_GROUP);
// Visualization
// ^^^^^^^^^^^^^
//
// The package MoveItVisualTools provides many capabilties for visualizing objects, robots,
// and trajectories in RViz as well as debugging tools such as step-by-step introspection of a script
moveit_visual_tools::MoveItVisualTools visual_tools(node, "base", "moveit_cpp_tutorial",
moveit_cpp_ptr->getPlanningSceneMonitor());
visual_tools.deleteAllMarkers();
visual_tools.loadRemoteControl();
Eigen::Isometry3d text_pose = Eigen::Isometry3d::Identity();
text_pose.translation().z() = 1.75;
visual_tools.publishText(text_pose, "MoveItCpp_Demo", rvt::WHITE, rvt::XLARGE);
visual_tools.trigger();
// Start the demo
// ^^^^^^^^^^^^^^^^^^^^^^^^^
visual_tools.prompt("Press 'next' in the RvizVisualToolsGui window to start the demo");
// Planning with MoveItCpp
// ^^^^^^^^^^^^^^^^^^^^^^^
// There are multiple ways to set the start and the goal states of the plan
// they are illustrated in the following plan examples
//
// Plan #1
// ^^^^^^^
//
// We can set the start state of the plan to the current state of the robot
planning_components->setStartStateToCurrentState();
// The first way to set the goal of the plan is by using geometry_msgs::PoseStamped ROS message type as follow
geometry_msgs::msg::PoseStamped target_pose1;
target_pose1.header.frame_id = "base";
target_pose1.pose.orientation.w = 1.0;
target_pose1.pose.position.x = 0.28;
target_pose1.pose.position.y = -0.2;
target_pose1.pose.position.z = 0.5;
planning_components->setGoal(target_pose1, "link6");
// Now, we call the PlanningComponents to compute the plan and visualize it.
// Note that we are just planning
auto plan_solution1 = planning_components->plan();
// Check if PlanningComponents succeeded in finding the plan
if (plan_solution1)
{
// Visualize the start pose in Rviz
visual_tools.publishAxisLabeled(robot_start_state->getGlobalLinkTransform("base"), "zero_pose");
// Visualize the goal pose in Rviz
visual_tools.publishAxisLabeled(target_pose1.pose, "target_pose");
visual_tools.publishText(text_pose, "setStartStateToCurrentState", rvt::WHITE, rvt::XLARGE);
// Visualize the trajectory in Rviz
visual_tools.publishTrajectoryLine(plan_solution1.trajectory, joint_model_group_ptr);
visual_tools.trigger();
/* Uncomment if you want to execute the plan */
/* planning_components->execute(); // Execute the plan */
}
// Plan #1 visualization:
//
// .. image:: images/moveitcpp_plan1.png
// :width: 250pt
// :align: center
//
// Start the next plan
visual_tools.prompt("Press 'next' in the RvizVisualToolsGui window to continue the demo");
visual_tools.deleteAllMarkers();
visual_tools.trigger();
// Plan #2
// ^^^^^^^
//
// Here we will set the current state of the plan using
// moveit::core::RobotState
auto start_state = *(moveit_cpp_ptr->getCurrentState());
geometry_msgs::msg::Pose start_pose;
start_pose.orientation.w = 1.0;
start_pose.position.x = 0.55;
start_pose.position.y = 0.0;
start_pose.position.z = 0.6;
start_state.setFromIK(joint_model_group_ptr, start_pose);
planning_components->setStartState(start_state);
// We will reuse the old goal that we had and plan to it.
auto plan_solution2 = planning_components->plan();
if (plan_solution2)
{
moveit::core::RobotState robot_state(robot_model_ptr);
moveit::core::robotStateMsgToRobotState(plan_solution2.start_state, robot_state);
visual_tools.publishAxisLabeled(robot_state.getGlobalLinkTransform("link6"), "start_pose");
visual_tools.publishAxisLabeled(target_pose1.pose, "target_pose");
visual_tools.publishText(text_pose, "moveit::core::RobotState_Start_State", rvt::WHITE, rvt::XLARGE);
visual_tools.publishTrajectoryLine(plan_solution2.trajectory, joint_model_group_ptr);
visual_tools.trigger();
/* Uncomment if you want to execute the plan */
/* planning_components->execute(); // Execute the plan */
}
// Plan #2 visualization:
//
// .. image:: images/moveitcpp_plan2.png
// :width: 250pt
// :align: center
//
// Start the next plan
visual_tools.prompt("Press 'next' in the RvizVisualToolsGui window to continue the demo");
visual_tools.deleteAllMarkers();
visual_tools.trigger();
// Plan #3
// ^^^^^^^
//
// We can also set the goal of the plan using
// moveit::core::RobotState
auto target_state = *robot_start_state;
geometry_msgs::msg::Pose target_pose2;
target_pose2.orientation.w = 1.0;
target_pose2.position.x = 0.55;
target_pose2.position.y = -0.05;
target_pose2.position.z = 0.8;
target_state.setFromIK(joint_model_group_ptr, target_pose2);
planning_components->setGoal(target_state);
// We will reuse the old start that we had and plan from it.
auto plan_solution3 = planning_components->plan();
if (plan_solution3)
{
moveit::core::RobotState robot_state(robot_model_ptr);
moveit::core::robotStateMsgToRobotState(plan_solution3.start_state, robot_state);
visual_tools.publishAxisLabeled(robot_state.getGlobalLinkTransform("link6"), "start_pose");
visual_tools.publishAxisLabeled(target_pose2, "target_pose");
visual_tools.publishText(text_pose, "moveit::core::RobotState_Goal_Pose", rvt::WHITE, rvt::XLARGE);
visual_tools.publishTrajectoryLine(plan_solution3.trajectory, joint_model_group_ptr);
visual_tools.trigger();
/* Uncomment if you want to execute the plan */
/* planning_components->execute(); // Execute the plan */
}
// Plan #3 visualization:
//
// .. image:: images/moveitcpp_plan3.png
// :width: 250pt
// :align: center
//
// Start the next plan
visual_tools.prompt("Press 'next' in the RvizVisualToolsGui window to continue the demo");
visual_tools.deleteAllMarkers();
visual_tools.trigger();
// Plan #4
// ^^^^^^^
//
// We can set the start state of the plan to the current state of the robot
// We can set the goal of the plan using the name of a group states
// for panda robot we have one named robot state for "panda_arm" planning group called "ready"
// see `panda_arm.xacro
// <https://github.com/ros-planning/panda_moveit_config/blob/melodic-devel/config/panda_arm.xacro#L13>`_
/* // Set the start state of the plan from a named robot state */
/* planning_components->setStartState("ready"); // Not implemented yet */
// Set the goal state of the plan from a named robot state
planning_components->setGoal("ready");
// Again we will reuse the old start that we had and plan from it.
auto plan_solution4 = planning_components->plan();
if (plan_solution4)
{
moveit::core::RobotState robot_state(robot_model_ptr);
moveit::core::robotStateMsgToRobotState(plan_solution4.start_state, robot_state);
visual_tools.publishAxisLabeled(robot_state.getGlobalLinkTransform("link6"), "start_pose");
visual_tools.publishAxisLabeled(robot_start_state->getGlobalLinkTransform("link6"), "target_pose");
visual_tools.publishText(text_pose, "Goal_Pose_From_Named_State", rvt::WHITE, rvt::XLARGE);
visual_tools.publishTrajectoryLine(plan_solution4.trajectory, joint_model_group_ptr);
visual_tools.trigger();
/* Uncomment if you want to execute the plan */
/* planning_components->execute(); // Execute the plan */
}
// Plan #4 visualization:
//
// .. image:: images/moveitcpp_plan4.png
// :width: 250pt
// :align: center
//
// Start the next plan
visual_tools.prompt("Press 'next' in the RvizVisualToolsGui window to continue the demo");
visual_tools.deleteAllMarkers();
visual_tools.trigger();
// Plan #5
// ^^^^^^^
//
// We can also generate motion plans around objects in the collision scene.
//
// First we create the collision object
moveit_msgs::msg::CollisionObject collision_object;
collision_object.header.frame_id = "base";
collision_object.id = "box";
shape_msgs::msg::SolidPrimitive box;
box.type = box.BOX;
box.dimensions = { 0.1, 0.4, 0.1 };
geometry_msgs::msg::Pose box_pose;
box_pose.position.x = 0.4;
box_pose.position.y = 0.0;
box_pose.position.z = 1.0;
collision_object.primitives.push_back(box);
collision_object.primitive_poses.push_back(box_pose);
collision_object.operation = collision_object.ADD;
// Add object to planning scene
{ // Lock PlanningScene
planning_scene_monitor::LockedPlanningSceneRW scene(moveit_cpp_ptr->getPlanningSceneMonitor());
scene->processCollisionObjectMsg(collision_object);
} // Unlock PlanningScene
planning_components->setStartStateToCurrentState();
planning_components->setGoal("extended");
auto plan_solution5 = planning_components->plan();
if (plan_solution5)
{
visual_tools.publishText(text_pose, "Planning_Around_Collision_Object", rvt::WHITE, rvt::XLARGE);
visual_tools.publishTrajectoryLine(plan_solution5.trajectory, joint_model_group_ptr);
visual_tools.trigger();
/* Uncomment if you want to execute the plan */
/* planning_components->execute(); // Execute the plan */
}
// Plan #5 visualization:
//
// .. image:: images/moveitcpp_plan5.png
// :width: 250pt
// :align: center
//
// END_TUTORIAL
visual_tools.prompt("Press 'next' to end the demo");
visual_tools.deleteAllMarkers();
visual_tools.trigger();
RCLCPP_INFO(LOGGER, "Shutting down.");
rclcpp::shutdown();
return 0;
}

View file

@ -0,0 +1,20 @@
rasms_moveit:
ros__parameters:
planning_scene_monitor_options:
name: "planning_scene_monitor"
robot_description: "robot_description"
joint_state_topic: "/joint_states"
attached_collision_object_topic: "/moveit_cpp/planning_scene_monitor"
publish_planning_scene_topic: "/moveit_cpp/publish_planning_scene"
monitored_planning_scene_topic: "/moveit_cpp/monitored_planning_scene"
wait_for_initial_state_timeout: 10.0
planning_pipelines:
#namespace: "moveit_cpp" # optional, default is ~
pipeline_names: ["ompl"]
plan_request_params:
planning_attempts: 10
planning_pipeline: ompl
max_velocity_scaling_factor: 1.0
max_acceleration_scaling_factor: 1.0

View file

@ -123,59 +123,8 @@ planner_configs:
TrajOptDefault: TrajOptDefault:
type: geometric::TrajOpt type: geometric::TrajOpt
panda_arm: rasms_description_arm:
planner_configs: longest_valid_fraction: "0.001"
- SBLkConfigDefault
- ESTkConfigDefault
- LBKPIECEkConfigDefault
- BKPIECEkConfigDefault
- KPIECEkConfigDefault
- RRTkConfigDefault
- RRTConnectkConfigDefault
- RRTstarkConfigDefault
- TRRTkConfigDefault
- PRMkConfigDefault
- PRMstarkConfigDefault
- FMTkConfigDefault
- BFMTkConfigDefault
- PDSTkConfigDefault
- STRIDEkConfigDefault
- BiTRRTkConfigDefault
- LBTRRTkConfigDefault
- BiESTkConfigDefault
- ProjESTkConfigDefault
- LazyPRMkConfigDefault
- LazyPRMstarkConfigDefault
- SPARSkConfigDefault
- SPARStwokConfigDefault
- TrajOptDefault
panda_arm_hand:
planner_configs:
- SBLkConfigDefault
- ESTkConfigDefault
- LBKPIECEkConfigDefault
- BKPIECEkConfigDefault
- KPIECEkConfigDefault
- RRTkConfigDefault
- RRTConnectkConfigDefault
- RRTstarkConfigDefault
- TRRTkConfigDefault
- PRMkConfigDefault
- PRMstarkConfigDefault
- FMTkConfigDefault
- BFMTkConfigDefault
- PDSTkConfigDefault
- STRIDEkConfigDefault
- BiTRRTkConfigDefault
- LBTRRTkConfigDefault
- BiESTkConfigDefault
- ProjESTkConfigDefault
- LazyPRMkConfigDefault
- LazyPRMstarkConfigDefault
- SPARSkConfigDefault
- SPARStwokConfigDefault
- TrajOptDefault
hand:
planner_configs: planner_configs:
- SBLkConfigDefault - SBLkConfigDefault
- ESTkConfigDefault - ESTkConfigDefault

View file

@ -7,7 +7,7 @@ Panels:
- /Global Options1 - /Global Options1
- /Status1 - /Status1
Splitter Ratio: 0.5 Splitter Ratio: 0.5
Tree Height: 219 Tree Height: 814
- Class: rviz_common/Selection - Class: rviz_common/Selection
Name: Selection Name: Selection
- Class: rviz_common/Tool Properties - Class: rviz_common/Tool Properties
@ -42,106 +42,10 @@ Visualization Manager:
Plane Cell Count: 10 Plane Cell Count: 10
Reference Frame: <Fixed Frame> Reference Frame: <Fixed Frame>
Value: true Value: true
- Acceleration_Scaling_Factor: 0.1 - Class: moveit_rviz_plugin/PlanningScene
Class: moveit_rviz_plugin/MotionPlanning
Enabled: true Enabled: true
Move Group Namespace: "" Move Group Namespace: ""
MoveIt_Allow_Approximate_IK: false Name: PlanningScene
MoveIt_Allow_External_Program: false
MoveIt_Allow_Replanning: false
MoveIt_Allow_Sensor_Positioning: false
MoveIt_Planning_Attempts: 10
MoveIt_Planning_Time: 5
MoveIt_Use_Cartesian_Path: false
MoveIt_Use_Constraint_Aware_IK: false
MoveIt_Warehouse_Host: 127.0.0.1
MoveIt_Warehouse_Port: 33829
MoveIt_Workspace:
Center:
X: 0
Y: 0
Z: 0
Size:
X: 2
Y: 2
Z: 2
Name: MotionPlanning
Planned Path:
Color Enabled: false
Interrupt Display: false
Links:
All Links Enabled: true
Expand Joint Details: false
Expand Link Details: false
Expand Tree: false
Link Tree Style: Links in Alphabetic Order
base:
Alpha: 1
Show Axes: false
Show Trail: false
Value: true
link1:
Alpha: 1
Show Axes: false
Show Trail: false
Value: true
link2:
Alpha: 1
Show Axes: false
Show Trail: false
Value: true
link3:
Alpha: 1
Show Axes: false
Show Trail: false
Value: true
link4:
Alpha: 1
Show Axes: false
Show Trail: false
Value: true
link5:
Alpha: 1
Show Axes: false
Show Trail: false
Value: true
link6:
Alpha: 1
Show Axes: false
Show Trail: false
Value: true
world:
Alpha: 1
Show Axes: false
Show Trail: false
Loop Animation: false
Robot Alpha: 0.5
Robot Color: 150; 50; 150
Show Robot Collision: false
Show Robot Visual: true
Show Trail: false
State Display Time: 0.05 s
Trail Step Size: 1
Trajectory Topic: /display_planned_path
Planning Metrics:
Payload: 1
Show Joint Torques: false
Show Manipulability: false
Show Manipulability Index: false
Show Weight Limit: false
TextHeight: 0.07999999821186066
Planning Request:
Colliding Link Color: 255; 0; 0
Goal State Alpha: 1
Goal State Color: 250; 128; 0
Interactive Marker Size: 0
Joint Violation Color: 255; 0; 255
Planning Group: roboasm_sgonov_arm
Query Goal State: true
Query Start State: false
Show Workspace: false
Start State Alpha: 1
Start State Color: 0; 255; 0
Planning Scene Topic: /monitored_planning_scene Planning Scene Topic: /monitored_planning_scene
Robot Description: robot_description Robot Description: robot_description
Scene Geometry: Scene Geometry:
@ -202,7 +106,6 @@ Visualization Manager:
Show Robot Collision: false Show Robot Collision: false
Show Robot Visual: true Show Robot Visual: true
Value: true Value: true
Velocity_Scaling_Factor: 0.1
Enabled: true Enabled: true
Global Options: Global Options:
Background Color: 48; 48; 48 Background Color: 48; 48; 48
@ -261,28 +164,24 @@ Visualization Manager:
Invert Z Axis: false Invert Z Axis: false
Name: Current View Name: Current View
Near Clip Distance: 0.009999999776482582 Near Clip Distance: 0.009999999776482582
Pitch: 0.8953979015350342 Pitch: 0.84539794921875
Target Frame: <Fixed Frame> Target Frame: <Fixed Frame>
Value: Orbit (rviz) Value: Orbit (rviz)
Yaw: 0.6453981399536133 Yaw: 0.6953980922698975
Saved: ~ Saved: ~
Window Geometry: Window Geometry:
"":
collapsed: false
" - Trajectory Slider":
collapsed: false
Displays: Displays:
collapsed: false collapsed: false
Height: 846 Height: 1043
Hide Left Dock: false Hide Left Dock: false
Hide Right Dock: false Hide Right Dock: false
QMainWindow State: 000000ff00000000fd0000000400000000000001f3000002f4fc020000000afb0000001200530065006c0065006300740069006f006e00000001e10000009b0000005c00fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c006100790073010000003d00000166000000c900fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261fb000000280020002d0020005400720061006a006500630074006f0072007900200053006c00690064006500720000000000ffffffff0000004100fffffffbffffffff01000001a9000001880000017d00ffffff000000010000010f000002f4fc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073010000003d000002f4000000a400fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e10000019700000003000004420000003efc0100000002fb0000000800540069006d00650100000000000004420000000000000000fb0000000800540069006d00650100000000000004500000000000000000000001a2000002f400000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000 QMainWindow State: 000000ff00000000fd0000000400000000000001f3000003b9fc020000000bfb0000001200530065006c0065006300740069006f006e00000001e10000009b0000005c00fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c006100790073010000003d000003b9000000c900fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261fb000000280020002d0020005400720061006a006500630074006f0072007900200053006c00690064006500720000000000ffffffff0000000000000000fb00000044004d006f00740069006f006e0050006c0061006e006e0069006e00670020002d0020005400720061006a006500630074006f0072007900200053006c00690064006500720000000000ffffffff0000000000000000fb0000001c004d006f00740069006f006e0050006c0061006e006e0069006e006701000001b2000002290000000000000000000000010000010f000003b9fc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073010000003d000003b9000000a400fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e10000019700000003000004420000003efc0100000002fb0000000800540069006d00650100000000000004420000000000000000fb0000000800540069006d0065010000000000000450000000000000000000000472000003b900000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000
Selection: Selection:
collapsed: false collapsed: false
Tool Properties: Tool Properties:
collapsed: false collapsed: false
Views: Views:
collapsed: false collapsed: false
Width: 1200 Width: 1920
X: 225 X: 2560
Y: 91 Y: 360

View file

@ -34,7 +34,6 @@ def launch_setup(context, *args, **kwargs):
("robot_description", robot_description_content), ("robot_description", robot_description_content),
("controller_configurations_package", LaunchConfiguration("controller_configurations_package")), ("controller_configurations_package", LaunchConfiguration("controller_configurations_package")),
("controller_configurations", LaunchConfiguration("controller_configurations")), ("controller_configurations", LaunchConfiguration("controller_configurations")),
("controller", LaunchConfiguration("controller")),
("sim", LaunchConfiguration("sim")) ("sim", LaunchConfiguration("sim"))
] ]
) )
@ -118,14 +117,6 @@ def generate_launch_description():
) )
) )
launch_args.append(
DeclareLaunchArgument(
name="controller",
default_value="position_trajectory_controller",
description="Robot controller."
)
)
launch_args.append( launch_args.append(
DeclareLaunchArgument( DeclareLaunchArgument(
name="moveit_controller_configurations_package", name="moveit_controller_configurations_package",

View file

@ -1,9 +1,14 @@
import os
from launch.launch_description import LaunchDescription from launch.launch_description import LaunchDescription
from launch.actions import DeclareLaunchArgument from launch.actions import DeclareLaunchArgument
from launch.conditions import UnlessCondition from launch.conditions import UnlessCondition
from launch.substitutions import PathJoinSubstitution, LaunchConfiguration from launch.substitutions import PathJoinSubstitution, LaunchConfiguration
from launch_ros.actions import Node from launch_ros.actions import Node
from launch_ros.substitutions import FindPackageShare from launch_ros.substitutions import FindPackageShare
from ament_index_python.packages import get_package_share_directory
from launch.actions import ExecuteProcess
def generate_launch_description(): def generate_launch_description():
@ -54,18 +59,26 @@ def generate_launch_description():
robot_description = {"robot_description": LaunchConfiguration("robot_description")} robot_description = {"robot_description": LaunchConfiguration("robot_description")}
# Load controllers from YAML configuration file # Load controllers from YAML configuration file
controller_configurations = PathJoinSubstitution([ """controller_configurations_path = PathJoinSubstitution([
FindPackageShare(LaunchConfiguration("controller_configurations_package")), FindPackageShare(LaunchConfiguration("controller_configurations_package")),
LaunchConfiguration("controller_configurations") LaunchConfiguration("controller_configurations")
]) ])"""
print(robot_description)
ros2_controllers_path = os.path.join(
get_package_share_directory("rasms_moveit_config"),
"config",
"rasms_controllers.yml",
)
# Prepare controller manager and other required nodes # Prepare controller manager and other required nodes
controller_manager = Node( controller_manager = Node(
package="controller_manager", package="controller_manager",
executable="ros2_control_node", executable="ros2_control_node",
parameters=[robot_description, controller_configurations], parameters=[robot_description, ros2_controllers_path],
output="screen", output={
condition=UnlessCondition(LaunchConfiguration("sim")) "stdout": "screen",
"stderr": "screen"
},
) )
robot_state_publisher = Node( robot_state_publisher = Node(
@ -75,7 +88,15 @@ def generate_launch_description():
parameters=[robot_description] parameters=[robot_description]
) )
joint_state_broadcaster = Node( static_tf = Node(
package="tf2_ros",
executable="static_transform_publisher",
name="static_transform_publisher",
output="log",
arguments=["0.0", "0.0", "0.0", "0.0", "0.0", "0.0", "world", "base"],
)
"""joint_state_broadcaster = Node(
package="controller_manager", package="controller_manager",
executable="spawner.py", executable="spawner.py",
arguments=["joint_state_broadcaster", "--controller-manager", "/controller_manager"], arguments=["joint_state_broadcaster", "--controller-manager", "/controller_manager"],
@ -84,13 +105,27 @@ def generate_launch_description():
controller = Node( controller = Node(
package="controller_manager", package="controller_manager",
executable="spawner.py", executable="spawner.py",
arguments=[LaunchConfiguration("controller"), "--controller-manager", "/controller_manager"], arguments=["position_trajectory_controller", "--controller-manager", "/controller_manager"],
) )"""
load_controllers = []
for controller in [
"position_trajectory_controller",
"joint_state_broadcaster",
]:
load_controllers += [
ExecuteProcess(
cmd=["ros2 run controller_manager spawner.py {}".format(controller)],
shell=True,
output="screen",
)
]
return LaunchDescription( return LaunchDescription(
launch_args + [ launch_args +
[
controller_manager, controller_manager,
robot_state_publisher, robot_state_publisher,
joint_state_broadcaster, static_tf
controller ]
]) + load_controllers)

View file

@ -63,7 +63,7 @@ def launch_setup(context, *args, **kwargs):
} }
# Planning # Planning
ompl_yaml = load_yaml("rasms_moveit_config", "config/ompl_planning.yml") #ompl_yaml = load_yaml("rasms_moveit_config", "config/ompl_planning.yml")
planning = { planning = {
"move_group": { "move_group": {
@ -78,49 +78,79 @@ def launch_setup(context, *args, **kwargs):
"moveit_manage_controllers": True} "moveit_manage_controllers": True}
# Controllers # Controllers
controllers_yaml = load_yaml( moveit_simple_controller_yml = load_yaml(
LaunchConfiguration("moveit_controller_configurations_package").perform(context), LaunchConfiguration("moveit_controller_configurations_package").perform(context),
LaunchConfiguration("moveit_controller_configurations").perform(context) LaunchConfiguration("moveit_controller_configurations").perform(context)
) )
moveit_controllers = {"moveit_simple_controller_manager": controllers_yaml, moveit_controllers = {"moveit_simple_controller_manager": moveit_simple_controller_yml,
"moveit_controller_manager": "moveit_simple_controller_manager/MoveItSimpleControllerManager"} "moveit_controller_manager": "moveit_simple_controller_manager/MoveItSimpleControllerManager"}
ompl_planning_pipeline_config = {
"ompl": {
"planning_plugin": "ompl_interface/OMPLPlanner",
"request_adapters": """default_planner_request_adapters/AddTimeOptimalParameterization default_planner_request_adapters/FixWorkspaceBounds default_planner_request_adapters/FixStartStateBounds default_planner_request_adapters/FixStartStateCollision default_planner_request_adapters/FixStartStatePathConstraints""",
"start_state_max_bounds_error": 0.1,
}
}
ompl_planning_yml = load_yaml(
"rasms_moveit_config", "config/ompl_planning.yml"
)
ompl_planning_pipeline_config["ompl"].update(ompl_planning_yml)
# Planning scene # Planning scene
planning_scene_monitor_parameters = {"publish_planning_scene": True, planning_scene_monitor_parameters = {"publish_planning_scene": True,
"publish_geometry_updates": True, "publish_geometry_updates": True,
"publish_state_updates": True, "publish_state_updates": True,
"publish_transforms_updates": True} "publish_transforms_updates": True}
moveit_cpp_yaml_file_name = (
get_package_share_directory("rasms_moveit_config") + "/config/moveit_cpp.yml"
)
# Time configuration # Time configuration
use_sim_time = {"use_sime_time": LaunchConfiguration("sim")} use_sim_time = {"use_sime_time": LaunchConfiguration("sim")}
# Prepare move group node # Prepare move group node
move_group_node = Node( #"""move_group_node = Node(
package="moveit_ros_move_group", # package="moveit_ros_move_group",
executable="move_group", # executable="move_group",
# output="screen",
# arguments=["--ros-args"],
# parameters=[
# robot_description,
# robot_description_semantic,
# kinematics_yaml,
# robot_description_planning,
# ompl_yaml,
# planning,
# trajectory_execution,
# moveit_controllers,
# planning_scene_monitor_parameters,
# use_sim_time
# ]
#)"""
moveit_cpp_node = Node(
name="moveit_cpp_actions",
package="rasms_moveit_actions",
executable="rasms_moveit",
output="screen", output="screen",
arguments=["--ros-args"],
parameters=[ parameters=[
moveit_cpp_yaml_file_name,
robot_description, robot_description,
robot_description_semantic, robot_description_semantic,
kinematics_yaml, kinematics_yaml,
robot_description_planning, ompl_planning_pipeline_config,
ompl_yaml,
planning,
trajectory_execution,
moveit_controllers, moveit_controllers,
planning_scene_monitor_parameters, ],
use_sim_time
]
) )
robot_state_publisher = Node( """robot_state_publisher = Node(
package="robot_state_publisher", package="robot_state_publisher",
executable="robot_state_publisher", executable="robot_state_publisher",
output="screen", output="screen",
parameters=[robot_description] parameters=[robot_description]
) )"""
spawn_controller = Node( spawn_controller = Node(
package="controller_manager", package="controller_manager",
@ -130,7 +160,7 @@ def launch_setup(context, *args, **kwargs):
) )
# RViz # RViz
rviz_config = PathJoinSubstitution([FindPackageShare("rasms_moveit_config"), "config/robasm_sgonov.rviz"]) rviz_config = PathJoinSubstitution([FindPackageShare("rasms_moveit_config"), "config/rasms.rviz"])
rviz = Node( rviz = Node(
package="rviz2", package="rviz2",
@ -138,8 +168,6 @@ def launch_setup(context, *args, **kwargs):
parameters=[ parameters=[
robot_description, robot_description,
robot_description_semantic, robot_description_semantic,
kinematics_yaml,
planning,
use_sim_time use_sim_time
], ],
arguments=[ arguments=[
@ -148,9 +176,10 @@ def launch_setup(context, *args, **kwargs):
) )
return [ return [
move_group_node, #move_group_node,
moveit_cpp_node,
rviz, rviz,
robot_state_publisher, #robot_state_publisher,
spawn_controller spawn_controller
] ]

View file

@ -28,10 +28,6 @@ def generate_launch_description():
) )
) )
# Note: Environment variable GAZEBO_MODEL_PATH is extended as in
# ROS2 control demos via environment hook https://github.com/ros-controls/ros2_control_demos/tree/master/ros2_control_demo_description/rrbot_description
# Also see https://colcon.readthedocs.io/en/released/developer/environment.html#dsv-files
# Gazebo launch scripts append GAZEBO_MODEL_PATH with known paths, see https://github.com/ros-simulation/gazebo_ros_pkgs/blob/ab1ae5c05eda62674b36df74eb3be8c93cdc8761/gazebo_ros/launch/gzclient.launch.py#L26
spawn_entity = Node( spawn_entity = Node(
package="gazebo_ros", package="gazebo_ros",
executable="spawn_entity.py", executable="spawn_entity.py",

View file

@ -3,7 +3,7 @@
This is a format for representing semantic information about the robot structure. This is a format for representing semantic information about the robot structure.
A URDF file must exist for this robot as well, where the joints and the links that are referenced are defined A URDF file must exist for this robot as well, where the joints and the links that are referenced are defined
--> -->
<robot name="rasms_description"> <robot name="rasms">
<!--GROUPS: Representation of a set of joints and links. This can be useful for specifying DOF to plan for, defining arms, end effectors, etc--> <!--GROUPS: Representation of a set of joints and links. This can be useful for specifying DOF to plan for, defining arms, end effectors, etc-->
<!--LINKS: When a link is specified, the parent joint of that link (if it exists) is automatically included--> <!--LINKS: When a link is specified, the parent joint of that link (if it exists) is automatically included-->
<!--JOINTS: When a joint is specified, the child link of that joint (which will always exist) is automatically included--> <!--JOINTS: When a joint is specified, the child link of that joint (which will always exist) is automatically included-->
@ -13,14 +13,6 @@
<chain base_link="base" tip_link="link6"/> <chain base_link="base" tip_link="link6"/>
</group> </group>
<!--GROUP STATES: Purpose: Define a named state for a particular group, in terms of joint values. This is useful to define states like 'folded arms'--> <!--GROUP STATES: Purpose: Define a named state for a particular group, in terms of joint values. This is useful to define states like 'folded arms'-->
<group_state name="pose1" group="rasms_description_arm">
<joint name="joint1" value="0"/>
<joint name="joint2" value="0"/>
<joint name="joint3" value="0.4339"/>
<joint name="joint4" value="0"/>
<joint name="joint5" value="0.9199"/>
<joint name="joint6" value="0"/>
</group_state>
<group_state name="zero_pose" group="rasms_description_arm"> <group_state name="zero_pose" group="rasms_description_arm">
<joint name="joint1" value="0"/> <joint name="joint1" value="0"/>
<joint name="joint2" value="0"/> <joint name="joint2" value="0"/>
@ -29,6 +21,14 @@
<joint name="joint5" value="0"/> <joint name="joint5" value="0"/>
<joint name="joint6" value="0"/> <joint name="joint6" value="0"/>
</group_state> </group_state>
<group_state name="pose1" group="rasms_description_arm">
<joint name="joint1" value="0"/>
<joint name="joint2" value="1"/>
<joint name="joint3" value="0.4339"/>
<joint name="joint4" value="0"/>
<joint name="joint5" value="0.9199"/>
<joint name="joint6" value="-1"/>
</group_state>
<!--DISABLE COLLISIONS: By default it is assumed that any link of the robot could potentially come into collision with any other link in the robot. This tag disables collision checking between a specified pair of links. --> <!--DISABLE COLLISIONS: By default it is assumed that any link of the robot could potentially come into collision with any other link in the robot. This tag disables collision checking between a specified pair of links. -->
<disable_collisions link1="base" link2="link1" reason="Adjacent"/> <disable_collisions link1="base" link2="link1" reason="Adjacent"/>
<disable_collisions link1="link1" link2="link2" reason="Adjacent"/> <disable_collisions link1="link1" link2="link2" reason="Adjacent"/>