【5. ROS机器人的运动控制】

news2024/11/27 14:32:08

【ROS机器人的运动控制】

  • 1. 前言
  • 2. 机器人的运动
  • 3. 机器人的运动速度单位
  • 4. geometry_msgs模型
  • 5. 用C++实现机器人运动控制
    • 5.1 新建vel_pkg包
    • 5.2 编写vel_node.cpp代码
    • 5.3 设置编译规则
    • 5.4 运行验证
  • 6. 用python实现机器人运动控制
    • 6.1 新建vel_pkg包
    • 6.2 编写vel_node.py代码
    • 6.3 设置执行权限
    • 6.4 运行验证
  • 7. 总结

欢迎大家阅读2345VOR的博客【5. ROS机器人的运动控制】🥳🥳🥳
本人主页: 已获得CSDN《嵌入式领域优质创作者》称号👻👻👻,座右铭:脚踏实地,仰望星空🛹🛹🛹
🎏🎏主要开发专栏🎏🎏
《Arduino编程参考》:本专栏围绕Arduino语法和Arduino库使用开发;🌻🌻🌻
《 Arduino小项目开发》:本专栏围绕Arduino生态结合实际需求设计综合的小项目开发。🌼🌼🌼
《HomeAssistant》:介绍homeassistant中基本开发, 重点设计esphome和nodered开发,包含小爱同学打印机等诸多设备添加。🎉🎉🎉
本文章属于《Ubuntu学习》和《ROS机器人学习》
:围绕Ubuntu系统基本配置及相关命令行学习记录!机器人操作系统 (ROS) 是一组软件库和工具,可帮助您构建机器人应用程序。👍👍👍

1. 前言

Ubuntu环境搭建
【经典Ubuntu20.04版本U盘安装双系统教程】
【Windows10安装或重装ubuntu18.04双系统教程】
【Ubuntu同步系统时间】
【Ubuntu中截图工具】
【Ubuntu安装QQ】
【Ubuntu安装后基本配置】
【Ubuntu启动菜单的默认项】
【ubuntu系统中修改hosts配置】
【18.04Ubuntu中解决无法识别显示屏】
ROS学习笔记
【1. Ubuntu18.04安装ROS Melodic】
【2. 在Github上寻找安装ROS软件包】
【3. 初学ROS,年轻人的第一个Node节点】
【4. ROS的主要通讯方式:Topic话题与Message消息】
【5. ROS机器人的运动控制】
前期学习了话题和消息,接下来开始ROS机器人的运动控制
在这里插入图片描述
本教程是B站阿杰视频的笔记
视频地址:https://www.bilibili.com/video/BV1od4y1g7Ye

在这里插入图片描述

2. 机器人的运动

伸出你的右手,注意拇指食指和中指互成90度夹角

在这里插入图片描述

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

3. 机器人的运动速度单位

矢量单位:m/s
旋转单位:rad/s
在这里插入图片描述

在这里插入图片描述
机器人运动分为矢量速度和旋转速度,由XYZ轴分量组成,同为6个速度消息包
在这里插入图片描述

4. geometry_msgs模型

进入ROS index:https://index.ros.org/
找到匹配的noetic版本,进入
在这里插入图片描述
选择Website
在这里插入图片描述
进入geometry_msgs的Twist Message速度消息包
在这里插入图片描述
Twist Message速度消息包包涵两个成员,分别是线性和角度
在这里插入图片描述
点击一个成员,包涵3个64位的浮点数(x/y/z)
在这里插入图片描述

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

5. 用C++实现机器人运动控制

采用wpr_simulation
进入工作空间,重新拉取文件

cd ~/catkin_ws/src/wpr_sipulation/
git pull

在这里插入图片描述
然后退回catkin_ws工作空间,重新编译

cd ~/catkin_ws/
catkin_make

在这里插入图片描述
在这个wpr_simulation中有一个例子程序
打开三个终端分别运行三条指令

roscore
roslaunch wpr_simulation wpb_simple.launch
rosrun wpr_sLnulation deno_vel_ctrl

在这里插入图片描述
机器人开始向前移动,这就是这节我们要实现的控制效果

在这里插入图片描述
实现思路

  1. 构建一个新的软件包,包名叫做vel_pkg。
  2. 在软件包中新建一个节点,节点名叫做vel_node。
  3. 在节点中,向ROS大管家NodeHandle申请发布话题/cmd_vel,并拿到发布对象vel_pub。
  4. 构建一个geometry_msgs/Twist类型的消息包vel_msg,用来承载要发送的速度值。
  5. 开启一个while循环,不停的使用vel_pub对象发送速度消息包
    vel_msg 。

