中原富国科技网

技术分享|ROS小实验——“圆龟”

中原富国科技网 0

最近呢,上线新功能。1、7月28日消息,我们收到用户的反馈,谷歌母公司Alphabet今天发布了截至6月30日的2021财年第二季度财报。财报显示,虽然我们每期的微信公众号都有很不错的内容,Alphabet第二季度营收为618.8亿美元,但是好多文章都是只能看一看、学一学,较上年同期的382.97亿美元增长62%;净利润为185.25亿美元,很少可以上手实操体验。希望我们可以推出不仅可以学,较上年同期的69.59亿美元增长166%。2、7月28日讯,而且还能上手操作的一些内容文章,据官媒公告,我们也是非常关心用户的需求,8月1日零时起,由此阿木推出一个新的文章系列——ROS小实验。“ROS小实验”系列针对ROS的初学者,平台所有淘宝天猫商家的贷记类收款服务费将统一降至0.6%,整体内容偏简单,借记类收款服务费则继续保持免费。具体来说,内容为讲解一个ROS下的小功能DEMO流程,当消费者使用借记卡余额宝等资金消费时,每期我们都会推出一个不一样的小功能DEMO,涵盖ROS绝分知识点,家能从中学到ROS相关知识点,也能简单熟悉ROS的流程和一些技巧。

本期内容的主题为“圆龟”,家都知道圆规是可以画圆的,但此圆龟非彼圆规,ROS下的小乌龟家应该都比较熟悉,作为ROS官方教程御用教官,带领分学从事于ROS的人员进入ROS的世界中,今天我们也将用这只小乌龟来画一个圆。

为了有一个良好的学效果,建议家有能力可以自己先试着如何用ROS下的小乌龟画圆,在遇到问题或者实现不了的情况下再看下面的内容。

前方高能预警!

从现在开始我们将进入“圆龟”的流程。

首先,可以先看一下官方的例程demo

(http://wiki.ros.org/ROS/Tutorials/UnderstandingTopics)

该教程是让用户控制小乌龟移动,从而去理解ROS的一些概念,从这个教程中,我们可以看出小乌龟移动后是会留下一条白色轨迹,那么画圆就是让乌龟的运动轨迹是一个圆。

首先,我们依次启动下面三条命令,将控制小乌龟移动的功能demo启动。

$ roscore

$ rosrun turtlesim turtlesim_node

$ rosrun turtlesim turtle_teleop_key

使用方向键便可以控制小乌龟移动,接下来,我们就需要去剖析小乌龟移动背后的逻辑。

我们需要了解控制小乌龟移动的功能demo的节点信息,使用rqt_graph可视化工具查看。

如上图所示,可以知道teleop_turtle节点通过/turtle1/cmd_vel话题向turtlesim节点发布了速度控制数据。

通过 rostopic info /turtle1/cmd_vel命令可以发现该话题传输的消息类型为geometry_msgs/Twist类型。

再使用

rosmsg show geometry_msgs/Twisit

命令可以发现该消息的具体信息。

最后使用rostopic echo /turtle1/cmd_vel命令该话题的输出,再结合小乌龟的表现形式,不难发现,geometry_msgs/Twsit 消息类型的数据中,linear.x控制小乌龟前进或后退,angular.z控制小乌龟旋转。

到此为止,我们已经完全清楚小乌龟的节点信息,话题信息,消息信息以及控制接口等内容,接下来就只剩下如何去控制小乌龟运动了。

通过 v=rw 该公式我们可以清楚地认识到,当小乌龟具有一个固定的线速度和角速度时,就会有一个圆的运动轨迹,那么现在我们只需要编写一个ROS程序,向/turtle1/cmd_vel发布一个固定的线速度和角速度就可以实现“圆龟”了。

现在同学们可以根据上面的信息自行编写程序代码实现该功能,也可以参考下面的内容实现(例程以C++代码实现)。

1. 创建工作空间

$ mkdir –p ~/amov_ws/src

$ cd amov_ws/src

$ catkin_init_workspace

2. 创建功能包

$ cd ~/amov_ws/src

$ catkin_create_pkg amov roscpp rospy

3. 创建CPP文件

$ cd ~/amov_ws/src/amov/src

$ gedit circle_turtle.cpp

将以下内容复制粘贴到该文件中,并保存退出

#include "ros/ros.h"

#include "geometry_msgs/Twist.h"

int main(int argc, char** argv)

{

ros::init(argc, argv, "circle_turtle");

ros::NodeHandle n;

ros::Publisher pub = n.advertise("/turtle1/cmd_vel", 10);

geometry_msgs::Twist twist;

twist.linear.x = 2.0;

twist.angular.z = 1.0;

ros::Rate r(10);

while(ros::ok())

{

pub.publish(twist);

r.sleep();

}

return ;

}

1. 修改CMakeLists.txt文件

在CMakeLists.txt文件中加入以下内容

add_executable(circle_turtle src/circle_turtle.cpp)

target_link_libraries(circle_turtle

$ )

2. 编译

$ cd ~/amov_ws

$ catkin_make

编译成功后进入下一步骤

3. 运行程序

打开三个终端,运行下面的指令

第一个终端

$ roscore

第二个终端

$ rosrun turtlesim turtlesim_node

第三个终端

$ source ~/amov_ws/devel/setup.bash

$ rosrun amov circle_turtle

运行成功便会看到“圆龟”了

至此,“圆龟”小实验的内容就全结束了,希望能对家的ROS学能有一定帮助,完成“圆龟”这个功能demo不是目的,通过“圆龟”让家简单了解到ROS的流程、功能思路以及相关工具的使用才是最重要的。也希望家能够举一反三,能够在“圆龟”的基础上玩出更多的花样。下一期我们将推出用服务的形式来实现不同半径和时间的“圆龟”,有兴趣的朋友们先尝试完成这样一个功能demo。

作者:阿木实验室-木十

- End -

技术发展的日新月异,阿木实验室将紧跟技术的脚步,不断把机器人行业最新的技术和硬件推荐给家。看到经过我们培训的学员在技术上突飞猛进,是我们培训最的价值。如果你在机器人行业,就请关注我们的公众号,我们将持续发布机器人行业最有价值的信息和技术。

尼康d 5200相机光圈怎么调

索尼相机怎么拍校运会

手机富士滤镜相机怎么设置

乒乓球为什么这么强

吕小雨的星座有什么

96年属鼠的12月怎么样

做梦看病没赶上车预示什么

标签:ros turtle