MoveIt!之ROS1Melodic版本發布(MoveItCpp教程)

      網友投稿 1181 2025-04-01

      moveit!(1.0.5)之ROS1Melodic版本發布~~

      MoveIt!之ROS1Melodic版本發布(MoveItCpp教程)

      moveit_cpp:

      對于通過C++類方便地訪問MoveIt!功能的用戶,有一個全新的高級API。

      官方文檔:https://ros-planning.github.io/moveit_tutorials/doc/getting_started/getting_started.html

      教程版本:專業級

      這是正在積極開發的最新版本。對于初學者,我們推薦穩定的Melodic教程。如果仍在運行Kinetic版本,請使用Kinetic教程。

      MoveItCpp教程

      介紹

      MoveItCpp是一個新的高級接口,它是不需要使用ROS操作,服務和消息即可訪問核心MoveIt! 功能的統一C++ API,并且是現有MoveGroup API的替代方法(不是完全替代),建議該界面適用于需要更多實時控制的高級用戶或行業應用。PickNik Robotics已根據許多商業應用開發了此接口。

      入門

      如果尚未這樣做,請確保已完成“入門”中的步驟。

      運行代碼

      打開一個shell,運行啟動文件:

      roslaunch moveit_tutorials moveit_cpp_tutorial.launch

      注意:本教程使用RvizVisualToolsGui面板逐步演示。要將此面板添加到RViz,請遵循“?可視化教程”中的說明。

      片刻之后,將出現RViz窗口,其外觀類似于此頁面頂部的窗口。要通過每一步演示或者按進度在接下來的按鈕RvizVisualToolsGui在屏幕的底部面板或選擇關鍵工具的工具,在屏幕的頂部面板,然后按你的鍵盤上N,此時RViz為活動窗口。

      整個代碼

      完整的代碼可以在MoveIt GitHub項目中找到。接下來,逐步地講解代碼,解釋其功能。

      配置

      static const std::string PLANNING_GROUP = "panda_arm"; static const std::string LOGNAME = "moveit_cpp_tutorial"; /* Otherwise robot with zeros joint_states */

      / *否則,機器人的關節編號為零* /

      ros::Duration(1.0).sleep(); ROS_INFO_STREAM_NAMED(LOGNAME, "Starting MoveIt Tutorials..."); auto moveit_cpp_ptr = std::make_shared(nh); auto planning_components = std::make_shared(PLANNING_GROUP, moveit_cpp_ptr); auto robot_model_ptr = moveit_cpp_ptr->getRobotModel(); auto robot_start_state = planning_components->getStartState(); auto joint_model_group_ptr = robot_model_ptr->getJointModelGroup(PLANNING_GROUP);

      可視化

      MoveItVisualTools軟件包提供了許多功能,用于可視化RViz中的對象,機器人和軌跡以及調試工具(例如腳本的逐步自省)

      moveit_visual_tools::MoveItVisualTools visual_tools("panda_link0", rvt::RVIZ_MARKER_TOPIC, moveit_cpp_ptr->getPlanningSceneMonitor()); visual_tools.deleteAllMarkers(); visual_tools.loadRemoteControl(); Eigen::Isometry3d text_pose = Eigen::Isometry3d::Identity(); text_pose.translation().z() = 1.75; visual_tools.publishText(text_pose, "MoveItCpp Demo", rvt::WHITE, rvt::XLARGE); visual_tools.trigger();

      開始演示

      visual_tools.prompt("Press 'next' in the RvizVisualToolsGui window to start the demo");

      使用MoveItCpp進行規劃

      在以下計劃示例中說明了設置規劃開始和目標狀態的多種方法。

      規劃1

      我們可以將規劃的開始狀態設置為機器人的當前狀態

      planning_components->setStartStateToCurrentState();

      設置計劃目標的第一種方法是使用geometry_msgs :: PoseStamped ROS消息類型,如下所示

      geometry_msgs::PoseStamped target_pose1; target_pose1.header.frame_id = "panda_link0"; target_pose1.pose.orientation.w = 1.0; target_pose1.pose.position.x = 0.28; target_pose1.pose.position.y = -0.2; target_pose1.pose.position.z = 0.5; planning_components->setGoal(target_pose1, "panda_link8");

      現在,調用PlanningComponents來計算規劃并對其進行可視化。請注意,我們只是在規劃

      auto plan_solution1 = planning_components->plan();

      檢查PlanningComponents是否成功找到規劃的解

      if (plan_solution1) {

      在Rviz中可視化起始姿勢

      visual_tools.publishAxisLabeled(robot_start_state->getGlobalLinkTransform("panda_link8"), "start_pose"); visual_tools.publishText(text_pose, "Start Pose", rvt::WHITE, rvt::XLARGE);

      在Rviz中可視化目標姿勢

      visual_tools.publishAxisLabeled(target_pose1.pose, "target_pose"); visual_tools.publishText(text_pose, "Goal Pose", rvt::WHITE, rvt::XLARGE);

      在Rviz中可視化軌跡

      visual_tools.publishTrajectoryLine(plan_solution1.trajectory, joint_model_group_ptr); visual_tools.trigger(); /* Uncomment if you want to execute the plan */ /* planning_components->execute(); // Execute the plan */ }

      開始下一個規劃

      visual_tools.deleteAllMarkers(); visual_tools.prompt("Press 'next' in the RvizVisualToolsGui window to continue the demo");

      規劃2

      在這里,我們將使用moveit :: core :: RobotState設置規劃的當前狀態。

      auto start_state = *(moveit_cpp_ptr->getCurrentState()); geometry_msgs::Pose start_pose; start_pose.orientation.w = 1.0; start_pose.position.x = 0.55; start_pose.position.y = 0.0; start_pose.position.z = 0.6; start_state.setFromIK(joint_model_group_ptr, start_pose); planning_components->setStartState(start_state);

      將重用曾經的舊目標并對其進行規劃。

      auto plan_solution2 = planning_components->plan(); if (plan_solution2) { moveit::core::RobotState robot_state(robot_model_ptr); moveit::core::robotStateMsgToRobotState(plan_solution2.start_state, robot_state); visual_tools.publishText(text_pose, "Start Pose", rvt::WHITE, rvt::XLARGE); visual_tools.publishAxisLabeled(robot_state.getGlobalLinkTransform("panda_link8"), "start_pose"); visual_tools.publishText(text_pose, "Goal Pose", rvt::WHITE, rvt::XLARGE); visual_tools.publishAxisLabeled(target_pose1.pose, "target_pose"); visual_tools.publishTrajectoryLine(plan_solution2.trajectory, joint_model_group_ptr); visual_tools.trigger(); /* Uncomment if you want to execute the plan */

      / *如果要執行計劃,請取消注釋* /

      /* planning_components->execute(); // Execute the plan */ }

      開始下一個規劃

      visual_tools.deleteAllMarkers(); visual_tools.prompt("Press 'next' in the RvizVisualToolsGui window to continue the demo");

      規劃3

      我們還可以使用moveit :: core :: RobotState設置規劃的目標

      auto target_state = *robot_start_state; geometry_msgs::Pose target_pose2; target_pose2.orientation.w = 1.0; target_pose2.position.x = 0.55; target_pose2.position.y = -0.05; target_pose2.position.z = 0.8; target_state.setFromIK(joint_model_group_ptr, target_pose2); planning_components->setGoal(target_state);

      將重用以前的開始,并從中規劃。

      auto plan_solution3 = planning_components->plan(); if (plan_solution3) { moveit::core::RobotState robot_state(robot_model_ptr); moveit::core::robotStateMsgToRobotState(plan_solution3.start_state, robot_state); visual_tools.publishText(text_pose, "Start Pose", rvt::WHITE, rvt::XLARGE); visual_tools.publishAxisLabeled(robot_state.getGlobalLinkTransform("panda_link8"), "start_pose"); visual_tools.publishText(text_pose, "Goal Pose", rvt::WHITE, rvt::XLARGE); visual_tools.publishAxisLabeled(target_pose2, "target_pose"); visual_tools.publishTrajectoryLine(plan_solution3.trajectory, joint_model_group_ptr); visual_tools.trigger(); /* Uncomment if you want to execute the plan */

      / *如果要執行計劃,請取消注釋* /

      /* planning_components->execute(); // Execute the plan */ }

      開始下一個規劃

      visual_tools.deleteAllMarkers(); visual_tools.prompt("Press 'next' in the RvizVisualToolsGui window to continue the demo");

      規劃4

      我們可以將規劃的開始狀態設置為機器人的當前狀態,可以使用熊貓機器人的組狀態名稱來設置計劃的目標,我們為“ panda_arm”計劃組命名為“ ready”的機器人狀態參見panda_arm.xacro

      /* // Set the start state of the plan from a named robot state */

      / * //從已命名的機器人狀態設置計劃的開始狀態* /

      /* planning_components->setStartState("ready"); // Not implemented yet */

      從命名的機器人狀態設置計劃的目標狀態

      planning_components->setGoal("ready");

      再次,我們將重用我們曾經的舊起點并從中計劃。

      auto plan_solution4 = planning_components->plan(); if (plan_solution4) { moveit::core::RobotState robot_state(robot_model_ptr); moveit::core::robotStateMsgToRobotState(plan_solution4.start_state, robot_state); visual_tools.publishText(text_pose, "Start Pose", rvt::WHITE, rvt::XLARGE); visual_tools.publishAxisLabeled(robot_state.getGlobalLinkTransform("panda_link8"), "start_pose"); visual_tools.publishText(text_pose, "Goal Pose", rvt::WHITE, rvt::XLARGE); visual_tools.publishAxisLabeled(robot_start_state->getGlobalLinkTransform("panda_link8"), "target_pose"); visual_tools.publishTrajectoryLine(plan_solution4.trajectory, joint_model_group_ptr); visual_tools.trigger(); /* Uncomment if you want to execute the plan */

      / *如果要執行計劃,請取消注釋* /

      /* planning_components->execute(); // Execute the plan */ }

      啟動文件

      整個啟動文件是這里?GitHub上。本教程中的所有代碼都可以從MoveIt設置中包含的moveit_tutorials包中運行。

      附加功能:

      允許時間最優軌跡生成的輸入軌跡密度的參數化

      通過ompl_planning.yaml在ModelBasedPlanningContext中添加對雜交/內插標志的支持

      提高PlanningSceneDisplay的響應速度

      在PlanningComponent中使用plan_request_params

      提供在rviz中縮放大網格

      加快PlanningSceneDisplay

      添加對PS4游戲桿的支持

      將use_rviz添加到setup_assistant配置助手中的demo.launch

      Bug修復:包括異常行為,程序段故障,內存泄漏和Python3支持等。

      機器人

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:怎么批量去掉身份證號前的單引號(如何批量將身份證號前的單引號去掉)
      下一篇:華為云WeLink云端會議+云端直播,給你不一樣的體驗!
      相關文章
      亚洲另类小说图片| 亚洲精品国产啊女成拍色拍| 亚洲一级片在线观看| 亚洲无线电影官网| 国产成A人亚洲精V品无码| 国产成人精品日本亚洲专区61| 亚洲情侣偷拍精品| 亚洲免费无码在线| 无码专区一va亚洲v专区在线| 久久亚洲AV成人无码国产电影| 亚洲av无码一区二区三区天堂| 亚洲色少妇熟女11p| 亚洲一本到无码av中文字幕| 亚洲依依成人亚洲社区| 亚洲精品无播放器在线播放| 亚洲精品欧美综合四区| 亚洲欧美日韩综合久久久久| 亚洲精品中文字幕| 99亚洲精品卡2卡三卡4卡2卡| 国产亚洲日韩在线a不卡| 亚洲成A人片在线观看中文| 久久精品亚洲乱码伦伦中文| 2022中文字字幕久亚洲| 亚洲永久精品ww47| 亚洲av无码潮喷在线观看| 亚洲一区精品中文字幕| 亚洲日本香蕉视频观看视频| 2020年亚洲天天爽天天噜| 亚洲欧美日韩中文无线码| 日韩精品亚洲专区在线影视| 一区国严二区亚洲三区| 久久久久亚洲AV无码专区桃色| 亚洲精品乱码久久久久久 | 亚洲成AV人片天堂网无码| 久久亚洲国产伦理| 亚洲熟妇无码爱v在线观看| 在线观看亚洲AV日韩AV| 亚洲av成本人无码网站| 亚洲一级黄色视频| 亚洲av一综合av一区| 亚洲精品一区二区三区四区乱码|