在这里插入图片描述

5.1 新建vel_pkg包

打开终端

cd ~/catkin_ws/src/
catkin_create_pkg vel_pkg roscpp rospy geonetry_msgs

在这里插入图片描述
VScode打开,在vel_pkg的src文件夹下创建vel_node.cpp
在这里插入图片描述

5.2 编写vel_node.cpp代码

源码如下

#include <ros/ros.h>
#include <geometry_msgs/Twist.h>

int main(int argc, char** argv)
{
  ros::init(argc, argv, "vel_node");

  ros::NodeHandle n;
  ros::Publisher vel_pub = n.advertise<geometry_msgs::Twist>("/cmd_vel", 10);

  geometry_msgs::Twist vel_msg;
  vel_msg.linear.x = 0.1;
  vel_msg.linear.y = 0.0;
  vel_msg.linear.z = 0.0;
  vel_msg.angular.x = 0;
  vel_msg.angular.y = 0;
  vel_msg.angular.z = 0;

  ros::Rate r(30);
  while(ros::ok())
  {
    vel_pub.publish(vel_msg);
    r.sleep();
  }

  return 0;
}

在这里插入图片描述

5.3 设置编译规则

修改CMake文件

add_executable(vel_node src/vel_node.cpp)
add_dependencies(vel_node ${${PROJECT_NANE]_EXPORTED_TARGETS} ${ catkin_EXPORTED_TARGETS})
target_link_libraries(vel_node
	${catkin_LIBRARLES}
)

在这里插入图片描述
ctrl+s快捷保存
ctrl+shift+b快捷编译
可对照wpr_simulation的demo_vel_ctrl.cpp
在这里插入图片描述
也可以修改旋转的变量

5.4 运行验证

打开三个终端分别运行三条指令

roscore
roslaunch wpr_simulation wpb_simple.launch
rosrun vel_pkg vel_node

在这里插入图片描述
也可以修改旋转的变量

在这里插入图片描述

6. 用python实现机器人运动控制

采用wpr_simulation模板项目
进入工作空间,重新拉取文件

cd ~/catkin_ws/src/wpr_sipulation/
git pull

在这里插入图片描述
然后退回catkin_ws工作空间,重新编译

cd ~/catkin_ws/
catkin_make

在这里插入图片描述
在这个wpr_simulation中有一个例子程序
打开三个终端分别运行三条指令

roscore
roslaunch wpr_simulation wpb_simple.launch
rosrun wpr_sLnulation deno_vel_ctrl.py

在这里插入图片描述

机器人开始向前移动,这就是这节我们要实现的控制效果

在这里插入图片描述
实现思路

  1. 构建一个新的软件包,包名叫做vel_pkg。
  2. 在软件包中新建一个节点,节点名叫做vel_node.py。
  3. 在节点中,向ROS大管家rospy申请发布话题/cmd_vel,并拿到发布对象vel_pub。
  4. 构建一个geometry_msgs/Twist类型的消息包vel_msg,用来承载要发送的速度值。
  5. 开启一个while循环,不停的使用vel_pub对象发送速度消息包
    vel_msg 。

在这里插入图片描述

6.1 新建vel_pkg包

打开终端

cd ~/catkin_ws/src/
catkin_create_pkg vel_pkg roscpp rospy geonetry_msgs

在这里插入图片描述
VScode打开,在vel_pkg的src文件夹下创建scripts文件夹,然后新建vel_node.py
在这里插入图片描述

6.2 编写vel_node.py代码

先引入python包,设置中文utf-8显示

  • ros>=20.04,采用python3
  • ros<20.04,采用python
    源码如下
#!/usr/bin/env python3
# coding=utf-8

import rospy
from geometry_msgs.msg import Twist

if __name__ == "__main__":
    rospy.init_node("vel_node")
    # 发布速度控制话题
    vel_pub = rospy.Publisher("cmd_vel",Twist,queue_size=10)
    # 构建速度消息包并赋值
    vel_msg = Twist()
    vel_msg.linear.x = 0.1
    # 构建发送频率对象
    rate = rospy.Rate(10)
    while not rospy.is_shutdown():
        vel_pub.publish(vel_msg)
        rate.sleep()

在这里插入图片描述

6.3 设置执行权限

在所在文件夹打开终端

cd catkin_ws/src/vel_pkg/scripts/
ls
chmod +x vel_node.py
ls

在这里插入图片描述

