【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
机器人开始向前移动,这就是这节我们要实现的控制效果
实现思路
- 构建一个新的软件包,包名叫做vel_pkg。
- 在软件包中新建一个节点,节点名叫做vel_node。
- 在节点中,向ROS大管家NodeHandle申请发布话题/cmd_vel,并拿到发布对象vel_pub。
- 构建一个geometry_msgs/Twist类型的消息包vel_msg,用来承载要发送的速度值。
- 开启一个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
机器人开始向前移动,这就是这节我们要实现的控制效果
实现思路
- 构建一个新的软件包,包名叫做vel_pkg。
- 在软件包中新建一个节点,节点名叫做vel_node.py。
- 在节点中,向ROS大管家rospy申请发布话题/cmd_vel,并拿到发布对象vel_pub。
- 构建一个geometry_msgs/Twist类型的消息包vel_msg,用来承载要发送的速度值。
- 开启一个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两种语言编写控制节点来控制机器人的六个方向的运动,接下来会介绍机器人的雷达传感器的操作。