ros项目dual_arm_pick-place(moveit和gazebo联合仿真)(一)

目录

  • 前言
  • 正文
    • 创建功能包
    • 具体代码
    • 运行
  • 总结

前言

dual_arm_pick-place项目中,实现了两套的moveit和gazebo联合仿真

启动文件分别是bringup_moveit.launcharm_bringup_moveit.launch

在这里插入图片描述
在这里插入图片描述

在这个项目中,我将代码重新创建了一个包,co_simulation,这个包里面只需要五个文件**(两个yaml文件,三个launch文件)**,我尝试后,就能够实现联合仿真,而且调用的是我自己创建的moveit配置助手包marm_moveit_config

这个意思是说,理论上来说,我们不需要对moveit配置助手包内容进行任何改变操作,就能够实现联合仿真。

但是,不好意思的是,目前我只在这里进行了测试,其他项目中,还没来得及测试,但是,我觉得,肯定会遇到一些问题。

不过,本项目是可以完全放心使用的。

正文

这里需要注意的是,我上文中说的是五个文件,有同学会问,这里不是六个嘛。

  • bringup_moveit_config.launch是使用的我自己创建的moveit配置助手创建的包marm_moveit_config,里面内容没有更改。
  • bringup_moveit.launch使用的是作者使用moveit配置助手创建的marmbots包。

两种我都试过了,都可以实现联合仿真。所以我才说的,不需要修改moveit配置助手包就能使用。

在这里插入图片描述

创建功能包

catkin_create_pkg co_simulation urdf xacro gazebo_ros gazebo_ros_control gazebo_plugins

我这里创建功能包,喜欢多写一些依赖项。

项目树长这样

├── CMakeLists.txt
├── config
│   ├── joint_state_controller.yaml
│   └── trajectory_controller.yaml
├── launch
│   ├── bringup_gazebo.launch
│   ├── bringup_moveit_config.launch
│   ├── bringup_moveit.launch
│   └── controller_utils.launch
└── package.xml

具体代码

co_simulation/config/joint_state_controller.yaml

joint_state_controller:type: joint_state_controller/JointStateControllerpublish_rate: 50  

co_simulation/config/trajectory_controller.yaml

arma_trajectory_controller:type: "position_controllers/JointTrajectoryController"joints:- joint1a- joint2a- joint3a- joint4a- joint5a- joint6aconstraints:goal_time: 0.6stopped_velocity_tolerance: 0.05joint1a: {trajectory: 0.1, goal: 0.1}joint2a: {trajectory: 0.1, goal: 0.1}joint3a: {trajectory: 0.1, goal: 0.1}joint4a: {trajectory: 0.1, goal: 0.1}joint5a: {trajectory: 0.1, goal: 0.1}joint6a: {trajectory: 0.1, goal: 0.1}stop_trajectory_duration: 0.5state_publish_rate:  25action_monitor_rate: 10armb_trajectory_controller:type: "position_controllers/JointTrajectoryController"joints:- joint1b- joint2b- joint3b- joint4b- joint5b- joint6bconstraints:goal_time: 0.6stopped_velocity_tolerance: 0.05joint1b: {trajectory: 0.1, goal: 0.1}joint2b: {trajectory: 0.1, goal: 0.1}joint3b: {trajectory: 0.1, goal: 0.1}joint4b: {trajectory: 0.1, goal: 0.1}joint5b: {trajectory: 0.1, goal: 0.1}joint6b: {trajectory: 0.1, goal: 0.1}stop_trajectory_duration: 0.5state_publish_rate:  25action_monitor_rate: 10#notice that the grippers joint2 mimics joint1
#this is why it is not listed under the hand controllers
handa_controller:type: "position_controllers/JointTrajectoryController"joints:- finger_joint1agains:finger_joint1a:  {p: 50.0, d: 1.0, i: 0.01, i_clamp: 1.0}handb_controller:type: "position_controllers/JointTrajectoryController"joints:- finger_joint1bgains:finger_joint1b:  {p: 50.0, d: 1.0, i: 0.01, i_clamp: 1.0}

