ROS2的turtlesim画一个圆

在 ROS 2 中,可以使用 turtlesim 包来实现绘制圆形的功能。turtlesim 是一个简单的模拟器,常用于教学和演示基本的 ROS 概念。要在 turtlesim 中控制乌龟绘制一个圆形,需要发布恰当的线速度和角速度组合到 /turtle1/cmd_vel 主题。
想一想在scratch中和Python里面是怎么画圆的,就知道这里怎么画里,其实原理是一样的,只是控制的方法不太相同而已。

一.建立turtlesim_node

首先确保运行了turtlesim,这个在各大教程中都有,主要是这么几步:

ros2 run turtlesim turtlesim_node

这一步会建立一个turtle的视图,类似于python中的tkinter
在这里插入图片描述

二. 发布消息

接下来就是发布消息里,一般,我们会用teleop来控制乌龟的走向,但是teleop的延时太厉害,以至于画一个五角星可以耗费整整半小时。太难了,所以既然是几何概念,那么我们就用代码来实现。

1.建立包

当然,我还是设置在主目录下,在主目录下建立一个文件夹,叫做ROSproject。在这个文件夹下建立src,通过terminal进入文件夹
建立ros项目。

ros2 pkg create --build-type ament_python my_ros_py_package

然后进入 my_ros_py_package
建立circleNode.py

touch circleNode.py

现在的目录树是这样的:

└── my_ros_py_package
    ├── my_ros_py_package
    │   ├── circleNode.py
    │   └── __init__.py
    ├── package.xml
    ├── resource
    │   └── my_ros_py_package
    ├── setup.cfg
    ├── setup.py
    └── test
        ├── test_copyright.py
        ├── test_flake8.py
        └── test_pep257.py

2.编写代码

在circleNode.py中写入以下代码

import rclpy
import math
from rclpy.node import Node

# from std_msgs.msg import String
from geometry_msgs.msg import Twist



class MinimalPublisher(Node):

    def __init__(self):
        super().__init__('my_pub')
        self.publisher_ = self.create_publisher(Twist, 'turtle1/cmd_vel', 10)
        timer_period = 1  # seconds
        self.timer = self.create_timer(timer_period, self.timer_callback)
        self.i = 0

    def timer_callback(self):
        vel = Twist()
#        vel.data = 'My Hello World: %d' % self.i
        t = self.i/10
        vel.linear.x =  2.0
        vel.angular.z =  2.0
        self.publisher_.publish(vel)
        self.get_logger().info('Publishing: 线速度x: %f 角速度z: %f' % (vel.linear.x,vel.angular.z))
#        self.get_logger().info('Publishing: z"%f"' % vel.angular.z)
        self.i += 1


def main(args=None):
    rclpy.init(args=args)

    minimal_publisher = MinimalPublisher()

    rclpy.spin(minimal_publisher)

    # Destroy the node explicitly
    # (optional - otherwise it will be done automatically
    # when the garbage collector destroys the node object)
    minimal_publisher.destroy_node()
    rclpy.shutdown()


if __name__ == '__main__':
    main()

3.修改setup.py

修改setup.py为:

from setuptools import find_packages, setup

package_name = 'my_ros_py_package'

setup(
    name=package_name,
    version='0.0.0',
    packages=find_packages(exclude=['test']),
    data_files=[
        ('share/ament_index/resource_index/packages',
            ['resource/' + package_name]),
        ('share/' + package_name, ['package.xml']),
    ],
    install_requires=['setuptools'],
    zip_safe=True,
    maintainer='harebert',
    maintainer_email='harebert@todo.todo',
    description='TODO: Package description',
    license='TODO: License declaration',
    tests_require=['pytest'],
    entry_points={
        'console_scripts': [
        'circleNode = my_ros_py_package.circleNode:main'
        # circleNode为节点名称
        # my_ros_py_package为包名称
        # circleNode 为py文件名称
        # main为执行方法
        ],
    },
)

三.编译并运行

在src目录外命令:

colcon build
source install/setup.bash
ros2 run my_ros_py_package circleNode

turtlesim画圆

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值