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