系統版本:Ubuntu14.04,ROS indigo
機器人底盤:kobuki
攝像頭:Asus Xtion
一、功能介紹
編譯兩個簡單程式,一個是機器人直行,另一個是原地旋轉。
二、實驗步驟
1.建立程式包
catkin_create_pkg robot_move roscpp geometry_msgs tf
2.在robot_move/src/裡建立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("goforward cpp ended!");
ros::shutdown();
}
int main(int argc, char** argv)
{
ros::init(argc, argv, "GoForward");//初始化ROS,它允許ROS通過指令行進行名稱重映射
std::string topic = "/cmd_vel";
ros::NodeHandle node;//為這個程序的節點建立一個句柄
cmdVelPub = node.advertise<geometry_msgs::Twist>(topic, );//告訴master将要在/cmd_vel topic上釋出一個geometry_msgs/Twist的消息
ros::Rate loopRate();//The desired rate to run at in Hz,ros::Rate對象可以允許你指定自循環的頻率
// Override the default ros sigint handler. This must be set after the first NodeHandle is creat
signal(SIGINT, shutdown);
ROS_INFO("goforward cpp start...");
geometry_msgs::Twist speed; // 控制信号載體 Twist message
while (ros::ok())
{
speed.linear.x = ; // 設定線速度為0.1m/s,正為前進,負為後退
speed.angular.z = ; // 設定角速度為0rad/s,正為左轉,負為右轉
cmdVelPub.publish(speed); // 将剛才設定的指令發送給機器人
loopRate.sleep();//休眠直到一個頻率周期的時間
}
return ;
}
3.在robot_move/src/裡建立goincircles.cpp,将goforward.cpp的源代碼複制到goincircles.cpp
将speed.linear.x設定為0,speed.angular.z設定為0.4,其它不變。
4.修改robot_move目錄下的CMakeLists.txt
在CMakeLists.txt檔案末尾加入幾條語句:
add_executable(goforward src/goforward.cpp)
target_link_libraries(goforward ${catkin_LIBRARIES})
add_executable(goincircles src/goincircles.cpp)
target_link_libraries(goincircles ${catkin_LIBRARIES})
整個CMakeLists.txt檔案如下:
cmake_minimum_required(VERSION )
project(robot_move)
## Find catkin macros and libraries
## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
## is used, also find other catkin packages
find_package(catkin REQUIRED COMPONENTS
geometry_msgs
tf
roscpp
)
catkin_package(
# INCLUDE_DIRS include
# LIBRARIES robot_move
CATKIN_DEPENDS geometry_msgs roscpp
# DEPENDS system_lib
)
###########
## Build ##
###########
## Specify additional locations of header files
## Your package locations should be listed before other locations
# include_directories(include)
include_directories(
${catkin_INCLUDE_DIRS}
)
add_executable(goforward src/goforward.cpp)
target_link_libraries(goforward ${catkin_LIBRARIES})
add_executable(goincircles src/goincircles.cpp)
target_link_libraries(goincircles ${catkin_LIBRARIES})
5.編譯程式
在catkin_ws目錄下,執行一下指令編譯:
catkin_make –force-cmake -G”Eclipse CDT4 - Unix Makefiles” -DCMAKE_BUILD_TYPE=Debug -DCMAKE_ECLIPSE_MAKE_ARGUMENTS=-j8
得到goforward和goincircles兩個執行程式。
為何不直接執行catkin_make編譯?因為執行指令也可以讓Eclipse識别該工程,友善在Eclipse編寫調試代碼。執行過一次,以後隻需catkin_make編譯,Eclipse也能識别。
6.測試程式
6.1 啟動roscore
roscore
6.2 啟動機器人
6.2.1若是運作仿真機器人
6.2.2若是運作真實的機器人平台
6.3 啟動 rviz 圖形化顯示程式,如圖1
圖1
6.4 啟動goforward程式,如圖2
rosrun robot_move goforward
圖2
6.5 Ctrl+C結束goforward程式,再測試goincircles程式,如圖3
rosrun robot_move goincircles
圖3
源代碼:https://github.com/KeoChi/robot_move
個人學習筆記,歡迎交流學習。