ROS学习第三十七节——机器人运动控制以及里程计信息显示

news/2024/3/28 16:46:49/文章来源:https://blog.csdn.net/qq_45685327/article/details/130325736

https://download.csdn.net/download/qq_45685327/87719766

https://download.csdn.net/download/qq_45685327/87719873

gazebo 中已经可以正常显示机器人模型了,那么如何像在 rviz 中一样控制机器人运动呢?在此,需要涉及到ros中的组件: ros_control。

1.ros_control 简介

场景:同一套 ROS 程序,如何部署在不同的机器人系统上,比如:开发阶段为了提高效率是在仿真平台上测试的,部署时又有不同的实体机器人平台,不同平台的实现是有差异的,如何保证 ROS 程序的可移植性?ROS 内置的解决方式是 ros_control。

ros_control:是一组软件包,它包含了控制器接口,控制器管理器,传输和硬件接口。ros_control 是一套机器人控制的中间件,是一套规范,不同的机器人平台只要按照这套规范实现,那么就可以保证 与ROS 程序兼容,通过这套规范,实现了一种可插拔的架构设计,大大提高了程序设计的效率与灵活性。

gazebo 已经实现了 ros_control 的相关接口,如果需要在 gazebo 中控制机器人运动,直接调用相关接口即可

2.运动控制实现流程(Gazebo)

2.1创建gazebo文件夹,并在其中创建move.xacro文件

两轮差速配置

<robot name="my_car_move" xmlns:xacro="http://wiki.ros.org/xacro"><xacro:macro name="joint_trans" params="joint_name"><!-- Transmission is important to link the joints and the controller --><transmission name="${joint_name}_trans"><type>transmission_interface/SimpleTransmission</type><joint name="${joint_name}"><hardwareInterface>hardware_interface/VelocityJointInterface</hardwareInterface></joint><actuator name="${joint_name}_motor"><hardwareInterface>hardware_interface/VelocityJointInterface</hardwareInterface><mechanicalReduction>1</mechanicalReduction></actuator></transmission></xacro:macro><xacro:joint_trans joint_name="left_wheel2base_link" /><xacro:joint_trans joint_name="right_wheel2base_link" /><gazebo><plugin name="differential_drive_controller" filename="libgazebo_ros_diff_drive.so"><rosDebugLevel>Debug</rosDebugLevel><publishWheelTF>true</publishWheelTF><robotNamespace>/</robotNamespace><publishTf>1</publishTf><publishWheelJointState>true</publishWheelJointState><alwaysOn>true</alwaysOn><updateRate>100.0</updateRate><legacyMode>true</legacyMode><leftJoint>left_wheel2base_link</leftJoint><rightJoint>right_wheel2base_link</rightJoint> <wheelSeparation>${base_link_radius * 2}</wheelSeparation> <wheelDiameter>${wheel_radius * 2}</wheelDiameter> <broadcastTF>1</broadcastTF><wheelTorque>30</wheelTorque><wheelAcceleration>1.8</wheelAcceleration><commandTopic>cmd_vel</commandTopic><odometryFrame>odom</odometryFrame> <odometryTopic>odom</odometryTopic><robotBaseFrame>base_footprint</robotBaseFrame></plugin></gazebo></robot>

2.2xacro文件集成

最后还需要将上述 xacro 文件集成进总的机器人模型文件,代码示例如下:

deamo05_Gazebocar.xacro


<robot name="xacrocar" xmlns:xacro="http://wiki.ros.org/xacro"><xacro:include filename="head.xacro" /><xacro:include filename="deamo02_base.xacro" /><xacro:include filename="deamo03_camera.xacro" /><xacro:include filename="deamo04_laser.xacro" /><xacro:include filename="gazebo/move.xacro" />
</robot>

2.3运行lanuch文件,这里不需要重新编写launch,用上一节的就可以。

deamo03_car_world.launch

source ./devel/setup.bash
roslaunch urdf02_gazebo deamo03_car_world.launch

 运行查看效果

2.4 启动终端

首先查看话题,找到需要订阅的话题是/cmd_vel,使用该节点进行定阅,使用键盘进行控制

rostopic list
rosrun teleop_twist_keyboard teleop_twist_keyboard.py

使用命令控制(或者可以编写单独的节点控制)

rostopic pub -r 10 /cmd_vel geometry_msgs/Twist '{linear: {x: 0.2, y: 0, z: 0}, angular: {x: 0,

3.Rviz查看里程计信息

在 Gazebo 的仿真环境中,机器人的里程计信息以及运动朝向等信息是无法获取的,可以通过 Rviz 显示机器人的里程计信息以及运动朝向