ctrl+s快捷保存
ctrl+shift+b快捷编译
可对照wpr_simulation的script文件夹下的demo_vel_ctrl.py
在这里插入图片描述

6.4 运行验证

打开三个终端分别运行三条指令

roscore
roslaunch wpr_simulation wpb_simple.launch
rosrun vel_pkg vel_node.py

在这里插入图片描述
也可以修改旋转的变量

7. 总结

本节学习了机器人的运动控制,尝试C++和python两种语言编写控制节点来控制机器人的六个方向的运动,接下来会介绍机器人的雷达传感器的操作。

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

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

相关文章

[开源工具]Win10/11/8/7 获取笔记本电脑连接过的WIFI名称和密码[开箱可用]

[开源工具]Win10/11/8/7 获取笔记本电脑连接过的WIFI名称和密码[开箱可用] 1.打开命令提示符(管理员身份)2.输入netsh wlan show profile3.输入netsh wlan export profile folderC:\ keyclear4.打开C盘5.使用记事本打开 查看WIFI名称和密码 1.打开命令提示符(管理员身份) 首先…

计算机网络-应用协议与数据包分析实验(使用Wireshark)

实验一.应用协议与数据包分析实验(使用Wireshark) 一.实验目的 通过本实验&#xff0c;熟练掌握Wireshark的操作和使用&#xff0c;学习对HTTP协议进行分析。 二.实验内容 学习http协议&#xff0c;使用Wireshark截获http报文&#xff0c;对http请求报文和响应报文进行分析。…

【ONE·C++ || 多态】

总言 主要介绍多态相关内容。 文章目录 总言1、多态介绍1.1、多态是什么1.2、构成多态的两个必备条件1.2.1、虚函数介绍1.2.2、基类的指针或者引用调用虚函数1.2.3、演示多态条件的破坏&#xff08;两个特例说明&#xff09;1.2.3.1、不符合条件演示1.2.3.2、特例演示 1.3、一…

【高危】Spring Boot在Cloud Foundry中部署存在路由限制绕过风险(CVE-2023-20873)

漏洞描述 Spring Boot是用于构建Java应用程序的框架&#xff0c;Cloud Foundry是用于部署和管理应用程序的云平台&#xff0c;/cloudfoundryapplication也会路由至Spring Boot actuator。 当 Spring Boot 的受影响版本部署在 Cloud Foundry 上且具有处理 /cloudfoundryapplic…

计算机网络-应用层和传输层协议分析实验(PacketTracer)

实验三.应用层和传输层协议分析实验 一.实验目的 通过本实验&#xff0c;熟悉PacketTracer的使用&#xff0c;学习在PacketTracer中仿真分析应用层和传输层协议&#xff0c;进一步加深对协议工作过程的理解。 二.实验内容 从 PC 使用 URL 捕获 Web 请求&#xff0c;运行模拟并…

第06讲:为何各大开源框架专宠 SPI 技术?

在此前的内容中&#xff0c;已经详细介绍了 SkyWalking Agent 用到的多种基础技术&#xff0c;例如&#xff0c;Byte Buddy、Java Agent 以及 OpenTracing 中的核心概念。本课时将深入介绍 SkyWalking Agent 以及 OAP 中都会使用到的 SPI 技术。 JDK SPI 机制 SPI&#xff08…

Oracle-12c版本之后替换OCR磁盘组步骤

背景: 用户有一套Oracle12.2的RAC集群&#xff0c;在安装配置的时候&#xff0c;OCR磁盘只使用了单块磁盘external的模式&#xff0c;想替换成包含三块磁盘组成员normal模式的磁盘组 OCR磁盘组存储的对象: 在替换OCR磁盘之前&#xff0c;我们先确认需要迁移的OCR磁盘组存储的对…

图扑数字孪生助力智慧冷链园区实现大数据实时监控

前言 近年来&#xff0c;业界学者及企业就智慧冷链物流展开深入研究&#xff0c;2010 年 IBM 发布的《智慧的未来供应链》研究报告中提出智慧供应链概念&#xff0c;并由此延伸出智慧物流概念&#xff0c;即智慧物流是以信息化为依托并广泛应用物联网、人工智能、大数据、云计…

设置rocky Linux ip 与主机服务器处于同一网段内,并且能上网

第一步&#xff1a;查找主机服务器的 了解地址信息 第二步&#xff0c;设置rocky Linux 网络适配器连接&#xff0c;选择桥接模式 第三步&#xff1a;设置rocky Linux ip 第四步&#xff0c;设置完&#xff0c;重启Linux &#xff0c;验证ip是否修改过来&#xff0c;是否在同一…

