簡單的代碼讓turtlebot動起來 (使用kobuki底座)直行與旋轉

來源:互聯網
上載者:User

之前都是使用鍵盤控制turtlebot的行走,於是想寫段代碼可以讓turtlebot自己動起來,畢竟今後的工作是想讓機器人在地圖上可以實現自行路徑規划到達指定的目的地。


啟動turtlebot後在命令列敲入rostopic list我們可以看到當前所有的topic,如下圖


我們在使用鍵盤控制turtlebot的時候用到的時候cmd_vel這一個topic,然而在上圖中我們並沒有發現它。經過一番查閱和對比,在官方代碼 kobuki_keyop/launch/keyop.launch檔案中可以看到<remap from="keyop/cmd_vel" to="mobile_base/commands/velocity">,把keyop/cmd_vel映射到了mobile_base/commands/velocity上,而這個topic是有的。所以為了實現我們用代碼控制turtlebot的想法,就需要我們向該topic發一個類型為geometry_msgs/Twist類型的訊息,本訊息中要包含運動的線速度和角速度。


分析正確後實現起來就簡單多了。


首先建立程式包

catkin_create_pkg turtle_move roscpp geometry_msgs tf

其中關於roscpp的官方解釋是:

roscpp is a C++ implementation of ROS. It provides a client library that enables C++ programmers to quickly interface with ROS Topics, Services, and Parameters. roscpp is the most widely used ROS client library and is designed to be the high-performance library for ROS.


下面是代碼部分,在turtle_move/src中建立move_turtle_goforward.cpp程式,附上讓機器人直行的代碼

#include <ros/ros.h>#include <signal.h>#include <geometry_msgs/Twist.h>ros::Publisher cmdVelPub;void shutdown(int sig){  cmdVelPub.publish(geometry_msgs::Twist());//使機器人停止運動  ROS_INFO("move_turtle_goforward ended!");  ros::shutdown();}int main(int argc, char** argv){  ros::init(argc, argv, "move_turtle_goforward");//初始化ROS,它允許ROS通過命令列進行名稱重新對應  ros::NodeHandle node;//為這個進程的節點建立一個控制代碼  cmdVelPub = node.advertise<geometry_msgs::Twist>(/mobile_base/commands/velocity, 1);//在/mobile_base/commands/velocity topic上發布一個geometry_msgs/Twist的訊息  ros::Rate loopRate(10);//ros::Rate對象可以允許你指定自迴圈的頻率  signal(SIGINT, shutdown);  ROS_INFO("move_turtle_goforward cpp start...");  geometry_msgs::Twist speed; // 控制訊號載體 Twist message  while (ros::ok())  {    speed.linear.x = 0.1; // 設定線速度為0.1m/s,正為前進,負為後退    speed.angular.z = 0; // 設定角速度為0rad/s,正為左轉,負為右轉    cmdVelPub.publish(speed); // 將剛才設定的指令發送給機器人    loopRate.sleep();//休眠直到一個頻率周期的時間  }  return 0;}

旋轉也是同理,僅僅需要把線速度設為0,角速度設為0.5即可。


回到上層,在CMakeList.txt檔案的末尾加上兩句:

add_executable(move_turtle_goforward src/move_turtle_goforward.cpp)
target_link_libraries(move_turtle_goforward ${catkin_LIBRARIES})

編譯一下敲入

catkin_make


啟動機器人,這裡我用的是kobuki

roslaunch kobuki_node minimal.launch

再運行我們寫好的move_turtle_goforward程式

rosrun turtle_move move_turtle_goforward


搞定。就可以看到turtlebot直行了,鍵盤按CTRL+C結束程式讓turtlebot停下。

最後感謝騰哥的指導。




相關關鍵詞:
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.