一 .基于乌龟显示节点,通过话题发布,编码实现控制小乌龟做圆周运动
- 打开终端1,进入工作空间
ros_ws
cd ros_ws
- 启动节点(ros服务器)
roscore
- 新开终端2,启动乌龟节点(turtlesim )
rosrun turtlesim turtlesim_node
- 新开终端3,查看启动的节点信息
rosnode list
- 乌龟的节点为
turtlesim
,并查看该节点的信息,找到订阅者话题为/turtle1/cmd_vel
rosnode info turtlesim
- 查看
/turtle1/cmd_vel
话题的信息,可找到话题的消息类型为geometry_msgs/Twist
rostopic info /turtle1/cmd_vel
- 查看
geometry_msgs/Twist
消息的内容
rosmsg show geometry_msgs/Twist
- 进入工作空间
ros_ws
的src
文件夹,创建新的功能包wugui_topic
cd ros_ws/src
catkin_create_pkg wugui_topic roscpp rospy std_msgs
- 进入功能包
wugui_topic
,创建scripts
文件夹
cd wugui_topic
mkdir scripts
-
打开vscode
-
在
scripts
下创建python文件wu_tal.py
,并进行编写程序
#! /usr/bin/env python
"""编写 ROS 节点,控制小乌龟画圆准备工作:1.获取topic : /turtle1/cmd_vel2.获取消息类型 : geometry_msgs/Twist3.运行前,注意先启动 turtlesim_node 节点实现流程:1.导包2.初始化 ROS 节点3.创建发布者对象4.创建频率对象 10HZ5.创建消息对象6.创建发布的消息内容
"""import rospy
from geometry_msgs.msg import Twistif __name__ == "__main__":# 初始化 ROS 节点rospy.init_node("wu_tal_p")# 创建发布者对象pub = rospy.Publisher("/turtle1/cmd_vel",Twist,queue_size=10)# 创建频率对象(10HZ)rate = rospy.Rate(10)# 创建消息对象message = Twist()# 创建发布的消息内容message.linear.x = 2.0message.linear.y = 1.0message.linear.z = 0.0# 偏航角 单位弧度message.angular.x = 0.0message.angular.y = 0.0message.angular.z = 1.0while not rospy.is_shutdown():#判断rospy是否是关闭状态,如果不是运行以下代码pub.publish(message)rate.sleep()
- 在vscode中
wugui_topic
中的CMakeLists.txt
文件中的 162-165 行取消注释,修改为scripts/wu_tal.py
- 进入
scripts
文件夹,并给python文件增加可执行权限
chmod +x *.py
- 返回终端1,在终端1先关闭
roscore
节点管理器,在对工作空间进行编译后,再开启节点管理器
catkin_make
roscore
- 终端2,重新启动乌龟节点(turtlesim )
rosrun turtlesim turtlesim_node
- 新开终端4,进入
ros_ws
工作空间
cd ros_ws
- 刷新并运行程序
source ./devel/setup.bash
rosrun wugui_topic wu_tal.py
二.在键盘控制乌龟运动的基础上,编码实现话题订阅,打印乌龟实时位姿信息
- 打开终端1 启动
roscore
节点管理器,并新开 终端2 启动乌龟节点
roscore # 终端1 启动
rosrun turtlesim turtlesim_node # 终端2 启动
-
新开 终端3 查看
/turtlesim
节点的信息该节点信息的发布方具有三个话题
/rosout
:用于在ROS中进行日志记录和调试。/turtle1/color_sensor
:用于获取turtlesim包中的turtle1
海龟的颜色传感器信息/turtle1/pose
:表示乌龟的位姿信息
rosnode info /turtlesim
- 查看位姿话题
/turtle1/pose
的信息,可找到话题类型为turtlesim/Pose
rostopic info /turtle1/pose
- 查看
turtlesim/Pose
内容
rosmsg show turtlesim/Pose
- 在功能包
wugui_topic
下的scripts
文件夹下创建python文件wu_lis.py
,并进行编写程序
#! /usr/bin/env python
"""获取小乌龟的位资准备工作:1.获取topic : /turtle1/pose2.获取消息类型 : turtlesim/Pose3.运行前,注意先启动 turtlesim_node 节点实现流程:1.导包2.初始化 ROS 节点3.创建服务对象4.回调函数处理请求并产生响应5.spin 函数
"""import rospy
from turtlesim.msg import Pose# 回调函数
def coord(msg):rospy.loginfo("乌龟位姿信息: 坐标(%.2f,%.2f), 朝向:%.2f, 线速度:%.2f, 角速度:%.2f",msg.x,msg.y,msg.theta,msg.linear_velocity,msg.angular_velocity)if __name__ == '__main__':# 初始化节点rospy.init_node("wu_lis_p") # 创建服务对象sub = rospy.Subscriber("/turtle1/pose",Pose,coord,queue_size=10)# 阻塞函数rospy.spin()
- 在vscode中
wugui_topic
中的CMakeLists.txt
文件中的 162-165 行取消注释,添加为scripts/wu_lis.py
- 返回终端1,在终端1先关闭
roscore
节点管理器,在对工作空间进行编译后,再开启节点管理器
catkin_make
roscore
- 终端2,重新启动乌龟节点(turtlesim )
rosrun turtlesim turtlesim_node
- 新开终端4,启动海龟控制节点
rosrun turtlesim turtle_teleop_key
- 新开终端5,进入
ros_ws
工作空间
cd ros_ws
- 刷新并运行程序
source ./devel/setup.bash
rosrun wugui_topic wu_lis.py