-
Notifications
You must be signed in to change notification settings - Fork 196
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Update the displayed tutorial robot (#720)
* Update Quickstart Guide * Update your first c++ project * Update Visualizing in rviz * Update Planning Around Objects tutorial * missed a couple updates * pre-commit * Needs to be demo.launch.py * add kinova 7dof moveit config dependency * update unit test * pre-commit again * update test pose * update trajectory_execution param
- Loading branch information
Showing
48 changed files
with
1,855 additions
and
36 deletions.
There are no files selected for viewing
Binary file not shown.
125 changes: 125 additions & 0 deletions
125
doc/tutorials/planning_around_objects/hello_moveit_kinova.cpp
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,125 @@ | ||
#include <moveit/move_group_interface/move_group_interface.h> | ||
#include <moveit/planning_scene_interface/planning_scene_interface.h> | ||
#include <moveit_visual_tools/moveit_visual_tools.h> | ||
|
||
#include <memory> | ||
#include <rclcpp/rclcpp.hpp> | ||
#include <thread> | ||
|
||
int main(int argc, char* argv[]) | ||
{ | ||
// Initialize ROS and create the Node | ||
rclcpp::init(argc, argv); | ||
auto const node = std::make_shared<rclcpp::Node>( | ||
"hello_moveit", rclcpp::NodeOptions().automatically_declare_parameters_from_overrides(true)); | ||
|
||
// Create a ROS logger | ||
auto const logger = rclcpp::get_logger("hello_moveit"); | ||
|
||
// 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); | ||
auto spinner = std::thread([&executor]() { executor.spin(); }); | ||
|
||
// Create the MoveIt MoveGroup Interface | ||
using moveit::planning_interface::MoveGroupInterface; | ||
auto move_group_interface = MoveGroupInterface(node, "manipulator"); | ||
|
||
// Construct and initialize MoveItVisualTools | ||
auto moveit_visual_tools = | ||
moveit_visual_tools::MoveItVisualTools{ node, "base_link", rviz_visual_tools::RVIZ_MARKER_TOPIC, | ||
move_group_interface.getRobotModel() }; | ||
moveit_visual_tools.deleteAllMarkers(); | ||
moveit_visual_tools.loadRemoteControl(); | ||
|
||
// Create a closure for updating the text in rviz | ||
auto const draw_title = [&moveit_visual_tools](auto text) { | ||
auto const text_pose = [] { | ||
auto msg = Eigen::Isometry3d::Identity(); | ||
msg.translation().z() = 1.0; | ||
return msg; | ||
}(); | ||
moveit_visual_tools.publishText(text_pose, text, rviz_visual_tools::WHITE, rviz_visual_tools::XLARGE); | ||
}; | ||
auto const prompt = [&moveit_visual_tools](auto text) { moveit_visual_tools.prompt(text); }; | ||
auto const draw_trajectory_tool_path = | ||
[&moveit_visual_tools, jmg = move_group_interface.getRobotModel()->getJointModelGroup("manipulator")]( | ||
auto const trajectory) { moveit_visual_tools.publishTrajectoryLine(trajectory, jmg); }; | ||
|
||
// Set a target Pose with updated values !!! | ||
auto const target_pose = [] { | ||
geometry_msgs::msg::Pose msg; | ||
msg.orientation.y = 0.8; | ||
msg.orientation.w = 0.6; | ||
msg.position.x = 0.1; | ||
msg.position.y = 0.4; | ||
msg.position.z = 0.4; | ||
return msg; | ||
}(); | ||
move_group_interface.setPoseTarget(target_pose); | ||
|
||
// Create collision object for the robot to avoid | ||
auto const collision_object = [frame_id = move_group_interface.getPlanningFrame()] { | ||
moveit_msgs::msg::CollisionObject collision_object; | ||
collision_object.header.frame_id = frame_id; | ||
collision_object.id = "box1"; | ||
shape_msgs::msg::SolidPrimitive primitive; | ||
|
||
// Define the size of the box in meters | ||
primitive.type = primitive.BOX; | ||
primitive.dimensions.resize(3); | ||
primitive.dimensions[primitive.BOX_X] = 0.5; | ||
primitive.dimensions[primitive.BOX_Y] = 0.1; | ||
primitive.dimensions[primitive.BOX_Z] = 0.5; | ||
|
||
// Define the pose of the box (relative to the frame_id) | ||
geometry_msgs::msg::Pose box_pose; | ||
box_pose.orientation.w = 1.0; | ||
box_pose.position.x = 0.2; | ||
box_pose.position.y = 0.2; | ||
box_pose.position.z = 0.25; | ||
|
||
collision_object.primitives.push_back(primitive); | ||
collision_object.primitive_poses.push_back(box_pose); | ||
collision_object.operation = collision_object.ADD; | ||
|
||
return collision_object; | ||
}(); | ||
|
||
// Add the collision object to the scene | ||
moveit::planning_interface::PlanningSceneInterface planning_scene_interface; | ||
planning_scene_interface.applyCollisionObject(collision_object); | ||
|
||
// Create a plan to that target pose | ||
prompt("Press 'next' in the RvizVisualToolsGui window to plan"); | ||
draw_title("Planning"); | ||
moveit_visual_tools.trigger(); | ||
auto const [success, plan] = [&move_group_interface] { | ||
moveit::planning_interface::MoveGroupInterface::Plan msg; | ||
auto const ok = static_cast<bool>(move_group_interface.plan(msg)); | ||
return std::make_pair(ok, msg); | ||
}(); | ||
|
||
// Execute the plan | ||
if (success) | ||
{ | ||
draw_trajectory_tool_path(plan.trajectory); | ||
moveit_visual_tools.trigger(); | ||
prompt("Press 'next' in the RvizVisualToolsGui window to execute"); | ||
draw_title("Executing"); | ||
moveit_visual_tools.trigger(); | ||
move_group_interface.execute(plan); | ||
} | ||
else | ||
{ | ||
draw_title("Planning Failed!"); | ||
moveit_visual_tools.trigger(); | ||
RCLCPP_ERROR(logger, "Planning failed!"); | ||
} | ||
|
||
// Shutdown ROS | ||
rclcpp::shutdown(); | ||
spinner.join(); | ||
return 0; | ||
} |
File renamed without changes.
Binary file modified
BIN
+222 KB
(340%)
doc/tutorials/planning_around_objects/planning_around_object.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.