├── marm_moveit_config ├── launch │ ├── arm_moveit_sensor_manager.launch.xml │ ├── planning_pipeline.launch.xml │ ├── fake_moveit_controller_manager.launch.xml │ ├── warehouse.launch │ ├── setup_assistant.launch │ ├── arm_moveit_controller_manager.launch.xml │ ├── sensor_manager.launch.xml │ ├── joystick_control.launch │ ├── moveit_rviz.launch │ ├── warehouse_settings.launch.xml │ ├── default_warehouse_db.launch │ ├── moveit_planning_execution.launch │ ├── run_benchmark_ompl.launch │ ├── ompl_planning_pipeline.launch.xml │ ├── planning_context.launch │ ├── trajectory_execution.launch.xml │ ├── demo.launch │ ├── move_group.launch │ └── moveit.rviz ├── config │ ├── kinematics.yaml │ ├── fake_controllers.yaml │ ├── controllers.yaml │ ├── controllers_gazebo.yaml │ ├── joint_limits.yaml │ ├── arm.srdf │ └── ompl_planning.yaml ├── .setup_assistant ├── CMakeLists.txt └── package.xml ├── marm_gazebo ├── config │ ├── arm_gazebo_joint_states.yaml │ ├── trajectory_control.yaml │ └── arm_gazebo_control.yaml ├── launch │ ├── arm_gazebo_control.launch │ ├── arm_trajectory_controller.launch │ ├── arm_bringup_moveit.launch │ ├── arm_gazebo_states.launch │ ├── arm_gazebo_controller.launch │ └── arm_world.launch ├── package.xml └── CMakeLists.txt ├── marm_planning ├── src │ ├── test_random.cpp │ ├── remove_collision_objct.cpp │ ├── test_custom.cpp │ ├── test_cartesian_path.cpp │ ├── add_collision_objct.cpp │ └── check_collision.cpp ├── launch │ ├── arm_planning.launch │ └── arm_planning_with_trail.launch ├── scripts │ ├── moveit_fk_demo.py │ ├── trajectory_demo.py │ ├── moveit_ik_demo.py │ ├── moveit_cartesian_demo.py │ ├── moveit_obstacles_demo.py │ └── moveit_pick_and_place_demo.py ├── package.xml ├── CMakeLists.txt └── config │ ├── arm_paths.rviz │ └── pick_and_place.rviz └── marm_description ├── config └── arm.yaml ├── launch ├── view_arm.launch └── fake_arm.launch ├── package.xml ├── urdf.rviz ├── CMakeLists.txt └── urdf └── arm.xacro /marm_moveit_config/launch/arm_moveit_sensor_manager.launch.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /marm_moveit_config/config/kinematics.yaml: -------------------------------------------------------------------------------- 1 | arm: 2 | kinematics_solver: kdl_kinematics_plugin/KDLKinematicsPlugin 3 | kinematics_solver_search_resolution: 0.005 4 | kinematics_solver_timeout: 0.05 5 | kinematics_solver_attempts: 3 -------------------------------------------------------------------------------- /marm_gazebo/config/arm_gazebo_joint_states.yaml: -------------------------------------------------------------------------------- 1 | arm: 2 | # Publish all joint states ----------------------------------- 3 | joint_state_controller: 4 | type: joint_state_controller/JointStateController 5 | publish_rate: 50 6 | 7 | -------------------------------------------------------------------------------- /marm_gazebo/launch/arm_gazebo_control.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /marm_moveit_config/config/fake_controllers.yaml: -------------------------------------------------------------------------------- 1 | controller_list: 2 | - name: fake_arm_controller 3 | joints: 4 | - joint1 5 | - joint2 6 | - joint3 7 | - joint4 8 | - joint5 9 | - joint6 10 | - name: fake_gripper_controller 11 | joints: 12 | - finger_joint1 -------------------------------------------------------------------------------- /marm_moveit_config/.setup_assistant: -------------------------------------------------------------------------------- 1 | moveit_setup_assistant_config: 2 | URDF: 3 | package: marm_description 4 | relative_path: urdf/arm.xacro 5 | SRDF: 6 | relative_path: config/arm.srdf 7 | CONFIG: 8 | author_name: Hu Chunxu 9 | author_email: huchunxu@hust.edu.cn 10 | generated_timestamp: 1501848702 -------------------------------------------------------------------------------- /marm_gazebo/launch/arm_trajectory_controller.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /marm_moveit_config/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 2.8.3) 2 | project(marm_moveit_config) 3 | 4 | find_package(catkin REQUIRED) 5 | 6 | catkin_package() 7 | 8 | install(DIRECTORY launch DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} 9 | PATTERN "setup_assistant.launch" EXCLUDE) 10 | install(DIRECTORY config DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}) 11 | -------------------------------------------------------------------------------- /marm_moveit_config/launch/planning_pipeline.launch.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /marm_moveit_config/launch/fake_moveit_controller_manager.launch.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /marm_moveit_config/config/controllers.yaml: -------------------------------------------------------------------------------- 1 | controller_list: 2 | - name: arm_controller 3 | action_ns: follow_joint_trajectory 4 | type: FollowJointTrajectory 5 | default: true 6 | joints: 7 | - joint1 8 | - joint2 9 | - joint3 10 | - joint4 11 | - joint5 12 | - joint6 13 | 14 | - name: gripper_controller 15 | action_ns: gripper_action 16 | type: GripperCommand 17 | default: true 18 | joints: 19 | - finger_joint1 20 | 21 | -------------------------------------------------------------------------------- /marm_moveit_config/config/controllers_gazebo.yaml: -------------------------------------------------------------------------------- 1 | controller_manager_ns: controller_manager 2 | controller_list: 3 | - name: arm/arm_joint_controller 4 | action_ns: follow_joint_trajectory 5 | type: FollowJointTrajectory 6 | default: true 7 | joints: 8 | - joint1 9 | - joint2 10 | - joint3 11 | - joint4 12 | - joint5 13 | - joint6 14 | 15 | - name: arm/gripper_controller 16 | action_ns: follow_joint_trajectory 17 | type: FollowJointTrajectory 18 | default: true 19 | joints: 20 | - finger_joint1 21 | - finger_joint2 22 | -------------------------------------------------------------------------------- /marm_gazebo/launch/arm_bringup_moveit.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /marm_planning/src/test_random.cpp: -------------------------------------------------------------------------------- 1 | //首先要包含API的头文件 2 | #include 3 | 4 | int main(int argc, char **argv) 5 | { 6 | ros::init(argc, argv, "moveit_random_demo", ros::init_options::AnonymousName); 7 | // 创建一个异步的自旋线程(spinning thread) 8 | ros::AsyncSpinner spinner(1); 9 | spinner.start(); 10 | // 连接move_group节点中的机械臂实例组,这里的组名arm是我们之前在setup assistant中设置的 11 | moveit::planning_interface::MoveGroupInterface group("arm"); 12 | 13 | // 随机产生一个目标位置 14 | group.setRandomTarget(); 15 | // 开始运动规划,并且让机械臂移动到目标位置 16 | group.move(); 17 | ros::waitForShutdown(); 18 | } 19 | -------------------------------------------------------------------------------- /marm_moveit_config/launch/warehouse.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /marm_moveit_config/launch/setup_assistant.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /marm_moveit_config/launch/arm_moveit_controller_manager.launch.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /marm_gazebo/launch/arm_gazebo_states.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | 8 | 9 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /marm_moveit_config/launch/sensor_manager.launch.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /marm_moveit_config/launch/joystick_control.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /marm_description/config/arm.yaml: -------------------------------------------------------------------------------- 1 | joints: { 2 | joint1: {id: 1, neutral: 205, max_angle: 169.6, min_angle: -169.6, max_speed: 90}, 3 | joint2: {id: 2, max_angle: 134.6, min_angle: -134.6, max_speed: 90}, 4 | joint3: {id: 3, max_angle: 150.1, min_angle: -150.1, max_speed: 90}, 5 | joint4: {id: 4, max_angle: 150.1, min_angle: -150.1, max_speed: 90}, 6 | joint5: {id: 5, max_angle: 150.1, min_angle: -150.1, max_speed: 90}, 7 | joint6: {id: 6, max_angle: 360, min_angle: -360, max_speed: 90}, 8 | finger_joint1: {id: 7, max_speed: 90}, 9 | } 10 | controllers: { 11 | arm_controller: {type: follow_controller, joints: [joint1, joint2, joint3, joint4, joint5, joint6], action_name: arm_controller/follow_joint_trajectory, onboard: False } 12 | } 13 | -------------------------------------------------------------------------------- /marm_moveit_config/launch/moveit_rviz.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /marm_description/launch/view_arm.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /marm_moveit_config/launch/warehouse_settings.launch.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /marm_moveit_config/launch/default_warehouse_db.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /marm_planning/src/remove_collision_objct.cpp: -------------------------------------------------------------------------------- 1 | // 包含API的头文件 2 | #include 3 | #include 4 | 5 | int main(int argc, char **argv) 6 | { 7 | // 初始化ros节点 8 | ros::init(argc, argv, "remove_collision_objct"); 9 | ros::NodeHandle nh; 10 | 11 | ros::AsyncSpinner spin(1); 12 | spin.start(); 13 | 14 | // 创建运动规划的情景,等待创建完成 15 | moveit::planning_interface::PlanningSceneInterface current_scene; 16 | sleep(5.0); 17 | 18 | // 添加个需要删除的障碍物名称,然后通过planning scene interface完成删除 19 | std::vector object_ids; 20 | object_ids.push_back("arm_cylinder"); 21 | current_scene.removeCollisionObjects(object_ids); 22 | 23 | ros::shutdown(); 24 | 25 | return 0; 26 | } 27 | -------------------------------------------------------------------------------- /marm_moveit_config/launch/moveit_planning_execution.launch: -------------------------------------------------------------------------------- 1 | 2 | # The planning and execution components of MoveIt! configured to 3 | # publish the current configuration of the robot (simulated or real) 4 | # and the current state of the world as seen by the planner 5 | 6 | 7 | 8 | # The visualization component of MoveIt! 9 | 10 | 11 | 12 | 13 | 14 | [/arm/joint_states] 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /marm_gazebo/config/trajectory_control.yaml: -------------------------------------------------------------------------------- 1 | arm: 2 | arm_joint_controller: 3 | type: "position_controllers/JointTrajectoryController" 4 | joints: 5 | - joint1 6 | - joint2 7 | - joint3 8 | - joint4 9 | - joint5 10 | - joint6 11 | 12 | gains: 13 | joint1: {p: 1000.0, i: 0.0, d: 0.1, i_clamp: 0.0} 14 | joint2: {p: 1000.0, i: 0.0, d: 0.1, i_clamp: 0.0} 15 | joint3: {p: 1000.0, i: 0.0, d: 0.1, i_clamp: 0.0} 16 | joint4: {p: 1000.0, i: 0.0, d: 0.1, i_clamp: 0.0} 17 | joint5: {p: 1000.0, i: 0.0, d: 0.1, i_clamp: 0.0} 18 | joint6: {p: 1000.0, i: 0.0, d: 0.1, i_clamp: 0.0} 19 | 20 | 21 | gripper_controller: 22 | type: "position_controllers/JointTrajectoryController" 23 | joints: 24 | - finger_joint1 25 | gains: 26 | finger_joint1: {p: 50.0, d: 1.0, i: 0.01, i_clamp: 1.0} 27 | 28 | -------------------------------------------------------------------------------- /marm_moveit_config/launch/run_benchmark_ompl.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /marm_moveit_config/launch/ompl_planning_pipeline.launch.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 8 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /marm_gazebo/launch/arm_gazebo_controller.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 15 | 16 | 17 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /marm_planning/src/test_custom.cpp: -------------------------------------------------------------------------------- 1 | // 包含miveit的API头文件 2 | #include 3 | 4 | int main(int argc, char **argv) 5 | { 6 | ros::init(argc, argv, "moveit_custom_demo"); 7 | ros::NodeHandle node_handle; 8 | ros::AsyncSpinner spinner(1); 9 | spinner.start(); 10 | 11 | moveit::planning_interface::MoveGroupInterface group("arm"); 12 | 13 | // 设置机器人终端的目标位置 14 | geometry_msgs::Pose target_pose1; 15 | target_pose1.orientation.w = 0.726282; 16 | target_pose1.orientation.x= 4.04423e-07; 17 | target_pose1.orientation.y = -0.687396; 18 | target_pose1.orientation.z = 4.81813e-07; 19 | 20 | target_pose1.position.x = 0.03; 21 | target_pose1.position.y = 0.2; 22 | target_pose1.position.z = 0.5; 23 | group.setPoseTarget(target_pose1); 24 | 25 | // 进行运动规划,计算机器人移动到目标的运动轨迹,此时只是计算出轨迹,并不会控制机械臂运动 26 | moveit::planning_interface::MoveGroupInterface::Plan my_plan; 27 | moveit::planning_interface::MoveItErrorCode success = group.plan(my_plan); 28 | 29 | ROS_INFO("Visualizing plan 1 (pose goal) %s",success?"":"FAILED"); 30 | 31 | //让机械臂按照规划的轨迹开始运动。 32 | if(success) 33 | group.execute(my_plan); 34 | 35 | ros::shutdown(); 36 | return 0; 37 | } 38 | -------------------------------------------------------------------------------- /marm_gazebo/launch/arm_world.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /marm_gazebo/config/arm_gazebo_control.yaml: -------------------------------------------------------------------------------- 1 | arm: 2 | # Publish all joint states ----------------------------------- 3 | joint_state_controller: 4 | type: joint_state_controller/JointStateController 5 | publish_rate: 50 6 | 7 | # Position Controllers --------------------------------------- 8 | joint1_position_controller: 9 | type: position_controllers/JointPositionController 10 | joint: joint1 11 | pid: {p: 100.0, i: 0.01, d: 10.0} 12 | joint2_position_controller: 13 | type: position_controllers/JointPositionController 14 | joint: joint2 15 | pid: {p: 100.0, i: 0.01, d: 10.0} 16 | joint3_position_controller: 17 | type: position_controllers/JointPositionController 18 | joint: joint3 19 | pid: {p: 100.0, i: 0.01, d: 10.0} 20 | joint4_position_controller: 21 | type: position_controllers/JointPositionController 22 | joint: joint4 23 | pid: {p: 100.0, i: 0.01, d: 10.0} 24 | joint5_position_controller: 25 | type: position_controllers/JointPositionController 26 | joint: joint5 27 | pid: {p: 100.0, i: 0.01, d: 10.0} 28 | joint6_position_controller: 29 | type: position_controllers/JointPositionController 30 | joint: joint6 31 | pid: {p: 100.0, i: 0.01, d: 10.0} 32 | 33 | -------------------------------------------------------------------------------- /marm_description/launch/fake_arm.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | model: singlesided 18 | invert: false 19 | center: 0.0 20 | pad_width: 0.004 21 | finger_length: 0.08 22 | min_opening: 0.0 23 | max_opening: 0.06 24 | joint: finger_joint1 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /marm_moveit_config/launch/planning_context.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /marm_moveit_config/config/joint_limits.yaml: -------------------------------------------------------------------------------- 1 | # joint_limits.yaml allows the dynamics properties specified in the URDF to be overwritten or augmented as needed 2 | # Specific joint properties can be changed with the keys [max_position, min_position, max_velocity, max_acceleration] 3 | # Joint limits can be turned off with [has_velocity_limits, has_acceleration_limits] 4 | joint_limits: 5 | finger_joint1: 6 | has_velocity_limits: true 7 | max_velocity: 1 8 | has_acceleration_limits: false 9 | max_acceleration: 0 10 | joint1: 11 | has_velocity_limits: true 12 | max_velocity: 1 13 | has_acceleration_limits: false 14 | max_acceleration: 0 15 | joint2: 16 | has_velocity_limits: true 17 | max_velocity: 1 18 | has_acceleration_limits: false 19 | max_acceleration: 0 20 | joint3: 21 | has_velocity_limits: true 22 | max_velocity: 1 23 | has_acceleration_limits: false 24 | max_acceleration: 0 25 | joint4: 26 | has_velocity_limits: true 27 | max_velocity: 1 28 | has_acceleration_limits: false 29 | max_acceleration: 0 30 | joint5: 31 | has_velocity_limits: true 32 | max_velocity: 1 33 | has_acceleration_limits: false 34 | max_acceleration: 0 35 | joint6: 36 | has_velocity_limits: true 37 | max_velocity: 1 38 | has_acceleration_limits: false 39 | max_acceleration: 0 -------------------------------------------------------------------------------- /marm_planning/launch/arm_planning.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | model: singlesided 18 | invert: false 19 | center: 0.0 20 | pad_width: 0.004 21 | finger_length: 0.08 22 | min_opening: 0.0 23 | max_opening: 0.06 24 | joint: finger_joint1 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /marm_planning/launch/arm_planning_with_trail.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | model: singlesided 18 | invert: false 19 | center: 0.0 20 | pad_width: 0.004 21 | finger_length: 0.08 22 | min_opening: 0.0 23 | max_opening: 0.06 24 | joint: finger_joint1 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /marm_planning/src/test_cartesian_path.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | int main(int argc, char **argv) 5 | { 6 | ros::init(argc, argv, "cartesian_path_demo", ros::init_options::AnonymousName); 7 | 8 | // 创建一个异步的自旋线程(spinning thread) 9 | ros::AsyncSpinner spinner(1); 10 | spinner.start(); 11 | 12 | moveit::planning_interface::MoveGroupInterface move_group("arm"); 13 | 14 | // 设置一个目标位置(路点) 15 | geometry_msgs::Pose target_pose; 16 | target_pose.orientation.w = 0.726282; 17 | target_pose.orientation.x = 4.04423e-07; 18 | target_pose.orientation.y = -0.687396; 19 | target_pose.orientation.z = 4.81813e-07; 20 | target_pose.position.x = 0.03; 21 | target_pose.position.y = 0.2; 22 | target_pose.position.z = 0.5; 23 | std::vector waypoints; 24 | waypoints.push_back(target_pose); 25 | 26 | // 笛卡尔空间下的路径规划 27 | moveit_msgs::RobotTrajectory trajectory; 28 | const double jump_threshold = 0.0; 29 | const double eef_step = 0.01; 30 | double fraction = move_group.computeCartesianPath(waypoints, eef_step, jump_threshold, trajectory); 31 | 32 | // 生成机械臂的运动规划数据 33 | moveit::planning_interface::MoveGroupInterface::Plan plan; 34 | plan.trajectory_ = trajectory; 35 | 36 | // 执行运动 37 | move_group.execute(plan); 38 | 39 | ros::shutdown(); 40 | return 0; 41 | } 42 | -------------------------------------------------------------------------------- /marm_moveit_config/launch/trajectory_execution.launch.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /marm_moveit_config/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | marm_moveit_config 4 | 0.3.0 5 | 6 | An automatically generated package with all the configuration and launch files for using the arm with the MoveIt! Motion Planning Framework 7 | 8 | Hu Chunxu 9 | Hu Chunxu 10 | 11 | BSD 12 | 13 | http://moveit.ros.org/ 14 | https://github.com/ros-planning/moveit/issues 15 | https://github.com/ros-planning/moveit 16 | 17 | catkin 18 | 19 | moveit_ros_move_group 20 | moveit_kinematics 21 | moveit_planners_ompl 22 | moveit_ros_visualization 23 | joint_state_publisher 24 | robot_state_publisher 25 | xacro 26 | 27 | 28 | marm_description 29 | marm_description 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /marm_planning/scripts/moveit_fk_demo.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | 4 | import rospy, sys 5 | import moveit_commander 6 | from control_msgs.msg import GripperCommand 7 | 8 | class MoveItFkDemo: 9 | def __init__(self): 10 | # 初始化move_group的API 11 | moveit_commander.roscpp_initialize(sys.argv) 12 | 13 | # 初始化ROS节点 14 | rospy.init_node('moveit_fk_demo', anonymous=True) 15 | 16 | # 初始化需要使用move group控制的机械臂中的arm group 17 | arm = moveit_commander.MoveGroupCommander('arm') 18 | 19 | # 初始化需要使用move group控制的机械臂中的gripper group 20 | gripper = moveit_commander.MoveGroupCommander('gripper') 21 | 22 | # 设置机械臂和夹爪的允许误差值 23 | arm.set_goal_joint_tolerance(0.001) 24 | gripper.set_goal_joint_tolerance(0.001) 25 | 26 | # 控制机械臂先回到初始化位置 27 | arm.set_named_target('home') 28 | arm.go() 29 | rospy.sleep(2) 30 | 31 | # 设置夹爪的目标位置,并控制夹爪运动 32 | gripper.set_joint_value_target([0.01]) 33 | gripper.go() 34 | rospy.sleep(1) 35 | 36 | # 设置机械臂的目标位置,使用六轴的位置数据进行描述(单位:弧度) 37 | joint_positions = [-0.0867, -1.274, 0.02832, 0.0820, -1.273, -0.003] 38 | arm.set_joint_value_target(joint_positions) 39 | 40 | # 控制机械臂完成运动 41 | arm.go() 42 | rospy.sleep(1) 43 | 44 | # 关闭并退出moveit 45 | moveit_commander.roscpp_shutdown() 46 | moveit_commander.os._exit(0) 47 | 48 | if __name__ == "__main__": 49 | try: 50 | MoveItFkDemo() 51 | except rospy.ROSInterruptException: 52 | pass 53 | -------------------------------------------------------------------------------- /marm_planning/src/add_collision_objct.cpp: -------------------------------------------------------------------------------- 1 | // 包含API的头文件 2 | #include 3 | #include 4 | #include 5 | #include 6 | 7 | int main(int argc, char **argv) 8 | { 9 | ros::init(argc, argv, "add_collision_objct"); 10 | ros::NodeHandle nh; 11 | ros::AsyncSpinner spin(1); 12 | spin.start(); 13 | 14 | // 创建运动规划的情景,等待创建完成 15 | moveit::planning_interface::PlanningSceneInterface current_scene; 16 | sleep(5.0); 17 | 18 | // 声明一个障碍物的实例,并且为其设置一个id,方便对其进行操作,该实例会发布到当前的情景实例中 19 | moveit_msgs::CollisionObject cylinder; 20 | cylinder.id = "arm_cylinder"; 21 | 22 | // 设置障碍物的外形、尺寸等属性 23 | shape_msgs::SolidPrimitive primitive; 24 | primitive.type = primitive.CYLINDER; 25 | primitive.dimensions.resize(3); 26 | primitive.dimensions[0] = 0.6; 27 | primitive.dimensions[1] = 0.2; 28 | 29 | // 设置障碍物的位置 30 | geometry_msgs::Pose pose; 31 | pose.orientation.w = 1.0; 32 | pose.position.x = 0.0; 33 | pose.position.y = -0.4; 34 | pose.position.z = 0.4; 35 | 36 | // 将障碍物的属性、位置加入到障碍物的实例中 37 | cylinder.primitives.push_back(primitive); 38 | cylinder.primitive_poses.push_back(pose); 39 | cylinder.operation = cylinder.ADD; 40 | 41 | // 创建一个障碍物的列表,把之前创建的障碍物实例加入其中 42 | std::vector collision_objects; 43 | collision_objects.push_back(cylinder); 44 | 45 | // 所有障碍物加入列表后(这里只有一个障碍物),再把障碍物加入到当前的情景中,如果要删除障碍物,使用removeCollisionObjects(collision_objects) 46 | current_scene.addCollisionObjects(collision_objects); 47 | 48 | ros::shutdown(); 49 | 50 | return 0; 51 | } 52 | -------------------------------------------------------------------------------- /marm_description/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | marm_description 4 | 0.0.0 5 | The marm_description package 6 | 7 | 8 | 9 | 10 | hcx 11 | 12 | 13 | 14 | 15 | 16 | TODO 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | catkin 43 | roscpp 44 | tf 45 | urdf 46 | xacro 47 | roscpp 48 | tf 49 | urdf 50 | xacro 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /marm_gazebo/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | marm_gazebo 4 | 0.0.0 5 | The marm_gazebo package 6 | 7 | 8 | 9 | 10 | hcx 11 | 12 | 13 | 14 | 15 | 16 | TODO 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | catkin 43 | gazebo_msgs 44 | gazebo_plugins 45 | gazebo_ros 46 | gazebo_ros_control 47 | gazebo_msgs 48 | gazebo_plugins 49 | gazebo_ros 50 | gazebo_ros_control 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /marm_planning/scripts/trajectory_demo.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | 4 | import rospy 5 | import actionlib 6 | 7 | from control_msgs.msg import FollowJointTrajectoryAction, FollowJointTrajectoryGoal 8 | from trajectory_msgs.msg import JointTrajectory, JointTrajectoryPoint 9 | 10 | class TrajectoryDemo(): 11 | def __init__(self): 12 | rospy.init_node('trajectory_demo') 13 | 14 | # 是否需要回到初始化的位置 15 | reset = rospy.get_param('~reset', False) 16 | 17 | # 机械臂中joint的命名 18 | arm_joints = ['joint1', 19 | 'joint2', 20 | 'joint3', 21 | 'joint4', 22 | 'joint5', 23 | 'joint6'] 24 | 25 | if reset: 26 | # 如果需要回到初始化位置,需要将目标位置设置为初始化位置的六轴角度 27 | arm_goal = [0, 0, 0, 0, 0, 0] 28 | 29 | else: 30 | # 如果不需要回初始化位置,则设置目标位置的六轴角度 31 | arm_goal = [-0.3, -1.0, 0.5, 0.8, 1.0, -0.7] 32 | 33 | # 连接机械臂轨迹规划的trajectory action server 34 | rospy.loginfo('Waiting for arm trajectory controller...') 35 | arm_client = actionlib.SimpleActionClient('arm_controller/follow_joint_trajectory', FollowJointTrajectoryAction) 36 | arm_client.wait_for_server() 37 | rospy.loginfo('...connected.') 38 | 39 | # 使用设置的目标位置创建一条轨迹数据 40 | arm_trajectory = JointTrajectory() 41 | arm_trajectory.joint_names = arm_joints 42 | arm_trajectory.points.append(JointTrajectoryPoint()) 43 | arm_trajectory.points[0].positions = arm_goal 44 | arm_trajectory.points[0].velocities = [0.0 for i in arm_joints] 45 | arm_trajectory.points[0].accelerations = [0.0 for i in arm_joints] 46 | arm_trajectory.points[0].time_from_start = rospy.Duration(3.0) 47 | 48 | rospy.loginfo('Moving the arm to goal position...') 49 | 50 | # 创建一个轨迹目标的空对象 51 | arm_goal = FollowJointTrajectoryGoal() 52 | 53 | # 将之前创建好的轨迹数据加入轨迹目标对象中 54 | arm_goal.trajectory = arm_trajectory 55 | 56 | # 设置执行时间的允许误差值 57 | arm_goal.goal_time_tolerance = rospy.Duration(0.0) 58 | 59 | # 将轨迹目标发送到action server进行处理,实现机械臂的运动控制 60 | arm_client.send_goal(arm_goal) 61 | 62 | # 等待机械臂运动结束 63 | arm_client.wait_for_result(rospy.Duration(5.0)) 64 | 65 | rospy.loginfo('...done') 66 | 67 | if __name__ == '__main__': 68 | try: 69 | TrajectoryDemo() 70 | except rospy.ROSInterruptException: 71 | pass 72 | 73 | -------------------------------------------------------------------------------- /marm_moveit_config/launch/demo.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | [/move_group/fake_controller_joint_states] 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | -------------------------------------------------------------------------------- /marm_planning/scripts/moveit_ik_demo.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | 4 | import rospy, sys 5 | import moveit_commander 6 | from moveit_msgs.msg import RobotTrajectory 7 | from trajectory_msgs.msg import JointTrajectoryPoint 8 | 9 | from geometry_msgs.msg import PoseStamped, Pose 10 | from tf.transformations import euler_from_quaternion, quaternion_from_euler 11 | 12 | class MoveItIkDemo: 13 | def __init__(self): 14 | # 初始化move_group的API 15 | moveit_commander.roscpp_initialize(sys.argv) 16 | 17 | # 初始化ROS节点 18 | rospy.init_node('moveit_ik_demo') 19 | 20 | # 初始化需要使用move group控制的机械臂中的arm group 21 | arm = moveit_commander.MoveGroupCommander('arm') 22 | 23 | # 获取终端link的名称 24 | end_effector_link = arm.get_end_effector_link() 25 | 26 | # 设置目标位置所使用的参考坐标系 27 | reference_frame = 'base_link' 28 | arm.set_pose_reference_frame(reference_frame) 29 | 30 | # 当运动规划失败后,允许重新规划 31 | arm.allow_replanning(True) 32 | 33 | # 设置位置(单位:米)和姿态(单位:弧度)的允许误差 34 | arm.set_goal_position_tolerance(0.01) 35 | arm.set_goal_orientation_tolerance(0.05) 36 | 37 | # 控制机械臂先回到初始化位置 38 | arm.set_named_target('home') 39 | arm.go() 40 | rospy.sleep(2) 41 | 42 | # 设置机械臂工作空间中的目标位姿,位置使用x、y、z坐标描述, 43 | # 姿态使用四元数描述,基于base_link坐标系 44 | target_pose = PoseStamped() 45 | target_pose.header.frame_id = reference_frame 46 | target_pose.header.stamp = rospy.Time.now() 47 | target_pose.pose.position.x = 0.191995 48 | target_pose.pose.position.y = 0.213868 49 | target_pose.pose.position.z = 0.520436 50 | target_pose.pose.orientation.x = 0.911822 51 | target_pose.pose.orientation.y = -0.0269758 52 | target_pose.pose.orientation.z = 0.285694 53 | target_pose.pose.orientation.w = -0.293653 54 | 55 | # 设置机器臂当前的状态作为运动初始状态 56 | arm.set_start_state_to_current_state() 57 | 58 | # 设置机械臂终端运动的目标位姿 59 | arm.set_pose_target(target_pose, end_effector_link) 60 | 61 | # 规划运动路径 62 | traj = arm.plan() 63 | 64 | # 按照规划的运动路径控制机械臂运动 65 | arm.execute(traj) 66 | rospy.sleep(1) 67 | 68 | # 控制机械臂终端向右移动5cm 69 | arm.shift_pose_target(1, -0.05, end_effector_link) 70 | arm.go() 71 | rospy.sleep(1) 72 | 73 | # 控制机械臂终端反向旋转90度 74 | arm.shift_pose_target(3, -1.57, end_effector_link) 75 | arm.go() 76 | rospy.sleep(1) 77 | 78 | # 控制机械臂回到初始化位置 79 | arm.set_named_target('home') 80 | arm.go() 81 | 82 | # 关闭并退出moveit 83 | moveit_commander.roscpp_shutdown() 84 | moveit_commander.os._exit(0) 85 | 86 | if __name__ == "__main__": 87 | MoveItIkDemo() 88 | 89 | 90 | 91 | -------------------------------------------------------------------------------- /marm_planning/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | marm_planning 4 | 0.0.0 5 | The marm_planning package 6 | 7 | 8 | 9 | 10 | hcx 11 | 12 | 13 | 14 | 15 | 16 | TODO 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | catkin 43 | actionlib 44 | control_msgs 45 | diagnostic_msgs 46 | geometry_msgs 47 | manipulation_msgs 48 | moveit_msgs 49 | roscpp 50 | rospy 51 | sensor_msgs 52 | shape_msgs 53 | std_msgs 54 | std_srvs 55 | tf 56 | trajectory_msgs 57 | actionlib 58 | control_msgs 59 | diagnostic_msgs 60 | geometry_msgs 61 | manipulation_msgs 62 | moveit_msgs 63 | roscpp 64 | rospy 65 | sensor_msgs 66 | shape_msgs 67 | std_msgs 68 | std_srvs 69 | tf 70 | trajectory_msgs 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | -------------------------------------------------------------------------------- /marm_moveit_config/launch/move_group.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 56 | 57 | 58 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | -------------------------------------------------------------------------------- /marm_moveit_config/config/arm.srdf: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | -------------------------------------------------------------------------------- /marm_planning/src/check_collision.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | // 包含moveit的API 3 | #include 4 | #include 5 | #include 6 | #include 7 | 8 | int main(int argc, char **argv) 9 | { 10 | ros::init (argc, argv, "check_collision"); 11 | ros::AsyncSpinner spinner(1); 12 | spinner.start(); 13 | 14 | // 加载机器人的运动学模型到情景实例中 15 | robot_model_loader::RobotModelLoader robot_model_loader("robot_description"); 16 | robot_model::RobotModelPtr kinematic_model = robot_model_loader.getModel(); 17 | planning_scene::PlanningScene planning_scene(kinematic_model); 18 | 19 | // 自身碰撞检测 20 | // 首先需要创建一个碰撞检测的请求对象和响应对象,然后调用碰撞检测的API checkSelfCollision,检测结果会放到collision_result中 21 | collision_detection::CollisionRequest collision_request; 22 | collision_detection::CollisionResult collision_result; 23 | planning_scene.checkSelfCollision(collision_request, collision_result); 24 | ROS_INFO_STREAM("1. Self collision Test: "<< (collision_result.collision ? "in" : "not in") 25 | << " self collision"); 26 | 27 | // 修改机器人的状态 28 | // 我们可以使用场景实例的getCurrentStateNonConst()获取当前机器人的状态,然后修改机器人的状态到一个随机的位置, 29 | // 清零collision_result的结果后再次检测机器人是否发生滋生碰撞 30 | robot_state::RobotState& current_state = planning_scene.getCurrentStateNonConst(); 31 | current_state.setToRandomPositions(); 32 | collision_result.clear(); 33 | planning_scene.checkSelfCollision(collision_request, collision_result); 34 | ROS_INFO_STREAM("2. Self collision Test(Change the state): "<< (collision_result.collision ? "in" : "not in")); 35 | 36 | // 我们也可以指定查询一个group是否和其他部分发生碰撞,只需要在collision_request中修改group_name属性 37 | collision_request.group_name = "arm"; 38 | current_state.setToRandomPositions(); 39 | collision_result.clear(); 40 | planning_scene.checkSelfCollision(collision_request, collision_result); 41 | ROS_INFO_STREAM("3. Self collision Test(In a group): "<< (collision_result.collision ? "in" : "not in")); 42 | 43 | // 获取碰撞关系 44 | // 首先,我们先让机器人发生自身碰撞 45 | std::vector joint_values; 46 | const robot_model::JointModelGroup* joint_model_group = 47 | current_state.getJointModelGroup("arm"); 48 | current_state.copyJointGroupPositions(joint_model_group, joint_values); 49 | joint_values[2] = 1.57; //原来的代码这里是joint_values[0],并不会导致碰撞,我改成了joint_values[2],在该状态下机器人会发生碰撞 50 | current_state.setJointGroupPositions(joint_model_group, joint_values); 51 | ROS_INFO_STREAM("4. Collision points " 52 | << (current_state.satisfiesBounds(joint_model_group) ? "valid" : "not valid")); 53 | 54 | // 然后我们再来检测机器人是否发生了自身碰撞,已经发生碰撞的是哪两个部分 55 | collision_request.contacts = true; 56 | collision_request.max_contacts = 1000; 57 | collision_result.clear(); 58 | planning_scene.checkSelfCollision(collision_request, collision_result); 59 | ROS_INFO_STREAM("5. Self collision Test: "<< (collision_result.collision ? "in" : "not in") 60 | << " self collision"); 61 | 62 | collision_detection::CollisionResult::ContactMap::const_iterator it; 63 | for(it = collision_result.contacts.begin(); 64 | it != collision_result.contacts.end(); 65 | ++it) 66 | { 67 | ROS_INFO("6 . Contact between: %s and %s", 68 | it->first.first.c_str(), 69 | it->first.second.c_str()); 70 | } 71 | 72 | // 修改允许碰撞矩阵(Allowed Collision Matrix,acm) 73 | // 我们可以通过修改acm来指定机器人是否检测自身碰撞和与障碍物的碰撞,在不检测的状态下,即使发生碰撞,检测结果也会显示未发生碰撞 74 | collision_detection::AllowedCollisionMatrix acm = planning_scene.getAllowedCollisionMatrix(); 75 | robot_state::RobotState copied_state = planning_scene.getCurrentState(); 76 | collision_detection::CollisionResult::ContactMap::const_iterator it2; 77 | for(it2 = collision_result.contacts.begin(); 78 | it2 != collision_result.contacts.end(); 79 | ++it2) 80 | { 81 | acm.setEntry(it2->first.first, it2->first.second, true); 82 | } 83 | collision_result.clear(); 84 | planning_scene.checkSelfCollision(collision_request, collision_result, copied_state, acm); 85 | 86 | ROS_INFO_STREAM("6. Self collision Test after modified ACM: "<< (collision_result.collision ? "in" : "not in") 87 | << " self collision"); 88 | 89 | // 完整的碰撞检测 90 | // 同时检测自身碰撞和与障碍物的碰撞 91 | collision_result.clear(); 92 | planning_scene.checkCollision(collision_request, collision_result, copied_state, acm); 93 | 94 | ROS_INFO_STREAM("6. Full collision Test: "<< (collision_result.collision ? "in" : "not in") 95 | << " collision"); 96 | 97 | ros::shutdown(); 98 | return 0; 99 | } 100 | -------------------------------------------------------------------------------- /marm_planning/scripts/moveit_cartesian_demo.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | 4 | import rospy, sys 5 | import moveit_commander 6 | from moveit_commander import MoveGroupCommander 7 | from geometry_msgs.msg import Pose 8 | from copy import deepcopy 9 | 10 | class MoveItCartesianDemo: 11 | def __init__(self): 12 | # 初始化move_group的API 13 | moveit_commander.roscpp_initialize(sys.argv) 14 | 15 | # 初始化ROS节点 16 | rospy.init_node('moveit_cartesian_demo', anonymous=True) 17 | 18 | # 是否需要使用笛卡尔空间的运动规划 19 | cartesian = rospy.get_param('~cartesian', True) 20 | 21 | # 初始化需要使用move group控制的机械臂中的arm group 22 | arm = MoveGroupCommander('arm') 23 | 24 | # 当运动规划失败后,允许重新规划 25 | arm.allow_replanning(True) 26 | 27 | # 设置目标位置所使用的参考坐标系 28 | arm.set_pose_reference_frame('base_link') 29 | 30 | # 设置位置(单位:米)和姿态(单位:弧度)的允许误差 31 | arm.set_goal_position_tolerance(0.01) 32 | arm.set_goal_orientation_tolerance(0.1) 33 | 34 | # 获取终端link的名称 35 | end_effector_link = arm.get_end_effector_link() 36 | 37 | # 控制机械臂运动到之前设置的“forward”姿态 38 | arm.set_named_target('forward') 39 | arm.go() 40 | 41 | # 获取当前位姿数据最为机械臂运动的起始位姿 42 | start_pose = arm.get_current_pose(end_effector_link).pose 43 | 44 | # 初始化路点列表 45 | waypoints = [] 46 | 47 | # 将初始位姿加入路点列表 48 | if cartesian: 49 | waypoints.append(start_pose) 50 | 51 | # 设置第二个路点数据,并加入路点列表 52 | # 第二个路点需要向后运动0.2米,向右运动0.2米 53 | wpose = deepcopy(start_pose) 54 | wpose.position.x -= 0.2 55 | wpose.position.y -= 0.2 56 | 57 | if cartesian: 58 | waypoints.append(deepcopy(wpose)) 59 | else: 60 | arm.set_pose_target(wpose) 61 | arm.go() 62 | rospy.sleep(1) 63 | 64 | # 设置第三个路点数据,并加入路点列表 65 | wpose.position.x += 0.05 66 | wpose.position.y += 0.15 67 | wpose.position.z -= 0.15 68 | 69 | if cartesian: 70 | waypoints.append(deepcopy(wpose)) 71 | else: 72 | arm.set_pose_target(wpose) 73 | arm.go() 74 | rospy.sleep(1) 75 | 76 | # 设置第四个路点数据,回到初始位置,并加入路点列表 77 | if cartesian: 78 | waypoints.append(deepcopy(start_pose)) 79 | else: 80 | arm.set_pose_target(start_pose) 81 | arm.go() 82 | rospy.sleep(1) 83 | 84 | if cartesian: 85 | fraction = 0.0 #路径规划覆盖率 86 | maxtries = 100 #最大尝试规划次数 87 | attempts = 0 #已经尝试规划次数 88 | 89 | # 设置机器臂当前的状态作为运动初始状态 90 | arm.set_start_state_to_current_state() 91 | 92 | # 尝试规划一条笛卡尔空间下的路径,依次通过所有路点 93 | while fraction < 1.0 and attempts < maxtries: 94 | (plan, fraction) = arm.compute_cartesian_path ( 95 | waypoints, # waypoint poses,路点列表 96 | 0.01, # eef_step,终端步进值 97 | 0.0, # jump_threshold,跳跃阈值 98 | True) # avoid_collisions,避障规划 99 | 100 | # 尝试次数累加 101 | attempts += 1 102 | 103 | # 打印运动规划进程 104 | if attempts % 10 == 0: 105 | rospy.loginfo("Still trying after " + str(attempts) + " attempts...") 106 | 107 | # 如果路径规划成功(覆盖率100%),则开始控制机械臂运动 108 | if fraction == 1.0: 109 | rospy.loginfo("Path computed successfully. Moving the arm.") 110 | arm.execute(plan) 111 | rospy.loginfo("Path execution complete.") 112 | # 如果路径规划失败,则打印失败信息 113 | else: 114 | rospy.loginfo("Path planning failed with only " + str(fraction) + " success after " + str(maxtries) + " attempts.") 115 | 116 | # 控制机械臂回到初始化位置 117 | arm.set_named_target('home') 118 | arm.go() 119 | rospy.sleep(1) 120 | 121 | # 关闭并退出moveit 122 | moveit_commander.roscpp_shutdown() 123 | moveit_commander.os._exit(0) 124 | 125 | if __name__ == "__main__": 126 | try: 127 | MoveItCartesianDemo() 128 | except rospy.ROSInterruptException: 129 | pass 130 | -------------------------------------------------------------------------------- /marm_planning/scripts/moveit_obstacles_demo.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | 4 | import rospy, sys 5 | import moveit_commander 6 | from moveit_commander import MoveGroupCommander, PlanningSceneInterface 7 | from moveit_msgs.msg import PlanningScene, ObjectColor 8 | from geometry_msgs.msg import PoseStamped, Pose 9 | 10 | class MoveItObstaclesDemo: 11 | def __init__(self): 12 | # 初始化move_group的API 13 | moveit_commander.roscpp_initialize(sys.argv) 14 | 15 | # 初始化ROS节点 16 | rospy.init_node('moveit_obstacles_demo') 17 | 18 | # 初始化场景对象 19 | scene = PlanningSceneInterface() 20 | 21 | # 创建一个发布场景变化信息的发布者 22 | self.scene_pub = rospy.Publisher('planning_scene', PlanningScene, queue_size=5) 23 | 24 | # 创建一个存储物体颜色的字典对象 25 | self.colors = dict() 26 | 27 | # 等待场景准备就绪 28 | rospy.sleep(1) 29 | 30 | # 初始化需要使用move group控制的机械臂中的arm group 31 | arm = MoveGroupCommander('arm') 32 | 33 | # 获取终端link的名称 34 | end_effector_link = arm.get_end_effector_link() 35 | 36 | # 设置位置(单位:米)和姿态(单位:弧度)的允许误差 37 | arm.set_goal_position_tolerance(0.01) 38 | arm.set_goal_orientation_tolerance(0.05) 39 | 40 | # 当运动规划失败后,允许重新规划 41 | arm.allow_replanning(True) 42 | 43 | # 设置目标位置所使用的参考坐标系 44 | reference_frame = 'base_link' 45 | arm.set_pose_reference_frame(reference_frame) 46 | 47 | # 设置每次运动规划的时间限制:5s 48 | arm.set_planning_time(5) 49 | 50 | # 设置场景物体的名称 51 | table_id = 'table' 52 | box1_id = 'box1' 53 | box2_id = 'box2' 54 | 55 | # 移除场景中之前运行残留的物体 56 | scene.remove_world_object(table_id) 57 | scene.remove_world_object(box1_id) 58 | scene.remove_world_object(box2_id) 59 | rospy.sleep(1) 60 | 61 | # 控制机械臂先回到初始化位置 62 | arm.set_named_target('home') 63 | arm.go() 64 | rospy.sleep(2) 65 | 66 | # 设置桌面的高度 67 | table_ground = 0.25 68 | 69 | # 设置table、box1和box2的三维尺寸 70 | table_size = [0.2, 0.7, 0.01] 71 | box1_size = [0.1, 0.05, 0.05] 72 | box2_size = [0.05, 0.05, 0.15] 73 | 74 | # 将三个物体加入场景当中 75 | table_pose = PoseStamped() 76 | table_pose.header.frame_id = reference_frame 77 | table_pose.pose.position.x = 0.26 78 | table_pose.pose.position.y = 0.0 79 | table_pose.pose.position.z = table_ground + table_size[2] / 2.0 80 | table_pose.pose.orientation.w = 1.0 81 | scene.add_box(table_id, table_pose, table_size) 82 | 83 | box1_pose = PoseStamped() 84 | box1_pose.header.frame_id = reference_frame 85 | box1_pose.pose.position.x = 0.21 86 | box1_pose.pose.position.y = -0.1 87 | box1_pose.pose.position.z = table_ground + table_size[2] + box1_size[2] / 2.0 88 | box1_pose.pose.orientation.w = 1.0 89 | scene.add_box(box1_id, box1_pose, box1_size) 90 | 91 | box2_pose = PoseStamped() 92 | box2_pose.header.frame_id = reference_frame 93 | box2_pose.pose.position.x = 0.19 94 | box2_pose.pose.position.y = 0.15 95 | box2_pose.pose.position.z = table_ground + table_size[2] + box2_size[2] / 2.0 96 | box2_pose.pose.orientation.w = 1.0 97 | scene.add_box(box2_id, box2_pose, box2_size) 98 | 99 | # 将桌子设置成红色,两个box设置成橙色 100 | self.setColor(table_id, 0.8, 0, 0, 1.0) 101 | self.setColor(box1_id, 0.8, 0.4, 0, 1.0) 102 | self.setColor(box2_id, 0.8, 0.4, 0, 1.0) 103 | 104 | # 将场景中的颜色设置发布 105 | self.sendColors() 106 | 107 | # 设置机械臂的运动目标位置,位于桌面之上两个盒子之间 108 | target_pose = PoseStamped() 109 | target_pose.header.frame_id = reference_frame 110 | target_pose.pose.position.x = 0.2 111 | target_pose.pose.position.y = 0.0 112 | target_pose.pose.position.z = table_pose.pose.position.z + table_size[2] + 0.05 113 | target_pose.pose.orientation.w = 1.0 114 | 115 | # 控制机械臂运动到目标位置 116 | arm.set_pose_target(target_pose, end_effector_link) 117 | arm.go() 118 | rospy.sleep(2) 119 | 120 | # 设置机械臂的运动目标位置,进行避障规划 121 | target_pose2 = PoseStamped() 122 | target_pose2.header.frame_id = reference_frame 123 | target_pose2.pose.position.x = 0.2 124 | target_pose2.pose.position.y = -0.25 125 | target_pose2.pose.position.z = table_pose.pose.position.z + table_size[2] + 0.05 126 | target_pose2.pose.orientation.w = 1.0 127 | 128 | # 控制机械臂运动到目标位置 129 | arm.set_pose_target(target_pose2, end_effector_link) 130 | arm.go() 131 | rospy.sleep(2) 132 | 133 | # 控制机械臂回到初始化位置 134 | arm.set_named_target('home') 135 | arm.go() 136 | 137 | # 关闭并退出moveit 138 | moveit_commander.roscpp_shutdown() 139 | moveit_commander.os._exit(0) 140 | 141 | # 设置场景物体的颜色 142 | def setColor(self, name, r, g, b, a = 0.9): 143 | # 初始化moveit颜色对象 144 | color = ObjectColor() 145 | 146 | # 设置颜色值 147 | color.id = name 148 | color.color.r = r 149 | color.color.g = g 150 | color.color.b = b 151 | color.color.a = a 152 | 153 | # 更新颜色字典 154 | self.colors[name] = color 155 | 156 | # 将颜色设置发送并应用到moveit场景当中 157 | def sendColors(self): 158 | # 初始化规划场景对象 159 | p = PlanningScene() 160 | 161 | # 需要设置规划场景是否有差异 162 | p.is_diff = True 163 | 164 | # 从颜色字典中取出颜色设置 165 | for color in self.colors.values(): 166 | p.object_colors.append(color) 167 | 168 | # 发布场景物体颜色设置 169 | self.scene_pub.publish(p) 170 | 171 | if __name__ == "__main__": 172 | try: 173 | MoveItObstaclesDemo() 174 | except KeyboardInterrupt: 175 | raise 176 | 177 | 178 | 179 | -------------------------------------------------------------------------------- /marm_description/urdf.rviz: -------------------------------------------------------------------------------- 1 | Panels: 2 | - Class: rviz/Displays 3 | Help Height: 78 4 | Name: Displays 5 | Property Tree Widget: 6 | Expanded: 7 | - /Global Options1 8 | - /Status1 9 | Splitter Ratio: 0.5 10 | Tree Height: 503 11 | - Class: rviz/Selection 12 | Name: Selection 13 | - Class: rviz/Tool Properties 14 | Expanded: 15 | - /2D Pose Estimate1 16 | - /2D Nav Goal1 17 | - /Publish Point1 18 | Name: Tool Properties 19 | Splitter Ratio: 0.588679016 20 | - Class: rviz/Views 21 | Expanded: 22 | - /Current View1 23 | Name: Views 24 | Splitter Ratio: 0.5 25 | - Class: rviz/Time 26 | Experimental: false 27 | Name: Time 28 | SyncMode: 0 29 | SyncSource: "" 30 | Visualization Manager: 31 | Class: "" 32 | Displays: 33 | - Alpha: 0.5 34 | Cell Size: 1 35 | Class: rviz/Grid 36 | Color: 160; 160; 164 37 | Enabled: true 38 | Line Style: 39 | Line Width: 0.0299999993 40 | Value: Lines 41 | Name: Grid 42 | Normal Cell Count: 0 43 | Offset: 44 | X: 0 45 | Y: 0 46 | Z: 0 47 | Plane: XY 48 | Plane Cell Count: 10 49 | Reference Frame: 50 | Value: true 51 | - Alpha: 1 52 | Class: rviz/RobotModel 53 | Collision Enabled: false 54 | Enabled: true 55 | Links: 56 | All Links Enabled: true 57 | Expand Joint Details: false 58 | Expand Link Details: false 59 | Expand Tree: false 60 | Link Tree Style: Links in Alphabetic Order 61 | base_link: 62 | Alpha: 1 63 | Show Axes: false 64 | Show Trail: false 65 | Value: true 66 | bottom_link: 67 | Alpha: 1 68 | Show Axes: false 69 | Show Trail: false 70 | Value: true 71 | grasping_frame: 72 | Alpha: 1 73 | Show Axes: false 74 | Show Trail: false 75 | gripper_finger_link1: 76 | Alpha: 1 77 | Show Axes: false 78 | Show Trail: false 79 | Value: true 80 | gripper_finger_link2: 81 | Alpha: 1 82 | Show Axes: false 83 | Show Trail: false 84 | Value: true 85 | link1: 86 | Alpha: 1 87 | Show Axes: false 88 | Show Trail: false 89 | Value: true 90 | link2: 91 | Alpha: 1 92 | Show Axes: false 93 | Show Trail: false 94 | Value: true 95 | link3: 96 | Alpha: 1 97 | Show Axes: false 98 | Show Trail: false 99 | Value: true 100 | link4: 101 | Alpha: 1 102 | Show Axes: false 103 | Show Trail: false 104 | Value: true 105 | link5: 106 | Alpha: 1 107 | Show Axes: false 108 | Show Trail: false 109 | Value: true 110 | link6: 111 | Alpha: 1 112 | Show Axes: false 113 | Show Trail: false 114 | Value: true 115 | Name: RobotModel 116 | Robot Description: robot_description 117 | TF Prefix: "" 118 | Update Interval: 0 119 | Value: true 120 | Visual Enabled: true 121 | - Class: rviz/TF 122 | Enabled: false 123 | Frame Timeout: 15 124 | Frames: 125 | All Enabled: true 126 | Marker Scale: 1 127 | Name: TF 128 | Show Arrows: true 129 | Show Axes: true 130 | Show Names: true 131 | Tree: 132 | {} 133 | Update Interval: 0 134 | Value: false 135 | Enabled: true 136 | Global Options: 137 | Background Color: 48; 48; 48 138 | Fixed Frame: base_link 139 | Frame Rate: 30 140 | Name: root 141 | Tools: 142 | - Class: rviz/Interact 143 | Hide Inactive Objects: true 144 | - Class: rviz/MoveCamera 145 | - Class: rviz/Select 146 | - Class: rviz/FocusCamera 147 | - Class: rviz/Measure 148 | - Class: rviz/SetInitialPose 149 | Topic: /initialpose 150 | - Class: rviz/SetGoal 151 | Topic: /move_base_simple/goal 152 | - Class: rviz/PublishPoint 153 | Single click: true 154 | Topic: /clicked_point 155 | Value: true 156 | Views: 157 | Current: 158 | Class: rviz/Orbit 159 | Distance: 1.40504098 160 | Enable Stereo Rendering: 161 | Stereo Eye Separation: 0.0599999987 162 | Stereo Focal Distance: 1 163 | Swap Stereo Eyes: false 164 | Value: false 165 | Focal Point: 166 | X: -0.138732001 167 | Y: -0.0432205014 168 | Z: 0.292795986 169 | Focal Shape Fixed Size: true 170 | Focal Shape Size: 0.0500000007 171 | Name: Current View 172 | Near Clip Distance: 0.00999999978 173 | Pitch: 0.230397999 174 | Target Frame: 175 | Value: Orbit (rviz) 176 | Yaw: 0.400398016 177 | Saved: ~ 178 | Window Geometry: 179 | Displays: 180 | collapsed: false 181 | Height: 784 182 | Hide Left Dock: false 183 | Hide Right Dock: false 184 | QMainWindow State: 000000ff00000000fd00000004000000000000016a00000286fc0200000008fb0000001200530065006c0065006300740069006f006e00000001e10000009b0000006400fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c006100790073010000002800000286000000dd00fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261000000010000010f000001d9fc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a005600690065007700730000000028000001d9000000b000fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e10000019700000003000004a00000003efc0100000002fb0000000800540069006d00650100000000000004a00000030000fffffffb0000000800540069006d00650100000000000004500000000000000000000003300000028600000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000 185 | Selection: 186 | collapsed: false 187 | Time: 188 | collapsed: false 189 | Tool Properties: 190 | collapsed: false 191 | Views: 192 | collapsed: false 193 | Width: 1184 194 | X: 65 195 | Y: 24 196 | -------------------------------------------------------------------------------- /marm_description/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 2.8.3) 2 | project(marm_description) 3 | 4 | ## Compile as C++11, supported in ROS Kinetic and newer 5 | # add_compile_options(-std=c++11) 6 | 7 | ## Find catkin macros and libraries 8 | ## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz) 9 | ## is used, also find other catkin packages 10 | find_package(catkin REQUIRED COMPONENTS 11 | roscpp 12 | tf 13 | urdf 14 | xacro 15 | ) 16 | 17 | ## System dependencies are found with CMake's conventions 18 | # find_package(Boost REQUIRED COMPONENTS system) 19 | 20 | 21 | ## Uncomment this if the package has a setup.py. This macro ensures 22 | ## modules and global scripts declared therein get installed 23 | ## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html 24 | # catkin_python_setup() 25 | 26 | ################################################ 27 | ## Declare ROS messages, services and actions ## 28 | ################################################ 29 | 30 | ## To declare and build messages, services or actions from within this 31 | ## package, follow these steps: 32 | ## * Let MSG_DEP_SET be the set of packages whose message types you use in 33 | ## your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...). 34 | ## * In the file package.xml: 35 | ## * add a build_depend tag for "message_generation" 36 | ## * add a build_depend and a run_depend tag for each package in MSG_DEP_SET 37 | ## * If MSG_DEP_SET isn't empty the following dependency has been pulled in 38 | ## but can be declared for certainty nonetheless: 39 | ## * add a run_depend tag for "message_runtime" 40 | ## * In this file (CMakeLists.txt): 41 | ## * add "message_generation" and every package in MSG_DEP_SET to 42 | ## find_package(catkin REQUIRED COMPONENTS ...) 43 | ## * add "message_runtime" and every package in MSG_DEP_SET to 44 | ## catkin_package(CATKIN_DEPENDS ...) 45 | ## * uncomment the add_*_files sections below as needed 46 | ## and list every .msg/.srv/.action file to be processed 47 | ## * uncomment the generate_messages entry below 48 | ## * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...) 49 | 50 | ## Generate messages in the 'msg' folder 51 | # add_message_files( 52 | # FILES 53 | # Message1.msg 54 | # Message2.msg 55 | # ) 56 | 57 | ## Generate services in the 'srv' folder 58 | # add_service_files( 59 | # FILES 60 | # Service1.srv 61 | # Service2.srv 62 | # ) 63 | 64 | ## Generate actions in the 'action' folder 65 | # add_action_files( 66 | # FILES 67 | # Action1.action 68 | # Action2.action 69 | # ) 70 | 71 | ## Generate added messages and services with any dependencies listed here 72 | # generate_messages( 73 | # DEPENDENCIES 74 | # std_msgs # Or other packages containing msgs 75 | # ) 76 | 77 | ################################################ 78 | ## Declare ROS dynamic reconfigure parameters ## 79 | ################################################ 80 | 81 | ## To declare and build dynamic reconfigure parameters within this 82 | ## package, follow these steps: 83 | ## * In the file package.xml: 84 | ## * add a build_depend and a run_depend tag for "dynamic_reconfigure" 85 | ## * In this file (CMakeLists.txt): 86 | ## * add "dynamic_reconfigure" to 87 | ## find_package(catkin REQUIRED COMPONENTS ...) 88 | ## * uncomment the "generate_dynamic_reconfigure_options" section below 89 | ## and list every .cfg file to be processed 90 | 91 | ## Generate dynamic reconfigure parameters in the 'cfg' folder 92 | # generate_dynamic_reconfigure_options( 93 | # cfg/DynReconf1.cfg 94 | # cfg/DynReconf2.cfg 95 | # ) 96 | 97 | ################################### 98 | ## catkin specific configuration ## 99 | ################################### 100 | ## The catkin_package macro generates cmake config files for your package 101 | ## Declare things to be passed to dependent projects 102 | ## INCLUDE_DIRS: uncomment this if you package contains header files 103 | ## LIBRARIES: libraries you create in this project that dependent projects also need 104 | ## CATKIN_DEPENDS: catkin_packages dependent projects also need 105 | ## DEPENDS: system dependencies of this project that dependent projects also need 106 | catkin_package( 107 | # INCLUDE_DIRS include 108 | # LIBRARIES marm_description 109 | # CATKIN_DEPENDS roscpp tf urdf xacro 110 | # DEPENDS system_lib 111 | ) 112 | 113 | ########### 114 | ## Build ## 115 | ########### 116 | 117 | ## Specify additional locations of header files 118 | ## Your package locations should be listed before other locations 119 | include_directories( 120 | # include 121 | ${catkin_INCLUDE_DIRS} 122 | ) 123 | 124 | ## Declare a C++ library 125 | # add_library(${PROJECT_NAME} 126 | # src/${PROJECT_NAME}/marm_description.cpp 127 | # ) 128 | 129 | ## Add cmake target dependencies of the library 130 | ## as an example, code may need to be generated before libraries 131 | ## either from message generation or dynamic reconfigure 132 | # add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) 133 | 134 | ## Declare a C++ executable 135 | ## With catkin_make all packages are built within a single CMake context 136 | ## The recommended prefix ensures that target names across packages don't collide 137 | # add_executable(${PROJECT_NAME}_node src/marm_description_node.cpp) 138 | 139 | ## Rename C++ executable without prefix 140 | ## The above recommended prefix causes long target names, the following renames the 141 | ## target back to the shorter version for ease of user use 142 | ## e.g. "rosrun someones_pkg node" instead of "rosrun someones_pkg someones_pkg_node" 143 | # set_target_properties(${PROJECT_NAME}_node PROPERTIES OUTPUT_NAME node PREFIX "") 144 | 145 | ## Add cmake target dependencies of the executable 146 | ## same as for the library above 147 | # add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) 148 | 149 | ## Specify libraries to link a library or executable target against 150 | # target_link_libraries(${PROJECT_NAME}_node 151 | # ${catkin_LIBRARIES} 152 | # ) 153 | 154 | ############# 155 | ## Install ## 156 | ############# 157 | 158 | # all install targets should use catkin DESTINATION variables 159 | # See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html 160 | 161 | ## Mark executable scripts (Python etc.) for installation 162 | ## in contrast to setup.py, you can choose the destination 163 | # install(PROGRAMS 164 | # scripts/my_python_script 165 | # DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 166 | # ) 167 | 168 | ## Mark executables and/or libraries for installation 169 | # install(TARGETS ${PROJECT_NAME} ${PROJECT_NAME}_node 170 | # ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 171 | # LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 172 | # RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 173 | # ) 174 | 175 | ## Mark cpp header files for installation 176 | # install(DIRECTORY include/${PROJECT_NAME}/ 177 | # DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} 178 | # FILES_MATCHING PATTERN "*.h" 179 | # PATTERN ".svn" EXCLUDE 180 | # ) 181 | 182 | ## Mark other files for installation (e.g. launch and bag files, etc.) 183 | # install(FILES 184 | # # myfile1 185 | # # myfile2 186 | # DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} 187 | # ) 188 | 189 | ############# 190 | ## Testing ## 191 | ############# 192 | 193 | ## Add gtest based cpp test target and link libraries 194 | # catkin_add_gtest(${PROJECT_NAME}-test test/test_marm_description.cpp) 195 | # if(TARGET ${PROJECT_NAME}-test) 196 | # target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME}) 197 | # endif() 198 | 199 | ## Add folders to be run by python nosetests 200 | # catkin_add_nosetests(test) 201 | -------------------------------------------------------------------------------- /marm_gazebo/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 2.8.3) 2 | project(marm_gazebo) 3 | 4 | ## Compile as C++11, supported in ROS Kinetic and newer 5 | # add_compile_options(-std=c++11) 6 | 7 | ## Find catkin macros and libraries 8 | ## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz) 9 | ## is used, also find other catkin packages 10 | find_package(catkin REQUIRED COMPONENTS 11 | gazebo_msgs 12 | gazebo_plugins 13 | gazebo_ros 14 | gazebo_ros_control 15 | ) 16 | 17 | ## System dependencies are found with CMake's conventions 18 | # find_package(Boost REQUIRED COMPONENTS system) 19 | 20 | 21 | ## Uncomment this if the package has a setup.py. This macro ensures 22 | ## modules and global scripts declared therein get installed 23 | ## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html 24 | # catkin_python_setup() 25 | 26 | ################################################ 27 | ## Declare ROS messages, services and actions ## 28 | ################################################ 29 | 30 | ## To declare and build messages, services or actions from within this 31 | ## package, follow these steps: 32 | ## * Let MSG_DEP_SET be the set of packages whose message types you use in 33 | ## your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...). 34 | ## * In the file package.xml: 35 | ## * add a build_depend tag for "message_generation" 36 | ## * add a build_depend and a run_depend tag for each package in MSG_DEP_SET 37 | ## * If MSG_DEP_SET isn't empty the following dependency has been pulled in 38 | ## but can be declared for certainty nonetheless: 39 | ## * add a run_depend tag for "message_runtime" 40 | ## * In this file (CMakeLists.txt): 41 | ## * add "message_generation" and every package in MSG_DEP_SET to 42 | ## find_package(catkin REQUIRED COMPONENTS ...) 43 | ## * add "message_runtime" and every package in MSG_DEP_SET to 44 | ## catkin_package(CATKIN_DEPENDS ...) 45 | ## * uncomment the add_*_files sections below as needed 46 | ## and list every .msg/.srv/.action file to be processed 47 | ## * uncomment the generate_messages entry below 48 | ## * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...) 49 | 50 | ## Generate messages in the 'msg' folder 51 | # add_message_files( 52 | # FILES 53 | # Message1.msg 54 | # Message2.msg 55 | # ) 56 | 57 | ## Generate services in the 'srv' folder 58 | # add_service_files( 59 | # FILES 60 | # Service1.srv 61 | # Service2.srv 62 | # ) 63 | 64 | ## Generate actions in the 'action' folder 65 | # add_action_files( 66 | # FILES 67 | # Action1.action 68 | # Action2.action 69 | # ) 70 | 71 | ## Generate added messages and services with any dependencies listed here 72 | # generate_messages( 73 | # DEPENDENCIES 74 | # gazebo_msgs 75 | # ) 76 | 77 | ################################################ 78 | ## Declare ROS dynamic reconfigure parameters ## 79 | ################################################ 80 | 81 | ## To declare and build dynamic reconfigure parameters within this 82 | ## package, follow these steps: 83 | ## * In the file package.xml: 84 | ## * add a build_depend and a run_depend tag for "dynamic_reconfigure" 85 | ## * In this file (CMakeLists.txt): 86 | ## * add "dynamic_reconfigure" to 87 | ## find_package(catkin REQUIRED COMPONENTS ...) 88 | ## * uncomment the "generate_dynamic_reconfigure_options" section below 89 | ## and list every .cfg file to be processed 90 | 91 | ## Generate dynamic reconfigure parameters in the 'cfg' folder 92 | # generate_dynamic_reconfigure_options( 93 | # cfg/DynReconf1.cfg 94 | # cfg/DynReconf2.cfg 95 | # ) 96 | 97 | ################################### 98 | ## catkin specific configuration ## 99 | ################################### 100 | ## The catkin_package macro generates cmake config files for your package 101 | ## Declare things to be passed to dependent projects 102 | ## INCLUDE_DIRS: uncomment this if you package contains header files 103 | ## LIBRARIES: libraries you create in this project that dependent projects also need 104 | ## CATKIN_DEPENDS: catkin_packages dependent projects also need 105 | ## DEPENDS: system dependencies of this project that dependent projects also need 106 | catkin_package( 107 | # INCLUDE_DIRS include 108 | # LIBRARIES marm_gazebo 109 | # CATKIN_DEPENDS gazebo_msgs gazebo_plugins gazebo_ros gazebo_ros_control 110 | # DEPENDS system_lib 111 | ) 112 | 113 | ########### 114 | ## Build ## 115 | ########### 116 | 117 | ## Specify additional locations of header files 118 | ## Your package locations should be listed before other locations 119 | include_directories( 120 | # include 121 | ${catkin_INCLUDE_DIRS} 122 | ) 123 | 124 | ## Declare a C++ library 125 | # add_library(${PROJECT_NAME} 126 | # src/${PROJECT_NAME}/marm_gazebo.cpp 127 | # ) 128 | 129 | ## Add cmake target dependencies of the library 130 | ## as an example, code may need to be generated before libraries 131 | ## either from message generation or dynamic reconfigure 132 | # add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) 133 | 134 | ## Declare a C++ executable 135 | ## With catkin_make all packages are built within a single CMake context 136 | ## The recommended prefix ensures that target names across packages don't collide 137 | # add_executable(${PROJECT_NAME}_node src/marm_gazebo_node.cpp) 138 | 139 | ## Rename C++ executable without prefix 140 | ## The above recommended prefix causes long target names, the following renames the 141 | ## target back to the shorter version for ease of user use 142 | ## e.g. "rosrun someones_pkg node" instead of "rosrun someones_pkg someones_pkg_node" 143 | # set_target_properties(${PROJECT_NAME}_node PROPERTIES OUTPUT_NAME node PREFIX "") 144 | 145 | ## Add cmake target dependencies of the executable 146 | ## same as for the library above 147 | # add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) 148 | 149 | ## Specify libraries to link a library or executable target against 150 | # target_link_libraries(${PROJECT_NAME}_node 151 | # ${catkin_LIBRARIES} 152 | # ) 153 | 154 | ############# 155 | ## Install ## 156 | ############# 157 | 158 | # all install targets should use catkin DESTINATION variables 159 | # See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html 160 | 161 | ## Mark executable scripts (Python etc.) for installation 162 | ## in contrast to setup.py, you can choose the destination 163 | # install(PROGRAMS 164 | # scripts/my_python_script 165 | # DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 166 | # ) 167 | 168 | ## Mark executables and/or libraries for installation 169 | # install(TARGETS ${PROJECT_NAME} ${PROJECT_NAME}_node 170 | # ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 171 | # LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 172 | # RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 173 | # ) 174 | 175 | ## Mark cpp header files for installation 176 | # install(DIRECTORY include/${PROJECT_NAME}/ 177 | # DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} 178 | # FILES_MATCHING PATTERN "*.h" 179 | # PATTERN ".svn" EXCLUDE 180 | # ) 181 | 182 | ## Mark other files for installation (e.g. launch and bag files, etc.) 183 | # install(FILES 184 | # # myfile1 185 | # # myfile2 186 | # DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} 187 | # ) 188 | 189 | ############# 190 | ## Testing ## 191 | ############# 192 | 193 | ## Add gtest based cpp test target and link libraries 194 | # catkin_add_gtest(${PROJECT_NAME}-test test/test_marm_gazebo.cpp) 195 | # if(TARGET ${PROJECT_NAME}-test) 196 | # target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME}) 197 | # endif() 198 | 199 | ## Add folders to be run by python nosetests 200 | # catkin_add_nosetests(test) 201 | -------------------------------------------------------------------------------- /marm_planning/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 2.8.3) 2 | project(marm_planning) 3 | 4 | ## Compile as C++11, supported in ROS Kinetic and newer 5 | add_compile_options(-std=c++11) 6 | 7 | ## Find catkin macros and libraries 8 | ## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz) 9 | ## is used, also find other catkin packages 10 | find_package(catkin REQUIRED COMPONENTS 11 | actionlib 12 | control_msgs 13 | diagnostic_msgs 14 | geometry_msgs 15 | manipulation_msgs 16 | moveit_msgs 17 | moveit_ros_perception 18 | moveit_ros_planning_interface 19 | roscpp 20 | rospy 21 | sensor_msgs 22 | shape_msgs 23 | std_msgs 24 | std_srvs 25 | tf 26 | trajectory_msgs 27 | ) 28 | 29 | ## System dependencies are found with CMake's conventions 30 | find_package(Boost REQUIRED COMPONENTS system) 31 | 32 | 33 | ## Uncomment this if the package has a setup.py. This macro ensures 34 | ## modules and global scripts declared therein get installed 35 | ## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html 36 | # catkin_python_setup() 37 | 38 | ################################################ 39 | ## Declare ROS messages, services and actions ## 40 | ################################################ 41 | 42 | ## To declare and build messages, services or actions from within this 43 | ## package, follow these steps: 44 | ## * Let MSG_DEP_SET be the set of packages whose message types you use in 45 | ## your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...). 46 | ## * In the file package.xml: 47 | ## * add a build_depend tag for "message_generation" 48 | ## * add a build_depend and a run_depend tag for each package in MSG_DEP_SET 49 | ## * If MSG_DEP_SET isn't empty the following dependency has been pulled in 50 | ## but can be declared for certainty nonetheless: 51 | ## * add a run_depend tag for "message_runtime" 52 | ## * In this file (CMakeLists.txt): 53 | ## * add "message_generation" and every package in MSG_DEP_SET to 54 | ## find_package(catkin REQUIRED COMPONENTS ...) 55 | ## * add "message_runtime" and every package in MSG_DEP_SET to 56 | ## catkin_package(CATKIN_DEPENDS ...) 57 | ## * uncomment the add_*_files sections below as needed 58 | ## and list every .msg/.srv/.action file to be processed 59 | ## * uncomment the generate_messages entry below 60 | ## * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...) 61 | 62 | ## Generate messages in the 'msg' folder 63 | # add_message_files( 64 | # FILES 65 | # Message1.msg 66 | # Message2.msg 67 | # ) 68 | 69 | ## Generate services in the 'srv' folder 70 | # add_service_files( 71 | # FILES 72 | # Service1.srv 73 | # Service2.srv 74 | # ) 75 | 76 | ## Generate actions in the 'action' folder 77 | # add_action_files( 78 | # FILES 79 | # Action1.action 80 | # Action2.action 81 | # ) 82 | 83 | ## Generate added messages and services with any dependencies listed here 84 | # generate_messages( 85 | # DEPENDENCIES 86 | # control_msgs# diagnostic_msgs# geometry_msgs# manipulation_msgs# moveit_msgs# moveit_msgs# sensor_msgs# shape_msgs# std_msgs# trajectory_msgs 87 | # ) 88 | 89 | ################################################ 90 | ## Declare ROS dynamic reconfigure parameters ## 91 | ################################################ 92 | 93 | ## To declare and build dynamic reconfigure parameters within this 94 | ## package, follow these steps: 95 | ## * In the file package.xml: 96 | ## * add a build_depend and a run_depend tag for "dynamic_reconfigure" 97 | ## * In this file (CMakeLists.txt): 98 | ## * add "dynamic_reconfigure" to 99 | ## find_package(catkin REQUIRED COMPONENTS ...) 100 | ## * uncomment the "generate_dynamic_reconfigure_options" section below 101 | ## and list every .cfg file to be processed 102 | 103 | ## Generate dynamic reconfigure parameters in the 'cfg' folder 104 | # generate_dynamic_reconfigure_options( 105 | # cfg/DynReconf1.cfg 106 | # cfg/DynReconf2.cfg 107 | # ) 108 | 109 | ################################### 110 | ## catkin specific configuration ## 111 | ################################### 112 | ## The catkin_package macro generates cmake config files for your package 113 | ## Declare things to be passed to dependent projects 114 | ## INCLUDE_DIRS: uncomment this if you package contains header files 115 | ## LIBRARIES: libraries you create in this project that dependent projects also need 116 | ## CATKIN_DEPENDS: catkin_packages dependent projects also need 117 | ## DEPENDS: system dependencies of this project that dependent projects also need 118 | catkin_package( 119 | # INCLUDE_DIRS include 120 | # LIBRARIES marm_planning 121 | # CATKIN_DEPENDS actionlib control_msgs diagnostic_msgs geometry_msgs manipulation_msgs moveit_msgs moveit_msgs roscpp rospy sensor_msgs shape_msgs std_msgs std_srvs tf trajectory_msgs 122 | # DEPENDS system_lib 123 | ) 124 | 125 | ########### 126 | ## Build ## 127 | ########### 128 | 129 | ## Specify additional locations of header files 130 | ## Your package locations should be listed before other locations 131 | include_directories( 132 | # include 133 | ${catkin_INCLUDE_DIRS} 134 | ) 135 | 136 | ## Declare a C++ library 137 | # add_library(${PROJECT_NAME} 138 | # src/${PROJECT_NAME}/marm_planning.cpp 139 | # ) 140 | 141 | ## Add cmake target dependencies of the library 142 | ## as an example, code may need to be generated before libraries 143 | ## either from message generation or dynamic reconfigure 144 | # add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) 145 | 146 | ## Declare a C++ executable 147 | ## With catkin_make all packages are built within a single CMake context 148 | ## The recommended prefix ensures that target names across packages don't collide 149 | # add_executable(${PROJECT_NAME}_node src/marm_planning_node.cpp) 150 | 151 | ## Rename C++ executable without prefix 152 | ## The above recommended prefix causes long target names, the following renames the 153 | ## target back to the shorter version for ease of user use 154 | ## e.g. "rosrun someones_pkg node" instead of "rosrun someones_pkg someones_pkg_node" 155 | # set_target_properties(${PROJECT_NAME}_node PROPERTIES OUTPUT_NAME node PREFIX "") 156 | 157 | ## Add cmake target dependencies of the executable 158 | ## same as for the library above 159 | # add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) 160 | 161 | ## Specify libraries to link a library or executable target against 162 | # target_link_libraries(${PROJECT_NAME}_node 163 | # ${catkin_LIBRARIES} 164 | # ) 165 | 166 | add_executable(test_random_node src/test_random.cpp) 167 | target_link_libraries(test_random_node ${catkin_LIBRARIES}) 168 | 169 | add_executable(test_custom_node src/test_custom.cpp) 170 | target_link_libraries(test_custom_node ${catkin_LIBRARIES}) 171 | 172 | add_executable(add_collision_objct_node src/add_collision_objct.cpp) 173 | target_link_libraries(add_collision_objct_node ${catkin_LIBRARIES}) 174 | 175 | add_executable(remove_collision_objct_node src/remove_collision_objct.cpp) 176 | target_link_libraries(remove_collision_objct_node ${catkin_LIBRARIES}) 177 | 178 | add_executable(check_collision_node src/check_collision.cpp) 179 | target_link_libraries(check_collision_node ${catkin_LIBRARIES}) 180 | 181 | add_executable(test_cartesian_path_node src/test_cartesian_path.cpp) 182 | target_link_libraries(test_cartesian_path_node ${catkin_LIBRARIES}) 183 | 184 | ############# 185 | ## Install ## 186 | ############# 187 | 188 | # all install targets should use catkin DESTINATION variables 189 | # See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html 190 | 191 | ## Mark executable scripts (Python etc.) for installation 192 | ## in contrast to setup.py, you can choose the destination 193 | # install(PROGRAMS 194 | # scripts/my_python_script 195 | # DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 196 | # ) 197 | 198 | ## Mark executables and/or libraries for installation 199 | # install(TARGETS ${PROJECT_NAME} ${PROJECT_NAME}_node 200 | # ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 201 | # LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 202 | # RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 203 | # ) 204 | 205 | ## Mark cpp header files for installation 206 | # install(DIRECTORY include/${PROJECT_NAME}/ 207 | # DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} 208 | # FILES_MATCHING PATTERN "*.h" 209 | # PATTERN ".svn" EXCLUDE 210 | # ) 211 | 212 | ## Mark other files for installation (e.g. launch and bag files, etc.) 213 | # install(FILES 214 | # # myfile1 215 | # # myfile2 216 | # DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} 217 | # ) 218 | 219 | ############# 220 | ## Testing ## 221 | ############# 222 | 223 | ## Add gtest based cpp test target and link libraries 224 | # catkin_add_gtest(${PROJECT_NAME}-test test/test_marm_planning.cpp) 225 | # if(TARGET ${PROJECT_NAME}-test) 226 | # target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME}) 227 | # endif() 228 | 229 | ## Add folders to be run by python nosetests 230 | # catkin_add_nosetests(test) 231 | -------------------------------------------------------------------------------- /marm_moveit_config/config/ompl_planning.yaml: -------------------------------------------------------------------------------- 1 | planner_configs: 2 | SBLkConfigDefault: 3 | type: geometric::SBL 4 | range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0, set on setup() 5 | ESTkConfigDefault: 6 | type: geometric::EST 7 | range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0 setup() 8 | goal_bias: 0.05 # When close to goal select goal, with this probability. default: 0.05 9 | LBKPIECEkConfigDefault: 10 | type: geometric::LBKPIECE 11 | range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0, set on setup() 12 | border_fraction: 0.9 # Fraction of time focused on boarder default: 0.9 13 | min_valid_path_fraction: 0.5 # Accept partially valid moves above fraction. default: 0.5 14 | BKPIECEkConfigDefault: 15 | type: geometric::BKPIECE 16 | range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0, set on setup() 17 | border_fraction: 0.9 # Fraction of time focused on boarder default: 0.9 18 | failed_expansion_score_factor: 0.5 # When extending motion fails, scale score by factor. default: 0.5 19 | min_valid_path_fraction: 0.5 # Accept partially valid moves above fraction. default: 0.5 20 | KPIECEkConfigDefault: 21 | type: geometric::KPIECE 22 | range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0, set on setup() 23 | goal_bias: 0.05 # When close to goal select goal, with this probability. default: 0.05 24 | border_fraction: 0.9 # Fraction of time focused on boarder default: 0.9 (0.0,1.] 25 | failed_expansion_score_factor: 0.5 # When extending motion fails, scale score by factor. default: 0.5 26 | min_valid_path_fraction: 0.5 # Accept partially valid moves above fraction. default: 0.5 27 | RRTkConfigDefault: 28 | type: geometric::RRT 29 | range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0, set on setup() 30 | goal_bias: 0.05 # When close to goal select goal, with this probability? default: 0.05 31 | RRTConnectkConfigDefault: 32 | type: geometric::RRTConnect 33 | range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0, set on setup() 34 | RRTstarkConfigDefault: 35 | type: geometric::RRTstar 36 | range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0, set on setup() 37 | goal_bias: 0.05 # When close to goal select goal, with this probability? default: 0.05 38 | delay_collision_checking: 1 # Stop collision checking as soon as C-free parent found. default 1 39 | TRRTkConfigDefault: 40 | type: geometric::TRRT 41 | range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0, set on setup() 42 | goal_bias: 0.05 # When close to goal select goal, with this probability? default: 0.05 43 | max_states_failed: 10 # when to start increasing temp. default: 10 44 | temp_change_factor: 2.0 # how much to increase or decrease temp. default: 2.0 45 | min_temperature: 10e-10 # lower limit of temp change. default: 10e-10 46 | init_temperature: 10e-6 # initial temperature. default: 10e-6 47 | frountier_threshold: 0.0 # dist new state to nearest neighbor to disqualify as frontier. default: 0.0 set in setup() 48 | frountierNodeRatio: 0.1 # 1/10, or 1 nonfrontier for every 10 frontier. default: 0.1 49 | k_constant: 0.0 # value used to normalize expresssion. default: 0.0 set in setup() 50 | PRMkConfigDefault: 51 | type: geometric::PRM 52 | max_nearest_neighbors: 10 # use k nearest neighbors. default: 10 53 | PRMstarkConfigDefault: 54 | type: geometric::PRMstar 55 | FMTkConfigDefault: 56 | type: geometric::FMT 57 | num_samples: 1000 # number of states that the planner should sample. default: 1000 58 | radius_multiplier: 1.1 # multiplier used for the nearest neighbors search radius. default: 1.1 59 | nearest_k: 1 # use Knearest strategy. default: 1 60 | cache_cc: 1 # use collision checking cache. default: 1 61 | heuristics: 0 # activate cost to go heuristics. default: 0 62 | extended_fmt: 1 # activate the extended FMT*: adding new samples if planner does not finish successfully. default: 1 63 | BFMTkConfigDefault: 64 | type: geometric::BFMT 65 | num_samples: 1000 # number of states that the planner should sample. default: 1000 66 | radius_multiplier: 1.0 # multiplier used for the nearest neighbors search radius. default: 1.0 67 | nearest_k: 1 # use the Knearest strategy. default: 1 68 | balanced: 0 # exploration strategy: balanced true expands one tree every iteration. False will select the tree with lowest maximum cost to go. default: 1 69 | optimality: 1 # termination strategy: optimality true finishes when the best possible path is found. Otherwise, the algorithm will finish when the first feasible path is found. default: 1 70 | heuristics: 1 # activates cost to go heuristics. default: 1 71 | cache_cc: 1 # use the collision checking cache. default: 1 72 | extended_fmt: 1 # Activates the extended FMT*: adding new samples if planner does not finish successfully. default: 1 73 | PDSTkConfigDefault: 74 | type: geometric::PDST 75 | STRIDEkConfigDefault: 76 | type: geometric::STRIDE 77 | range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0, set on setup() 78 | goal_bias: 0.05 # When close to goal select goal, with this probability. default: 0.05 79 | use_projected_distance: 0 # whether nearest neighbors are computed based on distances in a projection of the state rather distances in the state space itself. default: 0 80 | degree: 16 # desired degree of a node in the Geometric Near-neightbor Access Tree (GNAT). default: 16 81 | max_degree: 18 # max degree of a node in the GNAT. default: 12 82 | min_degree: 12 # min degree of a node in the GNAT. default: 12 83 | max_pts_per_leaf: 6 # max points per leaf in the GNAT. default: 6 84 | estimated_dimension: 0.0 # estimated dimension of the free space. default: 0.0 85 | min_valid_path_fraction: 0.2 # Accept partially valid moves above fraction. default: 0.2 86 | BiTRRTkConfigDefault: 87 | type: geometric::BiTRRT 88 | range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0, set on setup() 89 | temp_change_factor: 0.1 # how much to increase or decrease temp. default: 0.1 90 | init_temperature: 100 # initial temperature. default: 100 91 | frountier_threshold: 0.0 # dist new state to nearest neighbor to disqualify as frontier. default: 0.0 set in setup() 92 | frountier_node_ratio: 0.1 # 1/10, or 1 nonfrontier for every 10 frontier. default: 0.1 93 | cost_threshold: 1e300 # the cost threshold. Any motion cost that is not better will not be expanded. default: inf 94 | LBTRRTkConfigDefault: 95 | type: geometric::LBTRRT 96 | range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0, set on setup() 97 | goal_bias: 0.05 # When close to goal select goal, with this probability. default: 0.05 98 | epsilon: 0.4 # optimality approximation factor. default: 0.4 99 | BiESTkConfigDefault: 100 | type: geometric::BiEST 101 | range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0, set on setup() 102 | ProjESTkConfigDefault: 103 | type: geometric::ProjEST 104 | range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0, set on setup() 105 | goal_bias: 0.05 # When close to goal select goal, with this probability. default: 0.05 106 | LazyPRMkConfigDefault: 107 | type: geometric::LazyPRM 108 | range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0, set on setup() 109 | LazyPRMstarkConfigDefault: 110 | type: geometric::LazyPRMstar 111 | SPARSkConfigDefault: 112 | type: geometric::SPARS 113 | stretch_factor: 3.0 # roadmap spanner stretch factor. multiplicative upper bound on path quality. It does not make sense to make this parameter more than 3. default: 3.0 114 | sparse_delta_fraction: 0.25 # delta fraction for connection distance. This value represents the visibility range of sparse samples. default: 0.25 115 | dense_delta_fraction: 0.001 # delta fraction for interface detection. default: 0.001 116 | max_failures: 1000 # maximum consecutive failure limit. default: 1000 117 | SPARStwokConfigDefault: 118 | type: geometric::SPARStwo 119 | stretch_factor: 3.0 # roadmap spanner stretch factor. multiplicative upper bound on path quality. It does not make sense to make this parameter more than 3. default: 3.0 120 | sparse_delta_fraction: 0.25 # delta fraction for connection distance. This value represents the visibility range of sparse samples. default: 0.25 121 | dense_delta_fraction: 0.001 # delta fraction for interface detection. default: 0.001 122 | max_failures: 5000 # maximum consecutive failure limit. default: 5000 123 | arm: 124 | planner_configs: 125 | - SBLkConfigDefault 126 | - ESTkConfigDefault 127 | - LBKPIECEkConfigDefault 128 | - BKPIECEkConfigDefault 129 | - KPIECEkConfigDefault 130 | - RRTkConfigDefault 131 | - RRTConnectkConfigDefault 132 | - RRTstarkConfigDefault 133 | - TRRTkConfigDefault 134 | - PRMkConfigDefault 135 | - PRMstarkConfigDefault 136 | - FMTkConfigDefault 137 | - BFMTkConfigDefault 138 | - PDSTkConfigDefault 139 | - STRIDEkConfigDefault 140 | - BiTRRTkConfigDefault 141 | - LBTRRTkConfigDefault 142 | - BiESTkConfigDefault 143 | - ProjESTkConfigDefault 144 | - LazyPRMkConfigDefault 145 | - LazyPRMstarkConfigDefault 146 | - SPARSkConfigDefault 147 | - SPARStwokConfigDefault 148 | projection_evaluator: joints(joint1,joint2) 149 | longest_valid_segment_fraction: 0.005 150 | gripper: 151 | planner_configs: 152 | - SBLkConfigDefault 153 | - ESTkConfigDefault 154 | - LBKPIECEkConfigDefault 155 | - BKPIECEkConfigDefault 156 | - KPIECEkConfigDefault 157 | - RRTkConfigDefault 158 | - RRTConnectkConfigDefault 159 | - RRTstarkConfigDefault 160 | - TRRTkConfigDefault 161 | - PRMkConfigDefault 162 | - PRMstarkConfigDefault 163 | - FMTkConfigDefault 164 | - BFMTkConfigDefault 165 | - PDSTkConfigDefault 166 | - STRIDEkConfigDefault 167 | - BiTRRTkConfigDefault 168 | - LBTRRTkConfigDefault 169 | - BiESTkConfigDefault 170 | - ProjESTkConfigDefault 171 | - LazyPRMkConfigDefault 172 | - LazyPRMstarkConfigDefault 173 | - SPARSkConfigDefault 174 | - SPARStwokConfigDefault -------------------------------------------------------------------------------- /marm_planning/config/arm_paths.rviz: -------------------------------------------------------------------------------- 1 | Panels: 2 | - Class: rviz/Displays 3 | Help Height: 0 4 | Name: Displays 5 | Property Tree Widget: 6 | Expanded: 7 | - /Global Options1 8 | - /MotionPlanning1/Scene Geometry1 9 | - /MotionPlanning1/Scene Robot1 10 | - /MotionPlanning1/Planning Request1 11 | - /MotionPlanning1/Planned Path1 12 | - /RobotModel1 13 | - /RobotModel1/Links1 14 | - /RobotModel1/Links1/grasping_frame1 15 | Splitter Ratio: 0.519512177 16 | Tree Height: 633 17 | - Class: rviz/Help 18 | Name: Help 19 | - Class: rviz/Views 20 | Expanded: 21 | - /Current View1 22 | Name: Views 23 | Splitter Ratio: 0.5 24 | Visualization Manager: 25 | Class: "" 26 | Displays: 27 | - Alpha: 0.5 28 | Cell Size: 1 29 | Class: rviz/Grid 30 | Color: 119; 119; 122 31 | Enabled: true 32 | Line Style: 33 | Line Width: 0.0299999993 34 | Value: Lines 35 | Name: Grid 36 | Normal Cell Count: 0 37 | Offset: 38 | X: 0 39 | Y: 0 40 | Z: 0 41 | Plane: XY 42 | Plane Cell Count: 10 43 | Reference Frame: 44 | Value: true 45 | - Class: moveit_rviz_plugin/MotionPlanning 46 | Enabled: true 47 | Move Group Namespace: "" 48 | MoveIt_Goal_Tolerance: 0 49 | MoveIt_Planning_Attempts: 10 50 | MoveIt_Planning_Time: 5 51 | MoveIt_Use_Constraint_Aware_IK: true 52 | MoveIt_Warehouse_Host: 127.0.0.1 53 | MoveIt_Warehouse_Port: 33829 54 | MoveIt_Workspace: 55 | Center: 56 | X: 0 57 | Y: 0 58 | Z: 0 59 | Size: 60 | X: 2 61 | Y: 2 62 | Z: 2 63 | Name: MotionPlanning 64 | Planned Path: 65 | Color Enabled: false 66 | Interrupt Display: false 67 | Links: 68 | All Links Enabled: true 69 | Expand Joint Details: false 70 | Expand Link Details: false 71 | Expand Tree: false 72 | Link Tree Style: Links in Alphabetic Order 73 | base_link: 74 | Alpha: 1 75 | Show Axes: false 76 | Show Trail: false 77 | Value: true 78 | bottom_link: 79 | Alpha: 1 80 | Show Axes: false 81 | Show Trail: false 82 | Value: true 83 | grasping_frame: 84 | Alpha: 1 85 | Show Axes: false 86 | Show Trail: false 87 | gripper_finger_link1: 88 | Alpha: 1 89 | Show Axes: false 90 | Show Trail: false 91 | Value: true 92 | gripper_finger_link2: 93 | Alpha: 1 94 | Show Axes: false 95 | Show Trail: false 96 | Value: true 97 | link1: 98 | Alpha: 1 99 | Show Axes: false 100 | Show Trail: false 101 | Value: true 102 | link2: 103 | Alpha: 1 104 | Show Axes: false 105 | Show Trail: false 106 | Value: true 107 | link3: 108 | Alpha: 1 109 | Show Axes: false 110 | Show Trail: false 111 | Value: true 112 | link4: 113 | Alpha: 1 114 | Show Axes: false 115 | Show Trail: false 116 | Value: true 117 | link5: 118 | Alpha: 1 119 | Show Axes: false 120 | Show Trail: false 121 | Value: true 122 | link6: 123 | Alpha: 1 124 | Show Axes: false 125 | Show Trail: false 126 | Value: true 127 | Loop Animation: false 128 | Robot Alpha: 0.5 129 | Robot Color: 150; 50; 150 130 | Show Robot Collision: false 131 | Show Robot Visual: false 132 | Show Trail: false 133 | State Display Time: 0.05 s 134 | Trail Step Size: 1 135 | Trajectory Topic: /move_group/display_planned_path 136 | Planning Metrics: 137 | Payload: 1 138 | Show Joint Torques: false 139 | Show Manipulability: false 140 | Show Manipulability Index: false 141 | Show Weight Limit: false 142 | TextHeight: 0.0799999982 143 | Planning Request: 144 | Colliding Link Color: 255; 0; 0 145 | Goal State Alpha: 1 146 | Goal State Color: 250; 128; 0 147 | Interactive Marker Size: 0 148 | Joint Violation Color: 255; 0; 255 149 | Planning Group: arm 150 | Query Goal State: false 151 | Query Start State: false 152 | Show Workspace: false 153 | Start State Alpha: 1 154 | Start State Color: 0; 255; 0 155 | Planning Scene Topic: /move_group/monitored_planning_scene 156 | Robot Description: robot_description 157 | Scene Geometry: 158 | Scene Alpha: 1 159 | Scene Color: 50; 230; 50 160 | Scene Display Time: 0.200000003 161 | Show Scene Geometry: true 162 | Voxel Coloring: Z-Axis 163 | Voxel Rendering: Occupied Voxels 164 | Scene Robot: 165 | Attached Body Color: 150; 50; 150 166 | Links: 167 | All Links Enabled: true 168 | Expand Joint Details: false 169 | Expand Link Details: false 170 | Expand Tree: false 171 | Link Tree Style: Links in Alphabetic Order 172 | base_link: 173 | Alpha: 1 174 | Show Axes: false 175 | Show Trail: false 176 | Value: true 177 | bottom_link: 178 | Alpha: 1 179 | Show Axes: false 180 | Show Trail: false 181 | Value: true 182 | grasping_frame: 183 | Alpha: 1 184 | Show Axes: false 185 | Show Trail: false 186 | gripper_finger_link1: 187 | Alpha: 1 188 | Show Axes: false 189 | Show Trail: false 190 | Value: true 191 | gripper_finger_link2: 192 | Alpha: 1 193 | Show Axes: false 194 | Show Trail: false 195 | Value: true 196 | link1: 197 | Alpha: 1 198 | Show Axes: false 199 | Show Trail: false 200 | Value: true 201 | link2: 202 | Alpha: 1 203 | Show Axes: false 204 | Show Trail: false 205 | Value: true 206 | link3: 207 | Alpha: 1 208 | Show Axes: false 209 | Show Trail: false 210 | Value: true 211 | link4: 212 | Alpha: 1 213 | Show Axes: false 214 | Show Trail: false 215 | Value: true 216 | link5: 217 | Alpha: 1 218 | Show Axes: false 219 | Show Trail: false 220 | Value: true 221 | link6: 222 | Alpha: 1 223 | Show Axes: false 224 | Show Trail: false 225 | Value: true 226 | Robot Alpha: 0.5 227 | Show Robot Collision: false 228 | Show Robot Visual: false 229 | Value: true 230 | - Alpha: 1 231 | Class: rviz/RobotModel 232 | Collision Enabled: false 233 | Enabled: true 234 | Links: 235 | All Links Enabled: true 236 | Expand Joint Details: false 237 | Expand Link Details: false 238 | Expand Tree: false 239 | Link Tree Style: Links in Alphabetic Order 240 | base_link: 241 | Alpha: 1 242 | Show Axes: false 243 | Show Trail: false 244 | Value: true 245 | bottom_link: 246 | Alpha: 1 247 | Show Axes: false 248 | Show Trail: false 249 | Value: true 250 | grasping_frame: 251 | Alpha: 1 252 | Show Axes: false 253 | Show Trail: true 254 | gripper_finger_link1: 255 | Alpha: 1 256 | Show Axes: false 257 | Show Trail: false 258 | Value: true 259 | gripper_finger_link2: 260 | Alpha: 1 261 | Show Axes: false 262 | Show Trail: false 263 | Value: true 264 | link1: 265 | Alpha: 1 266 | Show Axes: false 267 | Show Trail: false 268 | Value: true 269 | link2: 270 | Alpha: 1 271 | Show Axes: false 272 | Show Trail: false 273 | Value: true 274 | link3: 275 | Alpha: 1 276 | Show Axes: false 277 | Show Trail: false 278 | Value: true 279 | link4: 280 | Alpha: 1 281 | Show Axes: false 282 | Show Trail: false 283 | Value: true 284 | link5: 285 | Alpha: 1 286 | Show Axes: false 287 | Show Trail: false 288 | Value: true 289 | link6: 290 | Alpha: 1 291 | Show Axes: false 292 | Show Trail: false 293 | Value: true 294 | Name: RobotModel 295 | Robot Description: robot_description 296 | TF Prefix: "" 297 | Update Interval: 0 298 | Value: true 299 | Visual Enabled: true 300 | Enabled: true 301 | Global Options: 302 | Background Color: 184; 184; 184 303 | Fixed Frame: base_link 304 | Frame Rate: 30 305 | Name: root 306 | Tools: 307 | - Class: rviz/Interact 308 | Hide Inactive Objects: true 309 | - Class: rviz/MoveCamera 310 | - Class: rviz/Select 311 | Value: true 312 | Views: 313 | Current: 314 | Class: rviz/Orbit 315 | Distance: 1.35690749 316 | Enable Stereo Rendering: 317 | Stereo Eye Separation: 0.0599999987 318 | Stereo Focal Distance: 1 319 | Swap Stereo Eyes: false 320 | Value: false 321 | Focal Point: 322 | X: -0.0540157482 323 | Y: 0.0828352645 324 | Z: 0.243915334 325 | Focal Shape Fixed Size: true 326 | Focal Shape Size: 0.0500000007 327 | Name: Current View 328 | Near Clip Distance: 0.00999999978 329 | Pitch: 0.300397664 330 | Target Frame: base_footprint 331 | Value: Orbit (rviz) 332 | Yaw: 5.85857487 333 | Saved: ~ 334 | Window Geometry: 335 | Displays: 336 | collapsed: false 337 | Height: 768 338 | Help: 339 | collapsed: false 340 | Hide Left Dock: false 341 | Hide Right Dock: true 342 | MotionPlanning: 343 | collapsed: false 344 | MotionPlanning - Slider: 345 | collapsed: false 346 | QMainWindow State: 000000ff00000000fd0000000100000000000001ac000002bafc0200000007fb000000100044006900730070006c0061007900730100000028000002ba000000dd00fffffffb0000000800480065006c00700000000342000000bb0000007600fffffffb0000000a005600690065007700730000000124000000b0000000b000fffffffb0000000c00430061006d00650072006100000002ff000001610000000000000000fb0000001e004d006f00740069006f006e00200050006c0061006e006e0069006e00670000000139000001900000000000000000fb0000002e004d006f00740069006f006e0050006c0061006e006e0069006e00670020002d00200053006c00690064006500720000000000ffffffff0000004a00fffffffb0000001c004d006f00740069006f006e0050006c0061006e006e0069006e006700000001670000029b000001cc00ffffff000003c4000002ba00000001000000020000000100000002fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000 347 | Views: 348 | collapsed: false 349 | Width: 1398 350 | X: 291 351 | Y: 53 352 | -------------------------------------------------------------------------------- /marm_planning/config/pick_and_place.rviz: -------------------------------------------------------------------------------- 1 | Panels: 2 | - Class: rviz/Displays 3 | Help Height: 0 4 | Name: Displays 5 | Property Tree Widget: 6 | Expanded: 7 | - /Global Options1 8 | - /MotionPlanning1/Scene Geometry1 9 | - /MotionPlanning1/Scene Robot1 10 | - /MotionPlanning1/Planned Path1 11 | Splitter Ratio: 0.397694528 12 | Tree Height: 724 13 | - Class: rviz/Help 14 | Name: Help 15 | - Class: rviz/Views 16 | Expanded: 17 | - /Current View1 18 | Name: Views 19 | Splitter Ratio: 0.5 20 | Visualization Manager: 21 | Class: "" 22 | Displays: 23 | - Alpha: 0.5 24 | Cell Size: 0.5 25 | Class: rviz/Grid 26 | Color: 0; 0; 0 27 | Enabled: true 28 | Line Style: 29 | Line Width: 0.0299999993 30 | Value: Lines 31 | Name: Grid 32 | Normal Cell Count: 0 33 | Offset: 34 | X: 0 35 | Y: 0 36 | Z: 0 37 | Plane: XY 38 | Plane Cell Count: 20 39 | Reference Frame: 40 | Value: true 41 | - Class: rviz/Marker 42 | Enabled: true 43 | Marker Topic: /target_marker 44 | Name: Marker 45 | Namespaces: 46 | {} 47 | Queue Size: 100 48 | Value: true 49 | - Class: moveit_rviz_plugin/MotionPlanning 50 | Enabled: true 51 | Move Group Namespace: "" 52 | MoveIt_Goal_Tolerance: 0 53 | MoveIt_Planning_Attempts: 10 54 | MoveIt_Planning_Time: 5 55 | MoveIt_Use_Constraint_Aware_IK: true 56 | MoveIt_Warehouse_Host: 127.0.0.1 57 | MoveIt_Warehouse_Port: 33829 58 | MoveIt_Workspace: 59 | Center: 60 | X: 0 61 | Y: 0 62 | Z: 0 63 | Size: 64 | X: 2 65 | Y: 2 66 | Z: 2 67 | Name: MotionPlanning 68 | Planned Path: 69 | Color Enabled: false 70 | Interrupt Display: false 71 | Links: 72 | All Links Enabled: true 73 | Expand Joint Details: false 74 | Expand Link Details: false 75 | Expand Tree: false 76 | Link Tree Style: Links in Alphabetic Order 77 | base_link: 78 | Alpha: 1 79 | Show Axes: false 80 | Show Trail: false 81 | Value: true 82 | bottom_link: 83 | Alpha: 1 84 | Show Axes: false 85 | Show Trail: false 86 | Value: true 87 | grasping_frame: 88 | Alpha: 1 89 | Show Axes: false 90 | Show Trail: false 91 | gripper_finger_link1: 92 | Alpha: 1 93 | Show Axes: false 94 | Show Trail: false 95 | Value: true 96 | gripper_finger_link2: 97 | Alpha: 1 98 | Show Axes: false 99 | Show Trail: false 100 | Value: true 101 | link1: 102 | Alpha: 1 103 | Show Axes: false 104 | Show Trail: false 105 | Value: true 106 | link2: 107 | Alpha: 1 108 | Show Axes: false 109 | Show Trail: false 110 | Value: true 111 | link3: 112 | Alpha: 1 113 | Show Axes: false 114 | Show Trail: false 115 | Value: true 116 | link4: 117 | Alpha: 1 118 | Show Axes: false 119 | Show Trail: false 120 | Value: true 121 | link5: 122 | Alpha: 1 123 | Show Axes: false 124 | Show Trail: false 125 | Value: true 126 | link6: 127 | Alpha: 1 128 | Show Axes: false 129 | Show Trail: false 130 | Value: true 131 | Loop Animation: false 132 | Robot Alpha: 1 133 | Robot Color: 150; 50; 150 134 | Show Robot Collision: false 135 | Show Robot Visual: false 136 | Show Trail: false 137 | State Display Time: 0.05 s 138 | Trail Step Size: 1 139 | Trajectory Topic: /move_group/display_planned_path 140 | Planning Metrics: 141 | Payload: 1 142 | Show Joint Torques: false 143 | Show Manipulability: false 144 | Show Manipulability Index: false 145 | Show Weight Limit: false 146 | TextHeight: 0.0799999982 147 | Planning Request: 148 | Colliding Link Color: 255; 0; 0 149 | Goal State Alpha: 1 150 | Goal State Color: 250; 128; 0 151 | Interactive Marker Size: 0 152 | Joint Violation Color: 255; 0; 255 153 | Planning Group: arm 154 | Query Goal State: false 155 | Query Start State: false 156 | Show Workspace: false 157 | Start State Alpha: 1 158 | Start State Color: 0; 255; 0 159 | Planning Scene Topic: /move_group/monitored_planning_scene 160 | Robot Description: robot_description 161 | Scene Geometry: 162 | Scene Alpha: 1 163 | Scene Color: 50; 230; 50 164 | Scene Display Time: 0.100000001 165 | Show Scene Geometry: true 166 | Voxel Coloring: Z-Axis 167 | Voxel Rendering: Occupied Voxels 168 | Scene Robot: 169 | Attached Body Color: 150; 50; 150 170 | Links: 171 | All Links Enabled: true 172 | Expand Joint Details: false 173 | Expand Link Details: false 174 | Expand Tree: false 175 | Link Tree Style: Links in Alphabetic Order 176 | base_link: 177 | Alpha: 1 178 | Show Axes: false 179 | Show Trail: false 180 | Value: true 181 | bottom_link: 182 | Alpha: 1 183 | Show Axes: false 184 | Show Trail: false 185 | Value: true 186 | grasping_frame: 187 | Alpha: 1 188 | Show Axes: false 189 | Show Trail: false 190 | gripper_finger_link1: 191 | Alpha: 1 192 | Show Axes: false 193 | Show Trail: false 194 | Value: true 195 | gripper_finger_link2: 196 | Alpha: 1 197 | Show Axes: false 198 | Show Trail: false 199 | Value: true 200 | link1: 201 | Alpha: 1 202 | Show Axes: false 203 | Show Trail: false 204 | Value: true 205 | link2: 206 | Alpha: 1 207 | Show Axes: false 208 | Show Trail: false 209 | Value: true 210 | link3: 211 | Alpha: 1 212 | Show Axes: false 213 | Show Trail: false 214 | Value: true 215 | link4: 216 | Alpha: 1 217 | Show Axes: false 218 | Show Trail: false 219 | Value: true 220 | link5: 221 | Alpha: 1 222 | Show Axes: false 223 | Show Trail: false 224 | Value: true 225 | link6: 226 | Alpha: 1 227 | Show Axes: false 228 | Show Trail: false 229 | Value: true 230 | Robot Alpha: 0 231 | Show Robot Collision: false 232 | Show Robot Visual: true 233 | Value: true 234 | - Alpha: 1 235 | Axes Length: 0.200000003 236 | Axes Radius: 0.00999999978 237 | Class: rviz/Pose 238 | Color: 255; 25; 0 239 | Enabled: false 240 | Head Length: 0.300000012 241 | Head Radius: 0.100000001 242 | Name: Gripper Pose 243 | Shaft Length: 1 244 | Shaft Radius: 0.0500000007 245 | Shape: Axes 246 | Topic: /gripper_pose 247 | Unreliable: false 248 | Value: false 249 | - Alpha: 1 250 | Class: rviz/RobotModel 251 | Collision Enabled: false 252 | Enabled: true 253 | Links: 254 | All Links Enabled: true 255 | Expand Joint Details: false 256 | Expand Link Details: false 257 | Expand Tree: false 258 | Link Tree Style: Links in Alphabetic Order 259 | base_link: 260 | Alpha: 1 261 | Show Axes: false 262 | Show Trail: false 263 | Value: true 264 | bottom_link: 265 | Alpha: 1 266 | Show Axes: false 267 | Show Trail: false 268 | Value: true 269 | grasping_frame: 270 | Alpha: 1 271 | Show Axes: false 272 | Show Trail: false 273 | gripper_finger_link1: 274 | Alpha: 1 275 | Show Axes: false 276 | Show Trail: false 277 | Value: true 278 | gripper_finger_link2: 279 | Alpha: 1 280 | Show Axes: false 281 | Show Trail: false 282 | Value: true 283 | link1: 284 | Alpha: 1 285 | Show Axes: false 286 | Show Trail: false 287 | Value: true 288 | link2: 289 | Alpha: 1 290 | Show Axes: false 291 | Show Trail: false 292 | Value: true 293 | link3: 294 | Alpha: 1 295 | Show Axes: false 296 | Show Trail: false 297 | Value: true 298 | link4: 299 | Alpha: 1 300 | Show Axes: false 301 | Show Trail: false 302 | Value: true 303 | link5: 304 | Alpha: 1 305 | Show Axes: false 306 | Show Trail: false 307 | Value: true 308 | link6: 309 | Alpha: 1 310 | Show Axes: false 311 | Show Trail: false 312 | Value: true 313 | Name: RobotModel 314 | Robot Description: robot_description 315 | TF Prefix: "" 316 | Update Interval: 0 317 | Value: true 318 | Visual Enabled: true 319 | Enabled: true 320 | Global Options: 321 | Background Color: 179; 179; 179 322 | Fixed Frame: base_link 323 | Frame Rate: 30 324 | Name: root 325 | Tools: 326 | - Class: rviz/Interact 327 | Hide Inactive Objects: true 328 | - Class: rviz/MoveCamera 329 | - Class: rviz/Select 330 | Value: true 331 | Views: 332 | Current: 333 | Class: rviz/Orbit 334 | Distance: 1.54106736 335 | Enable Stereo Rendering: 336 | Stereo Eye Separation: 0.0599999987 337 | Stereo Focal Distance: 1 338 | Swap Stereo Eyes: false 339 | Value: false 340 | Focal Point: 341 | X: 0.18268007 342 | Y: -0.110009015 343 | Z: 0.296199769 344 | Focal Shape Fixed Size: true 345 | Focal Shape Size: 0.0500000007 346 | Name: Current View 347 | Near Clip Distance: 0.00999999978 348 | Pitch: 0.369798124 349 | Target Frame: base_footprint 350 | Value: Orbit (rviz) 351 | Yaw: 5.76992083 352 | Saved: ~ 353 | Window Geometry: 354 | Displays: 355 | collapsed: false 356 | Height: 859 357 | Help: 358 | collapsed: false 359 | Hide Left Dock: false 360 | Hide Right Dock: false 361 | MotionPlanning: 362 | collapsed: false 363 | MotionPlanning - Slider: 364 | collapsed: false 365 | QMainWindow State: 000000ff00000000fd0000000100000000000001c600000315fc0200000007fb000000100044006900730070006c006100790073010000002800000315000000dd00fffffffb0000000800480065006c00700000000342000000bb0000007600fffffffb0000000a005600690065007700730000000244000000b0000000b000fffffffb0000000c00430061006d00650072006100000002ff000001610000000000000000fb0000001e004d006f00740069006f006e00200050006c0061006e006e0069006e0067000000012e0000017f0000000000000000fb0000002e004d006f00740069006f006e0050006c0061006e006e0069006e00670020002d00200053006c00690064006500720000000000ffffffff0000004a00fffffffb0000001c004d006f00740069006f006e0050006c0061006e006e0069006e0067000000012900000214000001cc00ffffff000003750000031500000001000000020000000100000002fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000 366 | Views: 367 | collapsed: false 368 | Width: 1345 369 | X: 289 370 | Y: 64 371 | -------------------------------------------------------------------------------- /marm_planning/scripts/moveit_pick_and_place_demo.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | 4 | import rospy, sys 5 | import moveit_commander 6 | from geometry_msgs.msg import PoseStamped, Pose 7 | from moveit_commander import MoveGroupCommander, PlanningSceneInterface 8 | from moveit_msgs.msg import PlanningScene, ObjectColor 9 | from moveit_msgs.msg import Grasp, GripperTranslation, MoveItErrorCodes 10 | 11 | from trajectory_msgs.msg import JointTrajectory, JointTrajectoryPoint 12 | from tf.transformations import quaternion_from_euler 13 | from copy import deepcopy 14 | 15 | GROUP_NAME_ARM = 'arm' 16 | GROUP_NAME_GRIPPER = 'gripper' 17 | 18 | GRIPPER_FRAME = 'grasping_frame' 19 | 20 | GRIPPER_OPEN = [0.004] 21 | GRIPPER_CLOSED = [0.01] 22 | 23 | REFERENCE_FRAME = 'base_link' 24 | 25 | class MoveItPickAndPlaceDemo: 26 | def __init__(self): 27 | # 初始化move_group的API 28 | moveit_commander.roscpp_initialize(sys.argv) 29 | 30 | # 初始化ROS节点 31 | rospy.init_node('moveit_pick_and_place_demo') 32 | 33 | # 初始化场景对象 34 | scene = PlanningSceneInterface() 35 | 36 | # 创建一个发布场景变化信息的发布者 37 | self.scene_pub = rospy.Publisher('planning_scene', PlanningScene, queue_size=10) 38 | 39 | # 创建一个发布抓取姿态的发布者 40 | self.gripper_pose_pub = rospy.Publisher('gripper_pose', PoseStamped, queue_size=10) 41 | 42 | # 创建一个存储物体颜色的字典对象 43 | self.colors = dict() 44 | 45 | # 初始化需要使用move group控制的机械臂中的arm group 46 | arm = MoveGroupCommander(GROUP_NAME_ARM) 47 | 48 | # 初始化需要使用move group控制的机械臂中的gripper group 49 | gripper = MoveGroupCommander(GROUP_NAME_GRIPPER) 50 | 51 | # 获取终端link的名称 52 | end_effector_link = arm.get_end_effector_link() 53 | 54 | # 设置位置(单位:米)和姿态(单位:弧度)的允许误差 55 | arm.set_goal_position_tolerance(0.05) 56 | arm.set_goal_orientation_tolerance(0.1) 57 | 58 | # 当运动规划失败后,允许重新规划 59 | arm.allow_replanning(True) 60 | 61 | # 设置目标位置所使用的参考坐标系 62 | arm.set_pose_reference_frame(REFERENCE_FRAME) 63 | 64 | # 设置每次运动规划的时间限制:5s 65 | arm.set_planning_time(5) 66 | 67 | # 设置pick和place阶段的最大尝试次数 68 | max_pick_attempts = 5 69 | max_place_attempts = 5 70 | rospy.sleep(2) 71 | 72 | # 设置场景物体的名称 73 | table_id = 'table' 74 | box1_id = 'box1' 75 | box2_id = 'box2' 76 | target_id = 'target' 77 | 78 | # 移除场景中之前运行残留的物体 79 | scene.remove_world_object(table_id) 80 | scene.remove_world_object(box1_id) 81 | scene.remove_world_object(box2_id) 82 | scene.remove_world_object(target_id) 83 | 84 | # 移除场景中之前与机器臂绑定的物体 85 | scene.remove_attached_object(GRIPPER_FRAME, target_id) 86 | rospy.sleep(1) 87 | 88 | # 控制机械臂先回到初始化位置 89 | arm.set_named_target('home') 90 | arm.go() 91 | 92 | # 控制夹爪张开 93 | gripper.set_joint_value_target(GRIPPER_OPEN) 94 | gripper.go() 95 | rospy.sleep(1) 96 | 97 | # 设置桌面的高度 98 | table_ground = 0.2 99 | 100 | # 设置table、box1和box2的三维尺寸[长, 宽, 高] 101 | table_size = [0.2, 0.7, 0.01] 102 | box1_size = [0.1, 0.05, 0.05] 103 | box2_size = [0.05, 0.05, 0.15] 104 | 105 | # 将三个物体加入场景当中 106 | table_pose = PoseStamped() 107 | table_pose.header.frame_id = REFERENCE_FRAME 108 | table_pose.pose.position.x = 0.35 109 | table_pose.pose.position.y = 0.0 110 | table_pose.pose.position.z = table_ground + table_size[2] / 2.0 111 | table_pose.pose.orientation.w = 1.0 112 | scene.add_box(table_id, table_pose, table_size) 113 | 114 | box1_pose = PoseStamped() 115 | box1_pose.header.frame_id = REFERENCE_FRAME 116 | box1_pose.pose.position.x = 0.31 117 | box1_pose.pose.position.y = -0.1 118 | box1_pose.pose.position.z = table_ground + table_size[2] + box1_size[2] / 2.0 119 | box1_pose.pose.orientation.w = 1.0 120 | scene.add_box(box1_id, box1_pose, box1_size) 121 | 122 | box2_pose = PoseStamped() 123 | box2_pose.header.frame_id = REFERENCE_FRAME 124 | box2_pose.pose.position.x = 0.29 125 | box2_pose.pose.position.y = 0.13 126 | box2_pose.pose.position.z = table_ground + table_size[2] + box2_size[2] / 2.0 127 | box2_pose.pose.orientation.w = 1.0 128 | scene.add_box(box2_id, box2_pose, box2_size) 129 | 130 | # 将桌子设置成红色,两个box设置成橙色 131 | self.setColor(table_id, 0.8, 0, 0, 1.0) 132 | self.setColor(box1_id, 0.8, 0.4, 0, 1.0) 133 | self.setColor(box2_id, 0.8, 0.4, 0, 1.0) 134 | 135 | # 设置目标物体的尺寸 136 | target_size = [0.02, 0.01, 0.12] 137 | 138 | # 设置目标物体的位置,位于桌面之上两个盒子之间 139 | target_pose = PoseStamped() 140 | target_pose.header.frame_id = REFERENCE_FRAME 141 | target_pose.pose.position.x = 0.32 142 | target_pose.pose.position.y = 0.0 143 | target_pose.pose.position.z = table_ground + table_size[2] + target_size[2] / 2.0 144 | target_pose.pose.orientation.w = 1.0 145 | 146 | # 将抓取的目标物体加入场景中 147 | scene.add_box(target_id, target_pose, target_size) 148 | 149 | # 将目标物体设置为黄色 150 | self.setColor(target_id, 0.9, 0.9, 0, 1.0) 151 | 152 | # 将场景中的颜色设置发布 153 | self.sendColors() 154 | 155 | # 设置支持的外观 156 | arm.set_support_surface_name(table_id) 157 | 158 | # 设置一个place阶段需要放置物体的目标位置 159 | place_pose = PoseStamped() 160 | place_pose.header.frame_id = REFERENCE_FRAME 161 | place_pose.pose.position.x = 0.32 162 | place_pose.pose.position.y = -0.2 163 | place_pose.pose.position.z = table_ground + table_size[2] + target_size[2] / 2.0 164 | place_pose.pose.orientation.w = 1.0 165 | 166 | # 将目标位置设置为机器人的抓取目标位置 167 | grasp_pose = target_pose 168 | 169 | # 生成抓取姿态 170 | grasps = self.make_grasps(grasp_pose, [target_id]) 171 | 172 | # 将抓取姿态发布,可以在rviz中显示 173 | for grasp in grasps: 174 | self.gripper_pose_pub.publish(grasp.grasp_pose) 175 | rospy.sleep(0.2) 176 | 177 | # 追踪抓取成功与否,以及抓取的尝试次数 178 | result = None 179 | n_attempts = 0 180 | 181 | # 重复尝试抓取,直道成功或者超多最大尝试次数 182 | while result != MoveItErrorCodes.SUCCESS and n_attempts < max_pick_attempts: 183 | n_attempts += 1 184 | rospy.loginfo("Pick attempt: " + str(n_attempts)) 185 | result = arm.pick(target_id, grasps) 186 | rospy.sleep(0.2) 187 | 188 | # 如果pick成功,则进入place阶段 189 | if result == MoveItErrorCodes.SUCCESS: 190 | result = None 191 | n_attempts = 0 192 | 193 | # 生成放置姿态 194 | places = self.make_places(place_pose) 195 | 196 | # 重复尝试放置,直道成功或者超多最大尝试次数 197 | while result != MoveItErrorCodes.SUCCESS and n_attempts < max_place_attempts: 198 | n_attempts += 1 199 | rospy.loginfo("Place attempt: " + str(n_attempts)) 200 | for place in places: 201 | result = arm.place(target_id, place) 202 | if result == MoveItErrorCodes.SUCCESS: 203 | break 204 | rospy.sleep(0.2) 205 | 206 | if result != MoveItErrorCodes.SUCCESS: 207 | rospy.loginfo("Place operation failed after " + str(n_attempts) + " attempts.") 208 | else: 209 | rospy.loginfo("Pick operation failed after " + str(n_attempts) + " attempts.") 210 | 211 | # 控制机械臂回到初始化位置 212 | arm.set_named_target('home') 213 | arm.go() 214 | 215 | # 控制夹爪回到张开的状态 216 | gripper.set_joint_value_target(GRIPPER_OPEN) 217 | gripper.go() 218 | rospy.sleep(1) 219 | 220 | # 关闭并退出moveit 221 | moveit_commander.roscpp_shutdown() 222 | moveit_commander.os._exit(0) 223 | 224 | # 创建夹爪的姿态数据JointTrajectory 225 | def make_gripper_posture(self, joint_positions): 226 | # 初始化夹爪的关节运动轨迹 227 | t = JointTrajectory() 228 | 229 | # 设置夹爪的关节名称 230 | t.joint_names = ['finger_joint1'] 231 | 232 | # 初始化关节轨迹点 233 | tp = JointTrajectoryPoint() 234 | 235 | # 将输入的关节位置作为一个目标轨迹点 236 | tp.positions = joint_positions 237 | 238 | # 设置夹爪的力度 239 | tp.effort = [1.0] 240 | 241 | # 设置运动时间 242 | tp.time_from_start = rospy.Duration(1.0) 243 | 244 | # 将目标轨迹点加入到运动轨迹中 245 | t.points.append(tp) 246 | 247 | # 返回夹爪的关节运动轨迹 248 | return t 249 | 250 | # 使用给定向量创建夹爪的translation结构 251 | def make_gripper_translation(self, min_dist, desired, vector): 252 | # 初始化translation对象 253 | g = GripperTranslation() 254 | 255 | # 设置方向向量 256 | g.direction.vector.x = vector[0] 257 | g.direction.vector.y = vector[1] 258 | g.direction.vector.z = vector[2] 259 | 260 | # 设置参考坐标系 261 | g.direction.header.frame_id = GRIPPER_FRAME 262 | 263 | # 设置最小和期望的距离 264 | g.min_distance = min_dist 265 | g.desired_distance = desired 266 | 267 | return g 268 | 269 | # 创建一个允许的的抓取姿态列表 270 | def make_grasps(self, initial_pose_stamped, allowed_touch_objects): 271 | # 初始化抓取姿态对象 272 | g = Grasp() 273 | 274 | # 创建夹爪张开、闭合的姿态 275 | g.pre_grasp_posture = self.make_gripper_posture(GRIPPER_OPEN) 276 | g.grasp_posture = self.make_gripper_posture(GRIPPER_CLOSED) 277 | 278 | # 设置期望的夹爪靠近、撤离目标的参数 279 | g.pre_grasp_approach = self.make_gripper_translation(0.01, 0.1, [1.0, 0.0, 0.0]) 280 | g.post_grasp_retreat = self.make_gripper_translation(0.1, 0.15, [0.0, -1.0, 1.0]) 281 | 282 | # 设置抓取姿态 283 | g.grasp_pose = initial_pose_stamped 284 | 285 | # 需要尝试改变姿态的数据列表 286 | pitch_vals = [0, 0.1, -0.1, 0.2, -0.2, 0.3, -0.3] 287 | yaw_vals = [0] 288 | 289 | # 抓取姿态的列表 290 | grasps = [] 291 | 292 | # 改变姿态,生成抓取动作 293 | for y in yaw_vals: 294 | for p in pitch_vals: 295 | # 欧拉角到四元数的转换 296 | q = quaternion_from_euler(0, p, y) 297 | 298 | # 设置抓取的姿态 299 | g.grasp_pose.pose.orientation.x = q[0] 300 | g.grasp_pose.pose.orientation.y = q[1] 301 | g.grasp_pose.pose.orientation.z = q[2] 302 | g.grasp_pose.pose.orientation.w = q[3] 303 | 304 | # 设置抓取的唯一id号 305 | g.id = str(len(grasps)) 306 | 307 | # 设置允许接触的物体 308 | g.allowed_touch_objects = allowed_touch_objects 309 | 310 | # 将本次规划的抓取放入抓取列表中 311 | grasps.append(deepcopy(g)) 312 | 313 | # 返回抓取列表 314 | return grasps 315 | 316 | # 创建一个允许的放置姿态列表 317 | def make_places(self, init_pose): 318 | # 初始化放置抓取物体的位置 319 | place = PoseStamped() 320 | 321 | # 设置放置抓取物体的位置 322 | place = init_pose 323 | 324 | # 定义x方向上用于尝试放置物体的偏移参数 325 | x_vals = [0, 0.005, 0.01, 0.015, -0.005, -0.01, -0.015] 326 | 327 | # 定义y方向上用于尝试放置物体的偏移参数 328 | y_vals = [0, 0.005, 0.01, 0.015, -0.005, -0.01, -0.015] 329 | 330 | pitch_vals = [0] 331 | 332 | # 定义用于尝试放置物体的偏航角参数 333 | yaw_vals = [0] 334 | 335 | # 定义放置物体的姿态列表 336 | places = [] 337 | 338 | # 生成每一个角度和偏移方向上的抓取姿态 339 | for y in yaw_vals: 340 | for p in pitch_vals: 341 | for y in y_vals: 342 | for x in x_vals: 343 | place.pose.position.x = init_pose.pose.position.x + x 344 | place.pose.position.y = init_pose.pose.position.y + y 345 | 346 | # 欧拉角到四元数的转换 347 | q = quaternion_from_euler(0, p, y) 348 | 349 | # 欧拉角到四元数的转换 350 | place.pose.orientation.x = q[0] 351 | place.pose.orientation.y = q[1] 352 | place.pose.orientation.z = q[2] 353 | place.pose.orientation.w = q[3] 354 | 355 | # 将该放置姿态加入列表 356 | places.append(deepcopy(place)) 357 | 358 | # 返回放置物体的姿态列表 359 | return places 360 | 361 | # 设置场景物体的颜色 362 | def setColor(self, name, r, g, b, a = 0.9): 363 | # 初始化moveit颜色对象 364 | color = ObjectColor() 365 | 366 | # 设置颜色值 367 | color.id = name 368 | color.color.r = r 369 | color.color.g = g 370 | color.color.b = b 371 | color.color.a = a 372 | 373 | # 更新颜色字典 374 | self.colors[name] = color 375 | 376 | # 将颜色设置发送并应用到moveit场景当中 377 | def sendColors(self): 378 | # 初始化规划场景对象 379 | p = PlanningScene() 380 | 381 | # 需要设置规划场景是否有差异 382 | p.is_diff = True 383 | 384 | # 从颜色字典中取出颜色设置 385 | for color in self.colors.values(): 386 | p.object_colors.append(color) 387 | 388 | # 发布场景物体颜色设置 389 | self.scene_pub.publish(p) 390 | 391 | if __name__ == "__main__": 392 | MoveItPickAndPlaceDemo() 393 | 394 | 395 | -------------------------------------------------------------------------------- /marm_description/urdf/arm.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | 323 | 324 | Gazebo/White 325 | 326 | 327 | Gazebo/White 328 | 329 | 330 | Gazebo/Blue 331 | 332 | 333 | Gazebo/White 334 | 335 | 336 | Gazebo/Blue 337 | 338 | 339 | Gazebo/Black 340 | 341 | 342 | Gazebo/White 343 | 344 | 345 | Gazebo/Blue 346 | 347 | 348 | Gazebo/White 349 | 350 | 351 | Gazebo/White 352 | 353 | 354 | 355 | 356 | 357 | transmission_interface/SimpleTransmission 358 | 359 | hardware_interface/PositionJointInterface 360 | 361 | 362 | hardware_interface/PositionJointInterface 363 | 1 364 | 365 | 366 | 367 | 368 | 369 | 370 | 371 | 372 | 373 | 374 | 375 | 376 | 377 | 378 | 379 | /arm 380 | 381 | 382 | 383 | 384 | -------------------------------------------------------------------------------- /marm_moveit_config/launch/moveit.rviz: -------------------------------------------------------------------------------- 1 | Panels: 2 | - Class: rviz/Displays 3 | Help Height: 84 4 | Name: Displays 5 | Property Tree Widget: 6 | Expanded: 7 | - /MotionPlanning1 8 | Splitter Ratio: 0.74256 9 | Tree Height: 664 10 | - Class: rviz/Help 11 | Name: Help 12 | - Class: rviz/Views 13 | Expanded: 14 | - /Current View1 15 | Name: Views 16 | Splitter Ratio: 0.5 17 | Visualization Manager: 18 | Class: "" 19 | Displays: 20 | - Alpha: 0.5 21 | Cell Size: 1 22 | Class: rviz/Grid 23 | Color: 160; 160; 164 24 | Enabled: true 25 | Line Style: 26 | Line Width: 0.03 27 | Value: Lines 28 | Name: Grid 29 | Normal Cell Count: 0 30 | Offset: 31 | X: 0 32 | Y: 0 33 | Z: 0 34 | Plane: XY 35 | Plane Cell Count: 10 36 | Reference Frame: 37 | Value: true 38 | - Class: moveit_rviz_plugin/MotionPlanning 39 | Enabled: true 40 | MoveIt_Goal_Tolerance: 0 41 | MoveIt_Planning_Time: 5 42 | MoveIt_Use_Constraint_Aware_IK: true 43 | MoveIt_Warehouse_Host: 127.0.0.1 44 | MoveIt_Warehouse_Port: 33829 45 | Name: MotionPlanning 46 | Planned Path: 47 | Links: 48 | base_bellow_link: 49 | Alpha: 1 50 | Show Axes: false 51 | Show Trail: false 52 | Value: true 53 | base_footprint: 54 | Alpha: 1 55 | Show Axes: false 56 | Show Trail: false 57 | Value: true 58 | base_link: 59 | Alpha: 1 60 | Show Axes: false 61 | Show Trail: false 62 | Value: true 63 | bl_caster_l_wheel_link: 64 | Alpha: 1 65 | Show Axes: false 66 | Show Trail: false 67 | Value: true 68 | bl_caster_r_wheel_link: 69 | Alpha: 1 70 | Show Axes: false 71 | Show Trail: false 72 | Value: true 73 | bl_caster_rotation_link: 74 | Alpha: 1 75 | Show Axes: false 76 | Show Trail: false 77 | Value: true 78 | br_caster_l_wheel_link: 79 | Alpha: 1 80 | Show Axes: false 81 | Show Trail: false 82 | Value: true 83 | br_caster_r_wheel_link: 84 | Alpha: 1 85 | Show Axes: false 86 | Show Trail: false 87 | Value: true 88 | br_caster_rotation_link: 89 | Alpha: 1 90 | Show Axes: false 91 | Show Trail: false 92 | Value: true 93 | double_stereo_link: 94 | Alpha: 1 95 | Show Axes: false 96 | Show Trail: false 97 | Value: true 98 | fl_caster_l_wheel_link: 99 | Alpha: 1 100 | Show Axes: false 101 | Show Trail: false 102 | Value: true 103 | fl_caster_r_wheel_link: 104 | Alpha: 1 105 | Show Axes: false 106 | Show Trail: false 107 | Value: true 108 | fl_caster_rotation_link: 109 | Alpha: 1 110 | Show Axes: false 111 | Show Trail: false 112 | Value: true 113 | fr_caster_l_wheel_link: 114 | Alpha: 1 115 | Show Axes: false 116 | Show Trail: false 117 | Value: true 118 | fr_caster_r_wheel_link: 119 | Alpha: 1 120 | Show Axes: false 121 | Show Trail: false 122 | Value: true 123 | fr_caster_rotation_link: 124 | Alpha: 1 125 | Show Axes: false 126 | Show Trail: false 127 | Value: true 128 | head_mount_kinect_ir_link: 129 | Alpha: 1 130 | Show Axes: false 131 | Show Trail: false 132 | Value: true 133 | head_mount_kinect_rgb_link: 134 | Alpha: 1 135 | Show Axes: false 136 | Show Trail: false 137 | Value: true 138 | head_mount_link: 139 | Alpha: 1 140 | Show Axes: false 141 | Show Trail: false 142 | Value: true 143 | head_mount_prosilica_link: 144 | Alpha: 1 145 | Show Axes: false 146 | Show Trail: false 147 | Value: true 148 | head_pan_link: 149 | Alpha: 1 150 | Show Axes: false 151 | Show Trail: false 152 | Value: true 153 | head_plate_frame: 154 | Alpha: 1 155 | Show Axes: false 156 | Show Trail: false 157 | Value: true 158 | head_tilt_link: 159 | Alpha: 1 160 | Show Axes: false 161 | Show Trail: false 162 | Value: true 163 | l_elbow_flex_link: 164 | Alpha: 1 165 | Show Axes: false 166 | Show Trail: false 167 | Value: true 168 | l_forearm_link: 169 | Alpha: 1 170 | Show Axes: false 171 | Show Trail: false 172 | Value: true 173 | l_forearm_roll_link: 174 | Alpha: 1 175 | Show Axes: false 176 | Show Trail: false 177 | Value: true 178 | l_gripper_l_finger_link: 179 | Alpha: 1 180 | Show Axes: false 181 | Show Trail: false 182 | Value: true 183 | l_gripper_l_finger_tip_link: 184 | Alpha: 1 185 | Show Axes: false 186 | Show Trail: false 187 | Value: true 188 | l_gripper_motor_accelerometer_link: 189 | Alpha: 1 190 | Show Axes: false 191 | Show Trail: false 192 | Value: true 193 | l_gripper_palm_link: 194 | Alpha: 1 195 | Show Axes: false 196 | Show Trail: false 197 | Value: true 198 | l_gripper_r_finger_link: 199 | Alpha: 1 200 | Show Axes: false 201 | Show Trail: false 202 | Value: true 203 | l_gripper_r_finger_tip_link: 204 | Alpha: 1 205 | Show Axes: false 206 | Show Trail: false 207 | Value: true 208 | l_shoulder_lift_link: 209 | Alpha: 1 210 | Show Axes: false 211 | Show Trail: false 212 | Value: true 213 | l_shoulder_pan_link: 214 | Alpha: 1 215 | Show Axes: false 216 | Show Trail: false 217 | Value: true 218 | l_upper_arm_link: 219 | Alpha: 1 220 | Show Axes: false 221 | Show Trail: false 222 | Value: true 223 | l_upper_arm_roll_link: 224 | Alpha: 1 225 | Show Axes: false 226 | Show Trail: false 227 | Value: true 228 | l_wrist_flex_link: 229 | Alpha: 1 230 | Show Axes: false 231 | Show Trail: false 232 | Value: true 233 | l_wrist_roll_link: 234 | Alpha: 1 235 | Show Axes: false 236 | Show Trail: false 237 | Value: true 238 | laser_tilt_mount_link: 239 | Alpha: 1 240 | Show Axes: false 241 | Show Trail: false 242 | Value: true 243 | r_elbow_flex_link: 244 | Alpha: 1 245 | Show Axes: false 246 | Show Trail: false 247 | Value: true 248 | r_forearm_link: 249 | Alpha: 1 250 | Show Axes: false 251 | Show Trail: false 252 | Value: true 253 | r_forearm_roll_link: 254 | Alpha: 1 255 | Show Axes: false 256 | Show Trail: false 257 | Value: true 258 | r_gripper_l_finger_link: 259 | Alpha: 1 260 | Show Axes: false 261 | Show Trail: false 262 | Value: true 263 | r_gripper_l_finger_tip_link: 264 | Alpha: 1 265 | Show Axes: false 266 | Show Trail: false 267 | Value: true 268 | r_gripper_motor_accelerometer_link: 269 | Alpha: 1 270 | Show Axes: false 271 | Show Trail: false 272 | Value: true 273 | r_gripper_palm_link: 274 | Alpha: 1 275 | Show Axes: false 276 | Show Trail: false 277 | Value: true 278 | r_gripper_r_finger_link: 279 | Alpha: 1 280 | Show Axes: false 281 | Show Trail: false 282 | Value: true 283 | r_gripper_r_finger_tip_link: 284 | Alpha: 1 285 | Show Axes: false 286 | Show Trail: false 287 | Value: true 288 | r_shoulder_lift_link: 289 | Alpha: 1 290 | Show Axes: false 291 | Show Trail: false 292 | Value: true 293 | r_shoulder_pan_link: 294 | Alpha: 1 295 | Show Axes: false 296 | Show Trail: false 297 | Value: true 298 | r_upper_arm_link: 299 | Alpha: 1 300 | Show Axes: false 301 | Show Trail: false 302 | Value: true 303 | r_upper_arm_roll_link: 304 | Alpha: 1 305 | Show Axes: false 306 | Show Trail: false 307 | Value: true 308 | r_wrist_flex_link: 309 | Alpha: 1 310 | Show Axes: false 311 | Show Trail: false 312 | Value: true 313 | r_wrist_roll_link: 314 | Alpha: 1 315 | Show Axes: false 316 | Show Trail: false 317 | Value: true 318 | sensor_mount_link: 319 | Alpha: 1 320 | Show Axes: false 321 | Show Trail: false 322 | Value: true 323 | torso_lift_link: 324 | Alpha: 1 325 | Show Axes: false 326 | Show Trail: false 327 | Value: true 328 | Loop Animation: true 329 | Robot Alpha: 0.5 330 | Show Robot Collision: false 331 | Show Robot Visual: true 332 | Show Trail: false 333 | State Display Time: 0.05 s 334 | Trajectory Topic: move_group/display_planned_path 335 | Planning Metrics: 336 | Payload: 1 337 | Show Joint Torques: false 338 | Show Manipulability: false 339 | Show Manipulability Index: false 340 | Show Weight Limit: false 341 | Planning Request: 342 | Colliding Link Color: 255; 0; 0 343 | Goal State Alpha: 1 344 | Goal State Color: 250; 128; 0 345 | Interactive Marker Size: 0 346 | Joint Violation Color: 255; 0; 255 347 | Planning Group: left_arm 348 | Query Goal State: true 349 | Query Start State: false 350 | Show Workspace: false 351 | Start State Alpha: 1 352 | Start State Color: 0; 255; 0 353 | Planning Scene Topic: move_group/monitored_planning_scene 354 | Robot Description: robot_description 355 | Scene Geometry: 356 | Scene Alpha: 1 357 | Scene Color: 50; 230; 50 358 | Scene Display Time: 0.2 359 | Show Scene Geometry: true 360 | Voxel Coloring: Z-Axis 361 | Voxel Rendering: Occupied Voxels 362 | Scene Robot: 363 | Attached Body Color: 150; 50; 150 364 | Links: 365 | base_bellow_link: 366 | Alpha: 1 367 | Show Axes: false 368 | Show Trail: false 369 | Value: true 370 | base_footprint: 371 | Alpha: 1 372 | Show Axes: false 373 | Show Trail: false 374 | Value: true 375 | base_link: 376 | Alpha: 1 377 | Show Axes: false 378 | Show Trail: false 379 | Value: true 380 | bl_caster_l_wheel_link: 381 | Alpha: 1 382 | Show Axes: false 383 | Show Trail: false 384 | Value: true 385 | bl_caster_r_wheel_link: 386 | Alpha: 1 387 | Show Axes: false 388 | Show Trail: false 389 | Value: true 390 | bl_caster_rotation_link: 391 | Alpha: 1 392 | Show Axes: false 393 | Show Trail: false 394 | Value: true 395 | br_caster_l_wheel_link: 396 | Alpha: 1 397 | Show Axes: false 398 | Show Trail: false 399 | Value: true 400 | br_caster_r_wheel_link: 401 | Alpha: 1 402 | Show Axes: false 403 | Show Trail: false 404 | Value: true 405 | br_caster_rotation_link: 406 | Alpha: 1 407 | Show Axes: false 408 | Show Trail: false 409 | Value: true 410 | double_stereo_link: 411 | Alpha: 1 412 | Show Axes: false 413 | Show Trail: false 414 | Value: true 415 | fl_caster_l_wheel_link: 416 | Alpha: 1 417 | Show Axes: false 418 | Show Trail: false 419 | Value: true 420 | fl_caster_r_wheel_link: 421 | Alpha: 1 422 | Show Axes: false 423 | Show Trail: false 424 | Value: true 425 | fl_caster_rotation_link: 426 | Alpha: 1 427 | Show Axes: false 428 | Show Trail: false 429 | Value: true 430 | fr_caster_l_wheel_link: 431 | Alpha: 1 432 | Show Axes: false 433 | Show Trail: false 434 | Value: true 435 | fr_caster_r_wheel_link: 436 | Alpha: 1 437 | Show Axes: false 438 | Show Trail: false 439 | Value: true 440 | fr_caster_rotation_link: 441 | Alpha: 1 442 | Show Axes: false 443 | Show Trail: false 444 | Value: true 445 | head_mount_kinect_ir_link: 446 | Alpha: 1 447 | Show Axes: false 448 | Show Trail: false 449 | Value: true 450 | head_mount_kinect_rgb_link: 451 | Alpha: 1 452 | Show Axes: false 453 | Show Trail: false 454 | Value: true 455 | head_mount_link: 456 | Alpha: 1 457 | Show Axes: false 458 | Show Trail: false 459 | Value: true 460 | head_mount_prosilica_link: 461 | Alpha: 1 462 | Show Axes: false 463 | Show Trail: false 464 | Value: true 465 | head_pan_link: 466 | Alpha: 1 467 | Show Axes: false 468 | Show Trail: false 469 | Value: true 470 | head_plate_frame: 471 | Alpha: 1 472 | Show Axes: false 473 | Show Trail: false 474 | Value: true 475 | head_tilt_link: 476 | Alpha: 1 477 | Show Axes: false 478 | Show Trail: false 479 | Value: true 480 | l_elbow_flex_link: 481 | Alpha: 1 482 | Show Axes: false 483 | Show Trail: false 484 | Value: true 485 | l_forearm_link: 486 | Alpha: 1 487 | Show Axes: false 488 | Show Trail: false 489 | Value: true 490 | l_forearm_roll_link: 491 | Alpha: 1 492 | Show Axes: false 493 | Show Trail: false 494 | Value: true 495 | l_gripper_l_finger_link: 496 | Alpha: 1 497 | Show Axes: false 498 | Show Trail: false 499 | Value: true 500 | l_gripper_l_finger_tip_link: 501 | Alpha: 1 502 | Show Axes: false 503 | Show Trail: false 504 | Value: true 505 | l_gripper_motor_accelerometer_link: 506 | Alpha: 1 507 | Show Axes: false 508 | Show Trail: false 509 | Value: true 510 | l_gripper_palm_link: 511 | Alpha: 1 512 | Show Axes: false 513 | Show Trail: false 514 | Value: true 515 | l_gripper_r_finger_link: 516 | Alpha: 1 517 | Show Axes: false 518 | Show Trail: false 519 | Value: true 520 | l_gripper_r_finger_tip_link: 521 | Alpha: 1 522 | Show Axes: false 523 | Show Trail: false 524 | Value: true 525 | l_shoulder_lift_link: 526 | Alpha: 1 527 | Show Axes: false 528 | Show Trail: false 529 | Value: true 530 | l_shoulder_pan_link: 531 | Alpha: 1 532 | Show Axes: false 533 | Show Trail: false 534 | Value: true 535 | l_upper_arm_link: 536 | Alpha: 1 537 | Show Axes: false 538 | Show Trail: false 539 | Value: true 540 | l_upper_arm_roll_link: 541 | Alpha: 1 542 | Show Axes: false 543 | Show Trail: false 544 | Value: true 545 | l_wrist_flex_link: 546 | Alpha: 1 547 | Show Axes: false 548 | Show Trail: false 549 | Value: true 550 | l_wrist_roll_link: 551 | Alpha: 1 552 | Show Axes: false 553 | Show Trail: false 554 | Value: true 555 | laser_tilt_mount_link: 556 | Alpha: 1 557 | Show Axes: false 558 | Show Trail: false 559 | Value: true 560 | r_elbow_flex_link: 561 | Alpha: 1 562 | Show Axes: false 563 | Show Trail: false 564 | Value: true 565 | r_forearm_link: 566 | Alpha: 1 567 | Show Axes: false 568 | Show Trail: false 569 | Value: true 570 | r_forearm_roll_link: 571 | Alpha: 1 572 | Show Axes: false 573 | Show Trail: false 574 | Value: true 575 | r_gripper_l_finger_link: 576 | Alpha: 1 577 | Show Axes: false 578 | Show Trail: false 579 | Value: true 580 | r_gripper_l_finger_tip_link: 581 | Alpha: 1 582 | Show Axes: false 583 | Show Trail: false 584 | Value: true 585 | r_gripper_motor_accelerometer_link: 586 | Alpha: 1 587 | Show Axes: false 588 | Show Trail: false 589 | Value: true 590 | r_gripper_palm_link: 591 | Alpha: 1 592 | Show Axes: false 593 | Show Trail: false 594 | Value: true 595 | r_gripper_r_finger_link: 596 | Alpha: 1 597 | Show Axes: false 598 | Show Trail: false 599 | Value: true 600 | r_gripper_r_finger_tip_link: 601 | Alpha: 1 602 | Show Axes: false 603 | Show Trail: false 604 | Value: true 605 | r_shoulder_lift_link: 606 | Alpha: 1 607 | Show Axes: false 608 | Show Trail: false 609 | Value: true 610 | r_shoulder_pan_link: 611 | Alpha: 1 612 | Show Axes: false 613 | Show Trail: false 614 | Value: true 615 | r_upper_arm_link: 616 | Alpha: 1 617 | Show Axes: false 618 | Show Trail: false 619 | Value: true 620 | r_upper_arm_roll_link: 621 | Alpha: 1 622 | Show Axes: false 623 | Show Trail: false 624 | Value: true 625 | r_wrist_flex_link: 626 | Alpha: 1 627 | Show Axes: false 628 | Show Trail: false 629 | Value: true 630 | r_wrist_roll_link: 631 | Alpha: 1 632 | Show Axes: false 633 | Show Trail: false 634 | Value: true 635 | sensor_mount_link: 636 | Alpha: 1 637 | Show Axes: false 638 | Show Trail: false 639 | Value: true 640 | torso_lift_link: 641 | Alpha: 1 642 | Show Axes: false 643 | Show Trail: false 644 | Value: true 645 | Robot Alpha: 0.5 646 | Show Scene Robot: true 647 | Value: true 648 | Enabled: true 649 | Global Options: 650 | Background Color: 48; 48; 48 651 | Fixed Frame: /base_link 652 | Name: root 653 | Tools: 654 | - Class: rviz/Interact 655 | Hide Inactive Objects: true 656 | - Class: rviz/MoveCamera 657 | - Class: rviz/Select 658 | Value: true 659 | Views: 660 | Current: 661 | Class: rviz/XYOrbit 662 | Distance: 2.9965 663 | Focal Point: 664 | X: 0.113567 665 | Y: 0.10592 666 | Z: 2.23518e-07 667 | Name: Current View 668 | Near Clip Distance: 0.01 669 | Pitch: 0.509797 670 | Target Frame: /base_link 671 | Value: XYOrbit (rviz) 672 | Yaw: 5.65995 673 | Saved: ~ 674 | Window Geometry: 675 | Displays: 676 | collapsed: false 677 | Height: 1337 678 | Help: 679 | collapsed: false 680 | Hide Left Dock: false 681 | Hide Right Dock: false 682 | Motion Planning: 683 | collapsed: false 684 | QMainWindow State: 000000ff00000000fd0000000100000000000002a2000004bcfc0200000005fb000000100044006900730070006c00610079007301000000410000032d000000dd00fffffffb0000000800480065006c00700000000342000000bb0000007600fffffffb0000000a0056006900650077007300000003b0000000b0000000b000fffffffb0000000c00430061006d00650072006100000002ff000001610000000000000000fb0000001e004d006f00740069006f006e00200050006c0061006e006e0069006e00670100000374000001890000017400ffffff0000047a000004bc00000001000000020000000100000002fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000 685 | Views: 686 | collapsed: false 687 | Width: 1828 688 | X: 459 689 | Y: -243 690 | --------------------------------------------------------------------------------