一、ROS基本介绍

ROS(机器人操作系统)提供一系列程序库和工具以帮助软件开发者创建机器人应用软件。它提供了硬件抽象、设备驱动、库函数、可视化、消息传递和软件包管理等诸多功能。
ROS即通讯机制+开发工具+应用功能+生态系统四位一体。
特点:点对点、分布式、多语言支持、轻量级、免费和开源。

二、小海龟仿真

  • 第一步,打开一个终端,输入以下命令
		roscore
  • 第二步,再打开一个终端,输入以下命令启动小海龟仿真器
	rosrun turtlesim turtlesim_node
  • 第三步,再打开一个终端,输入以下命令启动控制器
	rosrun turtlesim turtle_teleop_key

此时就可以通过上下左右键进行小海龟的移动操作了。
在这里插入图片描述

三、编写程序让小海龟实现圆周运动

1.用话题查看器查看两个node之间的消息传递

打开话题查看器

命令行输入以下指令

rosrun rqt_graph rqt_graph

在这里插入图片描述
这张图中,可以看出turtle_teleop与turtlesim两个节点之间通过/strong/cmd_vel进行通信,也就是话题,按键信息会发布在这个话题上,然后turtlesim_node从这个话题接受信息控制其移动,所以需要写一个文件发送控制指令。
输入下图的代码可以看到消息的获取。
在这里插入图片描述

小海龟移动的基本原理

输入以下命令可以查看

rostopic type /turtle1/cmd_vel

可以看到如下,数据类型为geometry_msgs/Twist,还需要再进一步查看
在这里插入图片描述
输入以下代码来查看:

rosmsg show geometry_msgs/Twist

在这里插入图片描述

  • linear的意思是线速度;
  • angular的意思是角速度;
  • xyz表示坐标;
    如果要控制海龟转圈,就要保持匀速向前的运动,然后角速度不为0即可。

2.编写代码实现转圈

1.创建工作空间
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
2.编译工作空间
cd ~/catkin_ws
catkin_make
source devel/setup.bash
3.创建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
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;
}


5.添加编译选项

打开CmakeLists文件

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
6.启动小海龟
roscore
#打开新终端
rosrun turtlesim turtlesim_node
#打开新终端
cd ~/catkin_ws
#下面这一步是为了保证rosrun命令能够找到相应的功能包
source ~/catkin_ws/devel/setup.bash
rosrun learning_topic publisher

结果如下图所示,小海龟进行圆周运动。
在这里插入图片描述

四、总结

本次实验主要是了解了ROS的消息和话题的收发机制,用小海龟demo直观的感受了ROS,并编程实现了控制小海龟进行圆周运动。

五、参考资料

Ubuntu18.04安装ROS——实现小海龟仿真
ROS通信实操(小乌龟通信实现)(九)C++、Python

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