【python】scikit-learn包:模型评估与优化

模型构建的目的 首先明确&#xff0c;模型拟合的目的&#xff1a; 不是对训练数据进行准确预测&#xff0c;而是对新数据进行准确预测 欠拟合 与 过拟合 欠拟合&#xff1a;可以通过训练数据及时发现&#xff0c;且可通过优化模型结果解决 过拟合&#xff1a;难以发觉&#x…

Golang基础----基于Goland编辑器快速体验Golang

【原文链接】Golang基础----基于Goland编辑器快速体验Golang &#xff08;1&#xff09;打开Goland&#xff0c;点击“New Project” &#xff08;2&#xff09;设置项目存放位置以及项目名&#xff0c;然后点击“Add SDK”&#xff0c;然后点击“Local” &#xff08;3&a…

vue3 的router跳转 - 页面同tab跳转和打开新tab跳转

vue3 的router跳转 - 页面同tab跳转和打开新tab跳转 vue3的路由基本知识 当前页需要的方法 主要是获得Vue Router实例暴露的一些方法&#xff0c;使用这些方法&#xff0c;进行路由操作引入 import { useRouter } from vue-router;调用 const router useRouter();目标页需…

Android jetpack Compose之约束布局

概述 我们都知道ConstraintLayout在构建嵌套层级复杂的视图界面时可以有效降低视图树的高度&#xff0c;使视图树扁平化&#xff0c;约束布局在测量布局耗时上比传统的相对布局具有更好的性能&#xff0c;并且约束布局可以根据百分比自适应各种尺寸的终端设备。因为约束布局确…

simulink simscape传感总结

1. 传感模块概述2. 可观测的传感量3. 传感模块3.1 运动传感模块3.1.1 旋转和平移细分旋转平移 3.2 力传感模块3.2.1 关节力和力矩细分 1. 传感模块概述 Simscape提供传感模块&#xff0c;通过改变模型的输入和输出&#xff0c;可以进行许多分析&#xff0c;比如可以进行机械臂…

中移链控制台对接4A平台功能验证介绍

中移链控制台具备单独的注册登录页面&#xff0c;用户可通过页面注册或者用户管理功能模块进行添加用户&#xff0c;通过个人中心功能模块进行用户信息的修改和密码修改等操作&#xff0c;因业务要求&#xff0c;需要对中移链控制台的用户账号进行集中管理&#xff0c;统一由 4…

2 文件IO

2.1 文件描述符 对于内核而言&#xff0c;所有打开文件都由文件描述符引用。文件描述符是一个非负整数。当打开 一个现存文件或创建一个新文件时&#xff0c;内核向进程返回一个文件描述符。当读、写一个文件时&#xff0c; 用open或creat返回的文件描述符标识该文件&#xff0…

QT 网络编程之主机信息查询(QHostInfo 和 QNetworkInterface类)简介

Qt 网络模块提供了用于编写 TCP/IP 客户端和服务器端程序的各种类&#xff0c;如用于 TCP 通信的QTcpSocket 和 QTcpServer&#xff0c;用于 UDP 通信的 QUdpSocket&#xff0c;还有用于实现 HTTP、FTP 等普通网络协议的高级类如 QNetworkRequest&#xff0c;QNetworkReply 和Q…

【Redis】Redis中的5种基础数据类型详解

文章目录 1. Redis数据结构2. 基础数据结构详解2.1 String字符串2.2 List列表2.3 Set集合2.4 Hash散列2.5 Zset有序集合 1. Redis数据结构 对于Redis来说&#xff0c;所有的key&#xff08;键&#xff09;都是字符串&#xff0c;我们一般所讨论的Redis基础数据类型指的是存储的…

ref在Vue2、Vue3中的使用

文章目录 前言一、ref在Vue2中的用法二、ref在Vue3中的用法 前言 记录一下ref在Vue2与Vue3中的使用&#xff0c;ref可以获取DOM元素&#xff0c;也可以获取子组件的数据、方法。 一、ref在Vue2中的用法 给元素绑定一个ref&#xff0c;然后在js中通过this.$refs获取DOM。 ref命…

@PostConstruct注解和@PreDestroy注解

前言 Bean注解指定初始化和销毁的方法&#xff0c;也介绍了使用InitializingBean和DisposableBean来处理bean的初始化和销毁。JDK中还提供了两个注解能够在bean创建完成并且属性赋值完成之后执行一些初始化工作和在容器销毁bean之前通知我们进行一些清理工作。 1.PostConstru…