里程计: 机器人相对出发点坐标系的位姿状态(X 坐标 Y 坐标 Z坐标以及朝向)。

3.1启动 Rviz

launch 文件编写

deamo04_sensors.launch

<launch><node pkg="rviz" type="rviz" name="rviz" args="-d $(find urdf01_rviz)/config/show_mycar.rviz" /> <!-- 添加关节状态发布节点 --><node pkg="joint_state_publisher" type="joint_state_publisher" name="joint_state_publisher" /><!-- 添加机器人状态发布节点 --><node pkg="robot_state_publisher" type="robot_state_publisher" name="robot_state_publisher" /></launch>

 执行deamo03_car_world.launch,这个是先运行模拟环境

source ./devel/setup.bash
roslaunch urdf02_gazebo deamo03_car_world.launch

再执行刚刚编写的rviz 的launch文件

deamo04_sensors.launch

roslaunch urdf02_gazebo deamo04_sensors.launch

最后执行定阅/cmd_vel的键盘控制节点

 3.2设置rviz

 3.3实际运行效果

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

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

相关文章

camunda的service task如何使用

在 Camunda 中&#xff0c;使用 Service Task 节点可以执行各种类型的业务逻辑&#xff0c;例如计算、数据转换、数据格式化等。在 Service Task 节点中&#xff0c;可以使用不同的编程语言来实现业务逻辑&#xff0c;例如 Java、JavaScript、Python 等。 下面是使用 Java 实现…

状态压缩DP-蒙德里安的梦想

题意 求把 NM 的棋盘分割成若干个 12 的长方形&#xff0c;有多少种方案。 例如当 N2&#xff0c;M4 时&#xff0c;共有 5 种方案。当 N2&#xff0c;M3 时&#xff0c;共有 3 种方案。 如下图所示&#xff1a; 输入格式 输入包含多组测试用例。 每组测试用例占一行&#xff0…

这份最新阿里、腾讯、华为、字节等大厂的薪资和职级对比,你看过没?

互联网大厂新入职员工各职级薪资对应表(技术线)~ 最新阿里、腾讯、华为、字节跳动等大厂的薪资和职级对比 上面的表格不排除有很极端的收入情况&#xff0c;但至少能囊括一部分同职级的收入。这个表是“技术线”新入职员工的职级和薪资情况&#xff0c;非技术线(如产品、运营、…

【Linux】环境变量与进程优先级知识点

目录 环境变量1.基本概念2.常见环境变量3.我们写的程序和命令行指令有什么区别&#xff1f;4.自己的程序为什么要用 ./ 执行&#xff0c;而命令行指令可以直接执行&#xff1f;5.如何追加环境变量&#xff1f;6.Linux如何查看环境变量7.如何在代码层面获取环境变量main函数的参…

ubuntu 3060显卡驱动+cuda+cudnn+pytorch+pycharm+vscode

文章目录 运行环境&#xff1a;适用&#xff1a;思路&#xff1a;1.1 3060显卡驱动自动安装2.1 CUDA11.1.11)下载CUDA Toolkit 11.1 Update 1 Downloads2)contunue , 然后accept3)回车取消Driver安装&#xff0c;然后install4)添加环境变量5)确认是否安装成功 3.1 cudnn 8.1.11…

【Cartopy基础入门】如何更好的确定边界显示

原文作者&#xff1a;我辈理想 版权声明&#xff1a;文章原创&#xff0c;转载时请务必加上原文超链接、作者信息和本声明。 Cartopy基础入门 【Cartopy基础入门】Cartopy的安装 【Cartopy基础入门】Geojson数据的加载 【Cartopy基础入门】如何更好的确定边界显示 文章目录 Ca…

【边缘计算】登临(Goldwasser-UL64)BW-BR2边缘设备配置指南

目录 开箱配置激活SDK环境测试cuda兼容性 开箱配置 更改盒子root用户密码&#xff1a; sudo passwd root(密码同为root) 切换到root用户身份&#xff1a; su root查看ssh的状态&#xff0c;没有返回说明没有启动 sudo ps -e|grep ssh此时说明ssh服务已启动。 更改ssh配置文…

java定位系统源码,通过独特的射频处理,配合先进的位置算法,可以有效计算出复杂环境下的人员与物品的活动信息

智慧工厂人员定位系统源码&#xff0c;区域电子围栏管控源码 文末获取联系&#xff01; 在工厂日常生产活动中&#xff0c;企业很难精准地掌握访客和承包商等各类人员的实际位置&#xff0c;且无法实时监控巡检人员的巡检路线&#xff0c;当厂区发生灾情或其他异常状况时&#…

postman安装

