Moveit!(1.0.5)之ROS1Melodic版本发布~~

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<moveit::planning_interface::MoveItCpp>(nh);auto planning_components =std::make_shared<moveit::planning_interface::PlanningComponent>(PLANNING_GROUP, moveit_cpp_ptr);
auto robot_model_ptr = moveit_cpp_ptr->getRobotModel();
auto robot_start_state = planning_components->getStartState();
auto joint_model_group_ptr = robot_model_ptr->getJointModelGroup(PLANNING_GROUP);

可视化

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支持等。

MoveIt!之ROS1Melodic版本发布(MoveItCpp教程)相关推荐

  1. 2020年Spring Cloud最后一个大版本发布!

    2020年12月22日,Spring Cloud 2020.0 正式发布GA版本! 版本说明 每次Spring Cloud的大版本发布,我们都要先弄清楚,它对应的Spring Boot版本是哪个! 该 ...

  2. 前瞻:Spring Boot 2.4.0 第二个里程碑版本发布

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | https://www.oschina.net ...

  3. Kafka 1.0版本发布

    Kafka 1.0版本发布 1.0.0 2017年11月1日发布 源码下载: kafka-1.0.0-src.tgz(asc,sha512) 二进制下载: Scala 2.11 - kafka_2.1 ...

  4. 禅道项目管理_禅道 11.6.1 版本发布,完善细节,修复 Bug

    禅道项目管理软件集产品管理.项目管理.质量管理.文档管理.组织管理和事务管理于一体,是一款功能完备的项目管理软件,完美地覆盖了项目管理的核心流程.禅道官网:www.zentao.net. 大家好,禅道 ...

  5. 微软CNTK 2.0版本发布,支持C#

    微软 CNTK 2.0 版本今天正式发布. CNTK(Cognitive Toolkit)是微软的深度学习工具包,可以帮助企业加速图像和语音识别进程.有了今天的更新,企业可以在本地或云端结合 Azur ...

  6. 荣耀6plus+android5.1,荣耀66Plus EMUI3.0开发版5.5.1版本发布说明

    本帖最后由 秀姬 于 2015-6-8 11:22 编辑 EMUI 3.0_Android4.4_5.5.1 版本发布说明(开发版) 适配机型: 荣耀6 / 荣耀6 Plus 全系列机型 下载地址: ...

  7. Excel和Word 简易工具类,JEasyPoi 2.1.5 版本发布

    Excel和Word 简易工具类,JEasyPoi 2.1.5 版本发布 摘要: jeasypoi 功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员 就可以方便的写出Excel导 ...

  8. Kubernetes 1.13 版本发布:Kubeadm简化群集管理、容器存储接口(CSI)和CoreDNS作为默认DNS现已普遍可用

    Kubernetes 1.13 版本发布 Kubeadm简化群集管理.容器存储接口(CSI)和CoreDNS作为默认DNS现已普遍可用 我们很高兴地宣布推出Kubernetes 1.13,这是我们20 ...

  9. 尝试自动重定向的次数太多_阿里Arthas 3.1.0版本:在线教程、内存编译器和强大的自动补全...

    摘要: `Arthas`是Alibaba开源的Java诊断工具,深受开发者喜爱. 从Arthas上个版本发布,已经过去两个多月了,Arthas 3.1.0版本不仅带来大家投票出来的新LOGO,还带来强 ...

最新文章

  1. 如何知道当前像素的顶点坐标_GT 大神 | 如何高效渲染流体效果(绝对干货)
  2. JSONEasy的用法(JSONDateHandler)
  3. asp建站系统源码_【服务器安全】windows系统安全注意事项
  4. ●(考试失误导致的)倍增总结
  5. innodb和myisam数据类型,即在存储上有何特点和区别
  6. H264和AAC合成FLV案例
  7. 西交计算机专业912一样吗,西安交大912(总分404 专业课133分)经验总结
  8. js处理上下文代码的2个阶段
  9. vscode在windows10系统下进行go语言编程(无法代码提示)
  10. 内部网关协议和外部网关协议
  11. python 执行shell_python执行shell命令四法
  12. 《数字图像处理》实验7
  13. 可以嵌入ppt的课堂点名器_宏大智慧课堂支招:孩子和学霸的差距,就在课上课下55分钟里...
  14. Acwing 1402. 星空之夜(搜索+哈希)
  15. Uniapp实现加入购物车抛物线效果
  16. 河北源达靠谱吗?股市如战场,可靠的选股软件很关键
  17. centos 虚拟机出问题 Oh no,something has gone wrong! 解决方法
  18. 三星Android Pie软件,至少在AndroidPie版本上的三星GalaxyS9现在具有缺陷检测功能
  19. 三次技术转型,程序员的北漂奋斗史 | 程序员有话说
  20. POJ1753:翻棋子

热门文章

  1. 基于STM32的智能手表
  2. 企业为什么要制定精益标准工时?看完这篇就懂了!
  3. 哈师大计算机大一上学期课表,哈尔滨师范大学课程表.doc
  4. (翻译)标签模式(Tagging)
  5. 伯恩斯新情绪疗法--反驳消极想法
  6. python画不同颜色的直方图_python - 使用matplotlib同时绘制两个直方图
  7. TCP(传输控制协议)和UDP(用户数据报协议)的区别
  8. 安卓学习Day05:阅读古诗
  9. arm linux php,在ARM Linux系统上面安装Apache+sqlite+PHP的详细讲解 - Apache - 数安时代(GDCA)SSL证书官网...
  10. TCP建立连接『三次握手』