编码实现乌龟运动控制,让小乌龟做圆周运动。
实现分析:
- 乌龟运动控制实现,关键节点有两个,一个是乌龟运动显示节点 turtlesim_node,另一个是控制节点,二者是订阅发布模式实现通信的,乌龟运动显示节点直接调用即可,运动控制节点之前是使用的 turtle_teleop_key通过键盘 控制,现在需要自定义控制节点。
- 控制节点自实现时,首先需要了解控制节点与显示节点通信使用的话题与消息,可以使用ros命令结合计算图来获取。
- 了解了话题与消息之后,通过Python 编写运动控制节点,通过指定的话题,按照一定的逻辑发布消息即可。
实现流程:
- 通过计算图结合ros命令获取话题与消息信息。
- 编码实现运动控制节点。
- 启动 roscore、turtlesim_node 以及自定义的控制节点,查看运行结果。
1.话题与消息获取
准备: 先启动键盘控制乌龟运动案例。
显示:
1.1话题获取
获取话题:/turtle1/cmd_vel
通过计算图查看话题:
1.2消息获取
获取消息类型及消息格式
linear(线速度) 下的xyz分别对应在x、y和z方向上的速度(单位是 m/s);
angular(角速度)下的xyz分别对应x轴上的翻滚、y轴上俯仰和z轴上偏航的速度(单位是rad/s)。
2.实现发布节点
创建功能包需要依赖的功能包: roscpp rospy std_msgs geometry_msgs
#! /use/bin/ven python
import rospy
from geometry_msgs.msg import Twist
"""
发布方:发布速度消息
话题:/turtle1/cmd_vel
消息:geometry_msgs/Twist
1、导包
2、初始化ROS节点
3、创建发布者对象
4、组织数据并发布数据
"""
if __name__=="__main__":
#初始化ROS节点
rospy.init_node("my_control_p")
#创建发布者对象
pub=rospy.Publisher("turtle1/cmd_vel",Twist,queue_size=10)
#组织数据并发布数据
#设置发布频率
rate=rospy.Rate(10)
#创建速度消息
twist=Twist()
twist.linear.x=0.5
twist.linear.y=0.0
twist.linear.z=0.0
twist.angular.x=0.0
twist.angular.y=0.0
twist.angular.z=0.5
#循环发布
while not rospy.is_shutdown():
pub.publish(twist)
rate.sleep()
3、编译运行
(注:编译运行时一定要修改文件权限)
修改CMakeLists.txt文件
三终端运行
运行结果