技術分享 | ROS小實驗——“圓龜”

最近呢,我們收到用戶的反饋,雖然我們每期的微信公衆號都有很不錯的內容,但是好多文章都是隻能看一看、學一學,很少可以上手實操體驗。希望我們可以推出不僅可以學習,而且還能上手操作的一些內容文章,我們也是非常關心用戶的需求,由此阿木推出一個新的文章系列——ROS小實驗。“ROS小實驗”系列針對ROS的初學者,整體內容偏簡單,內容爲講解一個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 file 使用方向鍵便可以控制小烏龜移動,接下來,我們就需要去剖析小烏龜移動背後的邏輯。 我們需要了解控制小烏龜移動的功能demo的節點信息,使用rqt_graph可視化工具查看。 file 如上圖所示,可以知道teleop_turtle節點通過/turtle1/cmd_vel話題向turtlesim節點發布了速度控制數據。 通過 rostopic info /turtle1/cmd_vel命令可以發現該話題傳輸的消息類型爲geometry_msgs/Twist類型。 file 再使用rosmsg show geometry_msgs/Twisit命令可以發現該消息的具體信息。 file 最後使用rostopic echo /turtle1/cmd_vel命令監聽該話題的輸出,再結合小烏龜的表現形式,不難發現,geometry_msgs/Twsit 消息類型的數據中,linear.x控制小烏龜前進或後退,angular.z控制小烏龜旋轉。 file 到此爲止,我們已經完全清楚小烏龜的節點信息,話題信息,消息信息以及控制接口等內容,接下來就只剩下如何去控制小烏龜運動了。 通過 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 將以下內容複製粘貼到該文件中,並保存退出 file #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<geometry_msgs::Twist>("/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 0; }

1. 修改CMakeLists.txt文件

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

add_executable(circle_turtle src/circle_turtle.cpp)

target_link_libraries(circle_turtle

${catkin_LIBRARIES} )

2. 編譯 $ cd ~/amov_ws $ catkin_make 編譯成功後進入下一步驟

3. 運行程序

打開三個終端,運行下面的指令

第一個終端 $ roscore

第二個終端 $ rosrun turtlesim turtlesim_node

第三個終端 $ source ~/amov_ws/devel/setup.bash $ rosrun amov circle_turtle 運行成功便會看到“圓龜”了 file

至此,“圓龜”小實驗的內容就全部結束了,希望能對大家的ROS學習能有一定幫助,完成“圓龜”這個功能demo不是目的,通過“圓龜”讓大家簡單瞭解到ROS的開發流程、功能開發思路以及相關工具的使用纔是最重要的。也希望大家能夠舉一反三,能夠在“圓龜”的基礎上玩出更多的花樣。下一期我們將推出用服務的形式來實現不同半徑和時間的“圓龜”,有興趣的朋友們先嚐試完成這樣一個功能demo。 作者:阿木實驗室-木十

  • End -

技術發展的日新月異,阿木實驗室將緊跟技術的腳步,不斷把機器人行業最新的技術和硬件推薦給大家。看到經過我們培訓的學員在技術上突飛猛進,是我們培訓最大的價值。如果你在機器人行業,就請關注我們的公衆號,我們將持續發佈機器人行業最有價值的信息和技術。 阿木實驗室致力於前沿IT科技的教育和智能裝備,讓機器人研發更高效!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章