机器人操作系统ROS学习实战篇之------让小乌龟画矩形

十年热恋 提交于 2021-01-14 06:01:49

继续研究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退出节点,小乌龟也停止了。

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!