ros之乌龟做圆周运动and订阅乌龟的位姿信息

一 .基于乌龟显示节点,通过话题发布,编码实现控制小乌龟做圆周运动

  • 打开终端1 ,进入工作空间 ros_ws
shell 复制代码
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_wssrc文件夹,创建新的功能包 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,并进行编写程序

python 复制代码
#! /usr/bin/env python
"""
    编写 ROS 节点,控制小乌龟画圆
    准备工作:
        1.获取topic : /turtle1/cmd_vel
        2.获取消息类型 : geometry_msgs/Twist
        3.运行前,注意先启动 turtlesim_node 节点
    实现流程:
        1.导包
        2.初始化 ROS 节点
        3.创建发布者对象
        4.创建频率对象 10HZ
        5.创建消息对象
        6.创建发布的消息内容
"""
 
import rospy
from geometry_msgs.msg import Twist
 
if __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.0
    message.linear.y = 1.0
    message.linear.z = 0.0
    # 偏航角 单位弧度
    message.angular.x = 0.0
    message.angular.y = 0.0
    message.angular.z = 1.0
 
    while 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,并进行编写程序
python 复制代码
#! /usr/bin/env python
"""
    获取小乌龟的位资
    准备工作:
        1.获取topic : /turtle1/pose
        2.获取消息类型 : turtlesim/Pose
        3.运行前,注意先启动 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

相关推荐
在路上`26 分钟前
前端学习之后端java小白(四)之数据库设计
sql·学习
咔咔学姐kk3 小时前
大模型微调技术宝典:Transformer架构,从小白到专家
人工智能·深度学习·学习·算法·transformer
Jayyih3 小时前
嵌入式系统学习Day35(sqlite3数据库)
数据库·学习·sqlite
lingggggaaaa5 小时前
小迪安全v2023学习笔记(八十一讲)—— 框架安全&ThinkPHP&Laravel&Struts2&SpringBoot&CVE复现
笔记·学习·struts·安全·网络安全·laravel
CC数分5 小时前
零基础3个月上岸[特殊字符]自学数据分析路线
学习·数据挖掘·数据分析·大学生·考证
HAH-HAH5 小时前
【蓝桥杯 2024 国 Java A】粉刷匠小蓝
c++·学习·数学·算法·职场和发展·蓝桥杯·组合数学
酷讯网络_2408701606 小时前
多语言共享贩卖机投资理财共享售卖机投资理财系统
学习·开源
番薯大佬6 小时前
Python学习-day8 元组tuple
java·python·学习
wanzhong23336 小时前
ArcGIS学习-17 实战-密度分析
学习·arcgis
知识分享小能手6 小时前
React学习教程,从入门到精通,React 组件生命周期详解(适用于 React 16.3+,推荐函数组件 + Hooks)(17)
前端·javascript·vue.js·学习·react.js·前端框架·vue3