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


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

    • 打开终端1,进入工作空间 ros_ws
    cd ros_ws
    
    • 1
    • 启动节点(ros服务器)
    roscore
    
    • 1

    在这里插入图片描述

    • 新开终端2,启动乌龟节点(turtlesim )
    rosrun turtlesim turtlesim_node 
    
    • 1

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    • 新开终端3,查看启动的节点信息
    rosnode list
    
    • 1

    在这里插入图片描述

    • 乌龟的节点为 turtlesim ,并查看该节点的信息,找到订阅者话题为 /turtle1/cmd_vel
    rosnode info turtlesim
    
    • 1

    在这里插入图片描述

    • 查看 /turtle1/cmd_vel话题的信息,可找到话题的消息类型为 geometry_msgs/Twist
    rostopic info /turtle1/cmd_vel
    
    • 1

    在这里插入图片描述

    • 查看 geometry_msgs/Twist 消息的内容
    rosmsg show geometry_msgs/Twist
    
    • 1

    在这里插入图片描述

    • 进入工作空间 ros_wssrc文件夹,创建新的功能包 wugui_topic
    cd ros_ws/src
    
    • 1
    catkin_create_pkg wugui_topic roscpp rospy std_msgs
    
    • 1
    • 进入功能包 wugui_topic ,创建 scripts文件夹
    cd wugui_topic
    
    • 1
    mkdir scripts
    
    • 1
    #! /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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 在vscode中wugui_topic 中的 CMakeLists.txt 文件中的 162-165 行取消注释,修改为 scripts/wu_tal.py

    在这里插入图片描述

    • 进入 scripts文件夹,并给python文件增加可执行权限
    chmod +x *.py
    
    • 1
    • 返回终端1,在终端1先关闭 roscore节点管理器,在对工作空间进行编译后,再开启节点管理器
    catkin_make
    
    • 1
    roscore
    
    • 1
    • 终端2,重新启动乌龟节点(turtlesim )
    rosrun turtlesim turtlesim_node 
    
    • 1
    • 新开终端4,进入 ros_ws工作空间
    cd ros_ws
    
    • 1
    • 刷新并运行程序
    source ./devel/setup.bash
    
    • 1
    rosrun wugui_topic wu_tal.py
    
    • 1

    在这里插入图片描述

    二.在键盘控制乌龟运动的基础上,编码实现话题订阅,打印乌龟实时位姿信息

    • 打开终端1 启动 roscore节点管理器,并新开 终端2 启动乌龟节点
    roscore       # 终端1 启动
    
    • 1
    rosrun turtlesim turtlesim_node   # 终端2 启动
    
    • 1
    • 新开 终端3 查看 /turtlesim 节点的信息

      该节点信息的发布方具有三个话题

      /rosout:用于在ROS中进行日志记录和调试。

      /turtle1/color_sensor:用于获取turtlesim包中的turtle1海龟的颜色传感器信息

      /turtle1/pose:表示乌龟的位姿信息

    rosnode info /turtlesim 
    
    • 1

    在这里插入图片描述

    • 查看位姿话题 /turtle1/pose 的信息,可找到话题类型为 turtlesim/Pose
    rostopic info /turtle1/pose 
    
    • 1

    在这里插入图片描述

    • 查看 turtlesim/Pose内容
    rosmsg show turtlesim/Pose
    
    • 1

    在这里插入图片描述

    • 在功能包 wugui_topic下的 scripts文件夹下创建python文件 wu_lis.py,并进行编写程序
    #! /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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 在vscode中wugui_topic 中的 CMakeLists.txt 文件中的 162-165 行取消注释,添加为 scripts/wu_lis.py

    在这里插入图片描述

    • 返回终端1,在终端1先关闭 roscore节点管理器,在对工作空间进行编译后,再开启节点管理器
    catkin_make
    
    • 1
    roscore
    
    • 1
    • 终端2,重新启动乌龟节点(turtlesim )
    rosrun turtlesim turtlesim_node 
    
    • 1
    • 新开终端4,启动海龟控制节点
    rosrun turtlesim turtle_teleop_key
    
    • 1

    在这里插入图片描述

    • 新开终端5,进入 ros_ws工作空间
    cd ros_ws
    
    • 1
    • 刷新并运行程序
    source ./devel/setup.bash
    
    • 1
    rosrun wugui_topic wu_lis.py
    
    • 1

    在这里插入图片描述

  • 相关阅读:
    AutoML
    LeetCode 98. 验证二叉搜索树(C++)
    【动手学深度学习-Pytorch版】门控循环单元GRU
    从零开始写 Docker(五)---基于 overlayfs 实现写操作隔离
    【LIN总线测试】——LIN从节点物理层测试
    数据结构和算法(8):搜索树(二叉搜索树和AVL树)
    陕西省助理评审申报,看这文章就够了
    简述防抖与节流,必懂(含完整模拟实例)
    分享篇:我用数据分析做副业
    python pywebio测试开发入门跨域使用
  • 原文地址:https://blog.csdn.net/m0_68319844/article/details/133776460