ROS1(Robot Operating System) 入门学习笔记
Ubuntu 18.04
ROS melodic 1.14.13
环境变量添加 详见: ROS1入门1---工作空间与功能包
进入 上篇文章中创建的 /service_pkg/src 文件夹中
新建文件 command_server.cpp 内容如下
#include <ros/ros.h>
#include <geometry_msgs/Twist.h>
#include <std_srvs/Trigger.h>
ros::Publisher value_pub;
bool pubflag = false;
bool commandCallback(std_srvs::Trigger::Request &req, std_srvs::Trigger::Response &res)
{
pubflag = !pubflag;
ROS_INFO("State : %s", pubflag == true ? "Run" : "Stop");
res.success = true;
res.message = "change state";
return true;
}
int main(int argc, char **argv)
{
ros::init(argc, argv, "state_publisher");
ros::NodeHandle n;
ros::ServiceServer server = n.advertiseService("/my_command", commandCallback);
value_pub = n.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel", 10);
ROS_INFO("Waiting for command...");
ros::Rate loop_rate(10);
while (ros::ok())
{
ros::spinOnce();
if (pubflag == true)
{
geometry_msgs::Twist cmd_vel;
cmd_vel.linear.x = 0.5;
cmd_vel.angular.z = 0.3;
value_pub.publish(cmd_vel);
}
loop_rate.sleep();
}
}
编辑 ROS1_Learn/src/service_pkg/CMakeLists.txt
add_executable(command_server src/command_server.cpp)
target_link_libraries(command_server ${catkin_LIBRARIES})
回到 工作空间根目录 编译
catkin_make
打开4个终端分别输入
roscore
rosrun turtlesim turtlesim_node
rosrun service_pkg command_server
rosservice call /my_command "{}"
海龟开始转圈运动
在最后一个终端 再次输入 rosservice call /my_command "{}"
海龟停止运动