ROS运行程序让小海龟实现圆周运动

ROS运行程序让小海龟实现圆周运动



一.任务简介

  • 1.运行小海龟demo例子,通过键盘控制小海龟运动
  • 2.用话题查看器查看两个node之间的消息传递
  • 3.用C++写一个程序,控制小海龟走一个圆形

二.实验准备

  • 1.VMware workstation 软件
  • 2.Ubuntu 20.04版本
  • 3.ROS

实验分析:

  • 1.乌龟运动控制实现,关键节点有两个,一个是乌龟运动显示节点 turtlesim_node,另一个是控制节点,二者是订阅发布模式实现通信的,乌龟运动图形化显示节点直接调用即可,运动控制节点之前是使用的 turtle_teleop_key通过键盘 控制,现在需要自定义控制节点
  • 2.控制节点自实现时,首先需要了解控制节点与显示节点通信使用的话题与消息,可以使用ros命令结合计算图来获取。
  • 3.了解了话题与消息之后,通过 C++Python 编写运动控制节点,通过指定的话题,按照一定的逻辑发布消息即可。

一.运行ROS,以键盘控制小海龟移动.

  • 这里在我上一篇文章最后一部分已经有过介绍,这里就不过多介绍了:上一篇文章

二.了解ROS话题与消息的发布与获取的方式.终端命令发布话题控制海龟圆周运动.

1.话题与消息获取:

准备: 先启动键盘控制乌龟运动案例。

在这里插入图片描述

①话题获取:

在这里插入图片描述

②消息获取:

在这里插入图片描述

③获取消息格式:

在这里插入图片描述


  • 乌龟线速度取值只有x和角速度z
  • 因为只有前后左右四个键位控制运动

在这里插入图片描述

  • 可以看到只有线速度x和角速度y
  • 因为只有上下左右四个键
  • 上下控制线速度x,左右控制角速度z
④实现发布节点

命令行实现控制圆周运动

  • 先输入以下命令
rostopic pub -r 10 /turtle1/cmd_vel geometry_msgs/Twist "linear:

接下来按下Tab键,会自动帮我们补全

在这里插入图片描述

  • 接下来修改数据,把线速度的X修改为1,角速度的Z也修改为1.修改完后按下回车
    在这里插入图片描述
  • 这样就简单实现了小海龟的圆周运动,

三.C++编码实现小海龟圆周运动.

1.创建ROS工作空间

①创建工作空间
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
②编译工作空间
cd ~/catkin_ws
catkin_make
③编译工作空间
source devel/setup.bash
④检查环境变量
echo $ROS_PACKAGE_PATH

在这里插入图片描述

2.创建ROS功能包

①创建功能包
cd ~/catkin_ws/src
catkin_create_pkg learning_topic std_msgs rospy roscpp geometry_msgs
②编译功能包
cd ~/catkin_ws
catkin_make
source devel/setup.bash

3.C++代码

①.创建publisher.cpp文件

在位置~/catkin_ws/src/learning_topic/src/下创建publisher.cpp文件.

②.发布话题的逻辑:

1.初始化ROS节点;
2.向ROS Master注册节点信息,包括发布的话题名和话题中的消息类型;
3.创建消息数据;
4.按照一定频率循环发布消息。

③.C++代码:
#include <sstream>
#include "ros/ros.h"
#include "std_msgs/String.h"
#include "geometry_msgs/Twist.h"

int main(int argc, char **argv)
{
	//初始化节点
	ros::init(argc, argv, "publisher");
	//创建节点句柄
	ros::NodeHandle n;
	//创建publisher,发布话题[/turtle1/cmd_vel],消息类型[geometry_msgs::Twist]
	ros::Publisher chatter_pub = n.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel", 1000);
	//设置循环频率
	ros::Rate loop_rate(100);
	while (ros::ok())
	{
		//定义发布的数据
		geometry_msgs::Twist msg;
		//定义linear数据
		geometry_msgs::Vector3 linear;
		linear.x=1;
		linear.y=0;
		linear.z=0;
		//定义angular数据
		geometry_msgs::Vector3 angular;
		angular.x=0;
		angular.y=0;
		angular.z=1;
		msg.linear=linear;
		msg.angular=angular;
		//发布msg数据
		chatter_pub.publish(msg);
		//循环等待回调函数
		ros::spinOnce();
		//按照循环频率延时
		loop_rate.sleep();
	}
	return 0;
}

4.添加编译选项

Python在ubuntu是可以直接执行的脚本语言,而C++是编译语言,在执行之前需要经过编译过程,因此在编译工作空间之前需要配置文件。

cd ~/catkin_ws/src/learning_topic
gedit CMakeLists.txt
  • 在最后加上以下代码
add_executable(publisher src/publisher.cpp)
target_link_libraries(publisher ${catkin_LIBRARIES})
  • 保存退出,再进行编译命令。
cd ~/catkin_ws
catkin_make

在这里插入图片描述

  • 如果也显示100% 就接着下一步,启动publisher节点控制小海龟运动.

5.启动小海龟并实现控制

roscore
#打开新终端
rosrun turtlesim turtlesim_node
#打开新终端
cd ~/catkin_ws
#下面这一步是为了保证rosrun命令能够找到相应的功能包,有可以省去这一步骤的方法,各位可以自行查找
source ~/catkin_ws/devel/setup.bash
rosrun learning_topic publisher

在这里插入图片描述

  • 完成命令后可以看到小海龟以圆周运动.

四.总结

这次实验是继用键盘控制小海龟移动后的进一步实验步骤,熟悉了ROS的消息和话题的收发机制.直观上也了解了小海龟的运动机制,了解了Turtlesim以线速度和角速度为基础运动,并且可以在终端直接进行赋值从而使得小海龟以我们想要的方式运动,并且最后我们实现了编程方式控制小海龟圆周运动,对ROS也有了更进一步的了解.

五.参考

[ROS基础-6] 发布话题消息控制Turtlesim运动实验
ROS通信实操(小乌龟通信实现)(九)C++、Python

  • 10
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
利用ROS(机器人操作系统)实现手势控制小海龟运动是通过结合ROS的三个核心概念:发布者(Publisher)、订阅者(Subscriber)和服务(Service)来实现的。 首先,我们需要通过ROS的发布者订阅者模式,将与手势识别相连的传感器发布到一个特定的主题上。在这个情况下,传感器将捕捉到手势的运动,并将其解释为特定的ROS消息。例如,当手势为“向前推进”时,发布者将将消息发布到主题“/cmd_vel”。 其次,我们将创建一个ROS订阅者节点,用于接收发布者节点发送的消息。该节点将通过订阅主题“/cmd_vel”来获取手势传感器发布的指令。一旦接收到指令,该节点将相应地解释并发送小海龟的运动指令到主题“/turtle1/cmd_vel”,以使其向所需的方向移动。 最后,我们可以创建一个服务节点,它可以监听特定的服务请求,并执行相应的任务。例如,我们可以通过创建一个名为“/turtle_control”的服务节点,来接收特定手势的请求,例如“停止”、“左转”、“右转”等。当接收到这些请求时,服务节点将向小海龟发送相应的运动指令。 通过结合这三个核心概念,我们可以实现利用ROS实现手势控制小海龟运动的功能。总体而言,这种方法可以使小海龟通过手势控制来移动,从而增加了机器人控制的交互性和灵活性。同时,通过ROS的发布订阅模式和服务,我们可以高效地管理和处理海龟运动的指令,从而更好地控制机器人的运动。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值