目录 下载、安装 Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件。 Postman原是Chrome浏览器的插件&#xff0c;可以模拟浏览器向后端服务器发起任何形式(如:get、post)的HTTP请求 使用Postman还可以在发起请求时&#xff0c;携带一些请求参数、请求头等信息…

WebSocket+Vue+SpringBoot实现语音通话

参考文章 整体思路 前端点击开始对话按钮后&#xff0c;将监听麦克风&#xff0c;获取到当前的音频&#xff0c;将其装化为二进制数据&#xff0c;通过websocket发送到webscoket服务端&#xff0c;服务端在接收后&#xff0c;将消息写入给指定客户端&#xff0c;客户端拿到发送…

日本PSE认证日本的電気用品安全法METI备案

日本的電気用品安全法&#xff08;PSE认证&#xff09;法规要求日本的采购商在购进商品后一个月内必须向日本METI注册申报&#xff0c;并必须将采购商名称或ID标在产品上&#xff0c;以便在今后产品销售过程中进行监督管理&#xff0c;完成后将获得電気用品製造事業届出書&…

Java基础学习(10)

Java基础学习 一、JDK8时间类1.1 Zoneld时区1.2 Instant时间戳1.3 ZonedDateTime1.4 DateTimeFormatter1.5 日历类时间表示1.6 工具类1.7 包装类JDK5提出的新特性Integer成员方法 二、集合进阶2.1 集合的体系结构2.1.1 Collection 2.2collection的遍历方式2.2.1 迭代器遍历2.2.…

元宇宙场景下的实时互动RTI技术能力构建

元宇宙可谓是处在风口浪尖&#xff0c;无数的厂商都对元宇宙未来抱有非常美好的憧憬。正因如此&#xff0c;许许多多厂商都在用他们自己的方案&#xff0c;为元宇宙更快、更好的实现&#xff0c;在自己的领域贡献力量。LiveVideoStack 2022北京站邀请到了 ZEGO 即构科技的解决方…

17.集合

集合 集合类是Java数据结构的实现。Java的集合类是java.util包中的重要内容&#xff0c;它允许以各种方式将元素分组&#xff0c;并定义了各种使这些元素更容易操作的方法。Java集合类是Java将一些基本的和使用频率极高的基础类进行封装和增强后再以一个类的形式提供。集合类是…

【Vue2源码】响应式原理

【Vue2源码】响应式原理 文章目录 【Vue2源码】响应式原理Vue响应式的核心设计思路整体流程响应式中的关键角色检测变化注意事项响应式原理数据观测重写数组7个变异方法增加__ob__属性__ob__有两大用处&#xff1a; Vue.js 基本上遵循 MVVM&#xff08;Model–View–ViewModel&…

【Cartopy基础入门】如何丝滑的加载Geojson数据

原文作者&#xff1a;我辈李想 版权声明&#xff1a;文章原创&#xff0c;转载时请务必加上原文超链接、作者信息和本声明。 Cartopy基础入门 【Cartopy基础入门】Cartopy的安装 【Cartopy基础入门】如何丝滑的加载Geojson数据 文章目录 Cartopy基础入门一、Geojson数据来源二…

camunda的manual task节点用途

Camunda的Manual Task用于在流程中暂停执行&#xff0c;直到人工干预完成某个任务。与User Task不同&#xff0c;Manual Task没有分配给特定用户或用户组&#xff0c;而是需要手动启动并指定下一步流程。 Manual Task可以用于以下场景&#xff1a; 1、流程执行需要等待人工干…

安全狗入选2023年福建省数字经济核心产业领域创新企业名单

近日&#xff0c;福建省数字福建建设领导小组办公室公布了入选2023年全省数字经济核心产业领域创新企业名单。 作为国内云原生安全领导厂商&#xff0c;安全狗凭借综合表现与优势入选名单&#xff0c;荣膺“未来独角兽”称号。 据悉&#xff0c;此次对“未来独角兽”的评选条件…

Linux文件类型与属性

一、文件类型 Linux 系统下一共分为 7 种文件类型。通过 stat 命令或者 ls 命令来查看文件类型。 - &#xff1a;普通文件 d &#xff1a;目录文件 c &#xff1a;字符设备文件 b &#xff1a;块设备文件 l &#xff1a;符号链接文件 s &#xff1a;套接字文件 p &…

线性模型的介绍

一、背景 在一个理想的连续世界中&#xff0c;任何非线性的东西都可以被线性的东西来拟合&#xff0c;所以理论上线性模型可以模拟物理世界中的绝大多数现象。 线性模型&#xff08;Linear Model&#xff09;是机器学习中应用最广泛的模型&#xff0c;指通过样本特征的线性组…