co_simulation/launch/bringup_gazebo.launch

<?xml version="1.0"?>
<launch>
<!-- 打开gazebo仿真 --><!-- Launch empty Gazebo world --><include file="$(find gazebo_ros)/launch/empty_world.launch"><arg name="use_sim_time" value="true" /><!-- <arg name="world_name" value="$(find test_gazebos_att)/worlds/test_attacher.world"/> --><arg name="gui" value="true" /><arg name="paused" value="false" /><arg name="debug" value="false" /></include><!-- Load the robot description file--><param name="robot_description" command="$(find xacro)/xacro  '$(find marm_description)/urdf/arms2b.xacro'" /><!-- Spawn the robot over the robot_description param--><node name="urdf_spawner" pkg="gazebo_ros" type="spawn_model" respawn="false" output="screen" args="-urdf -param robot_description -model arms" />
</launch>

co_simulation/launch/bringup_moveit_config.launch

<?xml version="1.0"?>
<launch><!-- Run the main MoveIt executable with trajectory execution --><include file="$(find marm_moveit_config)/launch/move_group.launch"><arg name="allow_trajectory_execution" value="true" /><arg name="moveit_controller_manager" value="ros_control" /><arg name="fake_execution_type" value="interpolate" /><arg name="info" value="true" /><arg name="debug" value="false" /><arg name="pipeline" value="ompl" /><arg name="load_robot_description" value="true" /></include><!-- Start the simulated robot in an empty Gazebo world --><include file="$(find co_simulation)/launch/bringup_gazebo.launch" /><!-- Start the controllers and robot state publisher--><include file="$(find co_simulation)/launch/controller_utils.launch"/><!-- Start moveit_rviz with the motion planning plugin --><include file="$(find marm_moveit_config)/launch/moveit_rviz.launch"><arg name="rviz_config" value="$(find marm_moveit_config)/launch/moveit.rviz" /></include></launch>

co_simulation/launch/bringup_moveit.launch

<?xml version="1.0"?>
<launch><!-- Run the main MoveIt executable with trajectory execution --><include file="$(find marmbots)/launch/move_group.launch"><arg name="allow_trajectory_execution" value="true" /><arg name="moveit_controller_manager" value="ros_control" /><arg name="fake_execution_type" value="interpolate" /><arg name="info" value="true" /><arg name="debug" value="false" /><arg name="pipeline" value="ompl" /><arg name="load_robot_description" value="true" /></include><!-- Start the simulated robot in an empty Gazebo world --><include file="$(find co_simulation)/launch/bringup_gazebo.launch" /><!-- Start the controllers and robot state publisher--><include file="$(find co_simulation)/launch/controller_utils.launch"/><!-- Start moveit_rviz with the motion planning plugin --><include file="$(find marmbots)/launch/moveit_rviz.launch"><arg name="rviz_config" value="$(find marmbots)/launch/moveit.rviz" /></include></launch>

co_simulation/launch/controller_utils.launch

<?xml version="1.0"?>
<launch><!-- Robot state publisher --><node pkg="robot_state_publisher" type="robot_state_publisher" name="robot_state_publisher"><param name="publish_frequency" type="double" value="50.0" /><param name="tf_prefix" type="string" value="" /></node><!-- Joint state controller --><rosparam file="$(find co_simulation)/config/joint_state_controller.yaml" command="load" /><node name="joint_state_controller_spawner" pkg="controller_manager" type="spawner" args="joint_state_controller" respawn="false" output="screen" /><!-- Joint trajectory controller --><rosparam file="$(find co_simulation)/config/trajectory_controller.yaml" command="load" /><node name="arms_trajectory_controller_spawner" pkg="controller_manager" type="spawner" respawn="false" output="screen" args="arma_trajectory_controller armb_trajectory_controller handa_controller handb_controller" /></launch>

运行

以下两个命令都可以实现

roslaunch co_simulation bringup_moveit.launch 
roslaunch co_simulation bringup_moveit_config.launch 

总结

