继续研究ROS,今天的主题是编写节点让小乌龟画简单的几何图形。
主要参考这位老兄的博客https://blog.csdn.net/IMBA_09/article/details/84950696。
1:进入工作空间
1 cd catkin_ws/src #进入工作空间
2 catkin_create_pkg my_turtle_package rospy roscpp #新建my_turtle_package包
2:节点代码
1 cd my_turtle_package/src/
2 touch draw_rectangle.cpp
在打开的新文件中代码如下:
1 #include <ros/ros.h>
2 #include <geometry_msgs/Twist.h>
3 #define PI 3.14159265358979323846
4
5 int main(int argc, char **argv){
6 ros::init(argc, argv, "draw_rectangle"); //"draw_rectangle"必须是nodename
7 std::string topic = "/turtle1/cmd_vel"; //topic name
8 ros::NodeHandle n;
9 ros::Publisher cmdVelPub = n.advertise<geometry_msgs::Twist>(topic, 1);
10 //第一个参数也可以写成"/turtle1/cmd_vel"这样的topic name
11 //第二个参数是发布的缓冲区大小,<geometry_msgs::Twist>是消息类型
12 ros::Rate loopRate(2);
13 //与Rate::sleep();配合指定自循环频率
14 ROS_INFO("draw_retangle start...");//输出显示信息
15 geometry_msgs::Twist speed; // 控制信号载体 Twist message
16 //声明一个geometry_msgs::Twist 类型的对象speed,并将速度的值赋值到这个对象里面
17 int count = 0;
18 while (ros::ok()){
19 speed.linear.x = 1; // 设置线速度为1m/s,正为前进,负为后退
20 speed.linear.y = 0;
21 speed.linear.z = 0;
22 speed.angular.x = 0;
23 speed.angular.y = 0;
24 speed.angular.z = 0;
25 count++;
26 while(count == 5)
27 {
28 count=0;
29 speed.angular.z = PI; //转90°
30 }
31 cmdVelPub.publish(speed); // 将刚才设置的指令发送给机器人
32 ros::spinOnce();//调用此函数给其他回调函数得以执行
33 loopRate.sleep();//按loopRate(2)设置的2HZ将程序挂起
34 }
35
36 return 0;
37 }
在terminal中继续输入下面的命令:
1 cd ~/catkin_ws/src/my_turtle_package
2 gedit CMakeLists.txt
用gedit打开CMakeLists.txt文件,然后找到##Declare a C++ executable,在这一行的前面或者后面添加如下内容:
1 add_executable(draw_rectangle src/draw_rectangle.cpp)
2 target_link_libraries(draw_rectangle ${catkin_LIBRARIES})
添加完以上内容后我们保存并退出CMakeLists.txt文件。然后在terminal中继续输入如下命令进行编译:
1 cd ~/catkin_ws/
2 catkin_make
一切顺利的话就会编译成功,接下来就可以让小乌龟来画矩形了。
3:启动节点
打开第一个terminal终端,启动ros
1 roscore
打开第二个terminal终端,启动rosnode
rosrun turtlesim turtlesim_node
打开第三个terminal终端,启动my_turtle_package节点
1 cd ~/catkin_ws/
2 source devel/setup.bash
3 rosrun my_turtle_package draw_rectangle
此时我们可以看到小乌龟已经在画矩形了,如果按下Ctr+C退出节点,小乌龟也停止了。
来源:oschina
链接:https://my.oschina.net/u/4380330/blog/3413355