1. 前言
Ubuntu环境搭建
【Windows10安装或重装ubuntu18.04双系统教程】
ROS学习笔记
【4. ROS的主要通讯方式:Topic话题与Message消息】
前期学习了话题和消息,接下来开始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两种语言编写控制节点来控制机器人的六个方向的运动,接下来会介绍机器人的雷达传感器的操作。