用这种方式实现联合仿真比较简单,但是,不太清楚,其他的项目,能否用这种方式去实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/62399.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL 索引(B+树)详解

MySQL 索引&#xff08;B树&#xff09;详解 MySQL逻辑架构对比InnoDB与MyISAM存储结构存储空间可移植性、备份及恢复事务支持AUTO_INCREMENT表锁差异全文索引表主键表的具体行数CRUD操作外键 sql优化简介什么情况下进行sql优化sql语句执行过程sql优化就是优化索引 索引索引的优…

MySQL生产环境备份脚本

全量备份脚本&#xff0c;其中BakDir&#xff0c;ZlbakDir&#xff0c;LogFile需要自己创建 #!/bin/bash export LANGen_US.UTF-8# 指定备份目录 BakDir/root/beifen/data/mysqlbak/data/allbak # 指定增量备份目录 ZlbakDir/root/beifen/data/mysqlbak/data/zlbak # 备份日志…

HTTP multipart/form-data 请求

序言 最近在写项目的过程中有一个需求是利用 HTTP 协议传输图片和视频&#xff0c;经过查询方法相应的方法发现使用 multipart/form-data 的方式&#xff0c;这是最常见处理二进制文件的表单编码类型。  学习了一下午&#xff0c;现在总结一下使用的方法和相关的知识点&#x…

Linux下redis环境的搭建

1.redis的下载 redis官网下载redis的linux压缩包&#xff0c;官网地址:Redis下载 网盘链接&#xff1a; 通过网盘分享的文件&#xff1a;redis-5.0.4.tar.gz 链接: https://pan.baidu.com/s/1cz3ifYrDcHWZXmT1fNzBrQ?pwdehgj 提取码: ehgj 2.redis安装与配置 将包上传到 /…

如何使用靜態IP代理?【詳細教程】

靜態IP地址是手動分配給設備或伺服器的固定不變的 IP。與動態 IP 地址不同&#xff0c;動態 IP 地址由 DHCP 伺服器自動分配&#xff0c;並且會隨時間而變化。​​​​​​​ 如何獲取和設置靜態IP地址 一、檢查是否需要靜態IP&#xff1f; 在配置靜態 IP 之前&#xff0c;請…

监控组态软件的构成与功能

监控组态软件的构成包括系统开发环境、图形界面系统、实时数据库系统等。其功能包括数据采集与控制、人机交互界面、数据处理与存储等。 监控组态软件的构成&#xff1a; 系统开发环境&#xff1a;这是自动化工程设计工程师为实施其控制方案&#xff0c;在组态软件的支持下进行…

Java 基础之 XQuery:强大的 XML 查询语言

一、什么是 XQuery XQuery 是一种函数式语言&#xff0c;专门用于检索以 XML 格式存储的信息。它负责从 XML 文档中查找和提取元素及属性&#xff0c;在网络服务中有着广泛的应用&#xff0c;比如提取信息、生成摘要报告、进行数据转换等。 XQuery 是 W3C 设计的一种针对于 X…

day09性能测试(1)——纯理论

document.querySelector(video).playbackRate 2.5 //可以写任何数字 【没有所谓的运气&#x1f36c;&#xff0c;只有绝对的努力✊】 目录 1、性能测试概念 2、功能测试 vs 性能测试 3、小结&#xff08;习题&#xff09; 4、性能测试的策略 4.1 基准测试 4.2 负载测试 …

docker-3.docker权限问题

docker权限,每次开机都要重新sudo 目录 1.简介2.解决办法1:当前用户添加到docker用户组(这个方法还是缺权限??)3.解决办法2:临时更改Docker socket文件权限1.简介 Ubuntu下Docker提示permission denied (权限不足)解决办法 安装docker后,执行docker ps命令时提示 perm…

easyExcel实现表头批注

背景&#xff1a; 网上大部分都不能直接使用&#xff0c;为此总结一个方便入手且可用的工具&#xff0c;用自定义注解实现 依赖包&#xff1a; <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>…

内部类和Object类

