ROS 入门教程 —— 小海龟简单控制

ROS 入门教程 —— 小海龟简单控制

这里我们直接介绍命令使用方法,原理请查看我的另外几篇博客:

  1. ROS 命令行工具的使用

  2. ROS 创建工作空间与功能包

运行并控制小海龟

由于小海龟并不是 ROS 中自带的包,所以我们需要安装小海龟:

sudo apt update
sudo apt install ros-noetic-turtlesim

注意:这里要考虑自己 ROS 版本对应的小海龟的包

然后我们要运行小海龟:

首先要运行 ROS-Master,这里我们直接运行如下程序即可:

roscore

成功运行显示画面如下:

然后我们需要启用第二个终端运行如下程序:

rosrun turtlesim turtlesim_node

注意:这里我们每运行一个新的程序都需要启动一个新的终端窗口

这里我们就已经打开了 turtlesim,下面我们要学会如何控制他行动:

运行如下程序可以通过小键盘控制小海龟运动:

rosrun turtlesim turtle_teleop_key

这时我们就可以通过小键盘来控制小海龟

命令行控制小海龟转圈

这里我们前面在博客中已经介绍了如何通过发布话题控制小海龟,这里直接给出使小海龟转圈的命令

rostopic pub -r 10 /turtle1/cmd_vel geometry_msgs/Twist
"linear:
  x: 0.5
  y: 0.0
  z: 0.0
angular:
  x: 0.0
  y: 0.0
  z: 0.5"
# 这里表示循环运行 1s 运行 10 次,我们这里运行的是小海龟示例,撞墙会有提示
#这里的 linear 表示线速度, angular 表示角速度

这样我们就能通过命令来控制小海龟转圈

这里循环执行我们可以用 ctrl+c 停下来

代码控制小海龟转圈

首先我们需要建立好一个新的功能包,这里我们的功能包名称为 learning_topic 我们需要进入到功能包的路径下,新建一个 scripts 文件夹用于存储 python 文件

然后我们在 src 中新建一个代码文件:

c++ 控制代码如下:

/*
 该例程将发布 turtle1/cmd_vel 话题,消息类型 geometry msgs::Twist
*/

#include <ros/ros.h>
#include <geometry_msgs/Twist.h>

int main(int argc, char **argv){

    // ROS 节点初始化
    ros::init(argc, argv, "velocity_pulisher");

    // 创建节点句柄
    ros::NodeHandle n;

    // 创建一个 Publisher,发布名为 /turtle1/cmd_vel 的 topic,消息类型为 geometry_msgs::Twist,队列长度 10
    ros::Publisher turtle_vel_pub = n.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel", 10);

    // 设置循环频率
    ros::Rate loop_rate(10);

    int count = 0;
    while(ros::ok())
    {
        // 初始化 geometry_msgs::Twist 类型的消息
        geometry_msgs::Twist vel_msg;
        vel_msg.linear.x = 0.5;
        vel_msg.angular.z = 0.2;

        // 发布消息
        turtle_vel_pub.publish(vel_msg);
        ROS_INFO("Publish turtle velocity command[%0.2f m/s, %0.2f rad/s]",
                 vel_msg.linear.x, vel_msg.angular.z);

        // 按照循环频率延时
        loop_rate.sleep();
    }

    return 0;
}

python 程序原理相同,程序如下:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import rospy
from geometry_msgs.msg import Twist


def velocity_publisher():
    # ROS 节点初始化
    rospy.init_node('velocity_publisher', anonymous=True)

    # 创建一个 publisher,发布名为 /turtle1/cmd_vel 的 topic.消息类型为 geometry_msgs::Twist, 队列长度 10
    turtle_vel_pub = rospy.Publisher('/turtle1/cmd_vel', Twist, queue_size=10)

    # 设置循环频率
    rate = rospy.Rate(10)

    while not rospy.is_shutdown():
        # 初始化 geomety_msgs::Twist 类型消息
        vel_msg = Twist()
        vel_msg.linear.x = 1.5
        vel_msg.angular.z = 0.2

        # 发布消息
        turtle_vel_pub.publish(vel_msg)
        rospy.loginfo("Publish turtle velocity command[%0.2f m/s, %0.2f rad/s]",
                      vel_msg.linear.x, vel_msg.angular.z)

        # 按照循环频率延时
        rate.sleep()


if __name__ == "__main__":
    try:
        velocity_publisher()
    except rospy.ROSInterruptException:
        pass

注意:python程序中第一行一定要加上 #!/usr/bin/env python3 才能识别 python 运行,这里我们还需要给 python 文件运行权限,直接执行如下命令即可:

chmod +x velocity_publisher.python

然后我们需要在上级路径中的 CMakeLists.txt 中 Install 前添加如下两行:

add_executable(velocity_publisher src/velocity_publisher.cpp)
target_link_libraries(velocity_publisher ${catkin_LIBRARIES})

在前面的博客中我们已经介绍过了,这两句是用来补全环境的,这里就不过多介绍了

然后我们返回到 catkin_ws 目录下,执行编译命令:

catkin_make

编译成功如下:

我们直接执行我们发布的话题就可以控制小海龟转圈了:

python 程序同样:

话题查看器查看消息传递

首先我们使用 rqt 来查看系统功能:

安装 rqt 命令如下:

sudo apt-get install ros-noetic-rqt
sudo apt-get install ros-noetic-rqt-common-plugins

直接启用就能看到系统的全貌:

rosrun rqt_graph rqt_graph

使用如下命令查看发布的所有话题:

rostopic list
  • 4
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
ROS小海龟是一个在ROS(Robot Operating System)中使用的仿真机器人。它被广泛用于教育和开发机器人技术。 在ROS小海龟中,定点移动是指让小海龟在图形界面上的给定点上停留一段时间。下面是一个简单的300字中文回答,解释ROS小海龟如何进行定点移动: ROS小海龟可以通过使用turtlebot3_teleop包来进行定点移动。首先,我们需要打开一个终端窗口并输入以下命令来启动ROS小海龟仿真器: ``` roslaunch turtlebot3_gazebo turtlebot3_empty_world.launch ``` 接下来,在另一个终端窗口中输入以下命令来启动ROS小海龟操作节点: ``` roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch ``` 现在,我们可以通过按键盘上的箭头键来控制小海龟的移动。当我们按住箭头键移动小海龟时,它会按照我们的指示移动。 要进行定点移动,我们需要使用turtlesim包提供的服务。在新的终端窗口中输入以下命令来调用turtlesim服务: ``` rosservice call /turtle1/teleport_absolute x y theta ``` 在这个命令中,x和y是小海龟需要移动到的坐标,theta是小海龟旋转的角度。 例如,如果我们想让小海龟移动到坐标(5, 5)的位置,并使其朝向角度为0度,则需要执行以下命令: ``` rosservice call /turtle1/teleport_absolute 5 5 0 ``` 小海龟将会移动到这个位置,并保持在那里一段时间。 通过使用这些命令,我们可以轻松地实现ROS小海龟的定点移动。这对于学习机器人控制和路径规划等领域非常有用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ppqppl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值