匿名对象 格式&#xff1a; 匿名对象只可以调用一次成员 &#xff1a; 1. 调用一次成员变量 &#xff1a; new 类名(实参).成员变量名&#xff1b; 2.调用一次成员方法&#xff1a; new 类名(实参).成员方法名(实参)&#xff1b; 匿名对象存在的必要&#xff1a;为了提高…

Python的3D可视化库vedo 1-3 (visual模块)网格对象的线和面、图片的属性

文章目录 4 MeshVisual4.1 线条4.1.1 线宽和颜色4.1.2 线条渲染为管 4.2 曲面4.2.1 物体展示为实心或框架4.2.2 曲面插值4.2.3 面的剔除 4.3 纹理4.4 相机跟随 5 ImageVisual5.1 图片属性5.1.1 占用内存大小5.1.2 颜色标量范围 5.2 渲染属性5.2.1 透明度5.2.2 亮度5.2.3 对比度…

19 设计模式之享元模式(电影院座位预定案例)

一、享元模式的定义 享元模式是一种结构型设计模式&#xff0c;它通过共享对象来支持大量细粒度的对象&#xff0c;减少内存消耗。享元模式的核心思想是&#xff1a;将对象分为共享部分和非共享部分&#xff0c;只有共享部分是被多个对象共享的&#xff0c;而非共享部分则是每个…

使用redis 的stream 做消息中间件 多线程消费消息

1.redis stream 特点 1.支持消息持久化 2.消费者组模式 3.消息确认机制 4. 消息重试机制 5. 死信队列2. 消息生产者服务 2.1 如下代码Service Slf4j public class StreamMessageProducer {Autowiredprivate StringRedisTemplate redisTemplate;private static final String S…

Python100道练习题

Python100道练习题 BIlibili 1、两数之和 num1 20 num2 22result num1 num2print(result)2、一百以内的偶数 list1 []for i in range(1,100):if i % 2 0:list1.append(i) print(list1)3、一百以内的奇数 # 方法一 list1 [] for i in range(1,100):if i % 2 ! 0:lis…

Java转C之并发和多线程

提纲&#xff1a; 概念介绍与对比概述 简述Java与C在并发和多线程方面的核心区别解释C11标准、POSIX、C11 <threads.h>、Pthread等名词 Java多线程与并发回顾 线程、Runnable、ExecutorService概念说明同步关键字与工具类含义 C并发基础 没有Java式的内置线程类&#xf…

Ubuntu系统本地化搭建Maxakb+Ollama

安装docker 最详细的ubuntu 安装 docker教程-腾讯云开发者社区-腾讯云 安装Ollama Ollama官网 执行命令&#xff1a; curl -fsSL https://ollama.com/install.sh | sh安装完成后下载模型 执行命令&#xff1a; ollama run llama3.3:70b安装MaxKb 执行命令&#xff1a; d…

基于JAVA的旅游网站系统设计

摘要 随着信息技术和网络技术的迅速发展&#xff0c;人们的生活质量和观念也在发生着改变&#xff0c;各地争相发展旅游业&#xff0c;传统的 旅游社已经无法满足人们的需求&#xff0c;旅游网站将突破传统在时间和地域的限制&#xff0c;成为方便、快捷、安全、可靠的旅游 方…

【Flux.jl】 卷积神经网络

Flux.jl 是包含卷积神经网络的, 但是官方API文件中没有给出一个完整的程序框架, 只是对所需神经元给了局部解释, 此外对 model-zoo 模型动物园中的案例没有及时跟着 Flux.jl 的版本更新, 也无法运行出来结果。 因此本文搭建了一个完整可训练的卷积神经网络。 Conv 卷积算子…

H5游戏出海如何获得更多增长机会?

海外H5小游戏的崛起给了国内众多中小厂商出海发展的机会&#xff0c;开发者如何在海外市场获得更多的增长机会&#xff1f;#APP出海# H5游戏如何在海外获得核心用户&#xff1f; HTML5游戏的开发与运营者们首先可以利用量多质高的HTML5游戏&#xff0c;维持海外用户粘性&…