ROS通信编程--------小乌龟走正方形
ROS话题编程是嵌入式开发学习的一项重要内容,只有学会ros的话题与服务编程,我们才能够继续往更深入的地方学习嵌入式的系统开发,本次博客,林君将带大家学习怎么控制乌龟走正方形,并通过订阅服务实时在终端打印位置信息
一、进入我们的工程包,创建小乌龟画圆发送程序
1、新建一个终端,命名为终端1,然后进入我们的工程文件包
cd ~/ros/src/comm/src
这里ros是林君自己的ros工作空间、comm是林君自己定义的工程包!
2、新建画圆程序名为fang.cpp
touch fang.cpp
3、打开文件将如下代码写入fang.cpp中:
1)、打开文件如下命令
gedit fang.cpp
2)、写入文件中的代码如下命令:
#include <ros/ros.h>
#include <geometry_msgs/Twist.h>
#define PI 3.14159265358979323846
int main(int argc, char **argv){
ros::init(argc, argv, "draw_rectangle"); //"draw_rectangle"必须是nodename
std::string topic = "/turtle1/cmd_vel"; //topic name
ros::NodeHandle n;
ros::Publisher cmdVelPub = n.advertise<geometry_msgs::Twist>(topic, 1);
//第一个参数也可以写成"/turtle1/cmd_vel"这样的topic name
//第二个参数是发布的缓冲区大小,<geometry_msgs::Twist>是消息类型
ros::Rate loopRate(2);
//与Rate::sleep();配合指定自循环频率
ROS_INFO("draw_retangle start...");//输出显示信息
geometry_msgs::Twist speed; // 控制信号载体 Twist message
//声明一个geometry_msgs::Twist 类型的对象speed,并将速度的值赋值到这个对象里面
int count = 0;
while (ros::ok()){
speed.linear.x = 1; // 设置线速度为1m/s,正为前进,负为后退
speed.linear.y = 0;
speed.linear.z = 0;
speed.angular.x = 0;
speed.angular.y = 0;
speed.angular.z = 0;
count++;
while(count == 5)
{
count=0;
speed.angular.z = PI; //转90°
}
cmdVelPub.publish(speed); // 将刚才设置的指令发送给机器人
ros::spinOnce();//调用此函数给其他回调函数得以执行
loopRate.sleep();//按loopRate(2)设置的2HZ将程序挂起
}
return 0;
}
4、关闭文件
到这里,我们的让小乌龟画圆的程序就编写好了,如下所示:
二、修改CMakeLists.txt文件内容
1、进入工程包comm文件夹
cd ~/ros/src/comm
2、打开CMakeLists.txt文件
gedit CMakeLists.txt
3、在CMakeLists.txt文件末尾添加如下代码:
add_executable(fang src/fang.cpp)
target_link_libraries(fang ${catkin_LIBRARIES})
如下图所示:
然后关闭CMakeLists.txt文件
三、编译程序
1、进入工作空间ros
cd ~/ros
2、编译我们创建好的程序
catkin_make
如下图所示即为成功:
你们的可能会长一点,但只要出现100%即为成功,我的只是之前编译过,所以比较快、少!
五、运行程序
1、程序注册
1)、回到我们的工作空间
cd ~/ros
2)、程序注册
source ./devel/setup.bash
2、新建一个终端,运行ros,我们命名为终端2
roscore
3、再新建一个终端,启动我们的小海龟,海龟的窗口我们命名为窗口3
rosrun turtlesim turtlesim_node
4、在终端1运行我们的小海龟走方形程序,也就是我们最开始的终端!
记住,我们新建的终端一个都不要关闭
1)、终端1运行画圆程序
rosrun comm fang
在该命令执行后,上面的窗口3都会发生变化,如下图所示:
小乌龟开始走方形,出现该结果,表示程序运行成功,本次实验成功!
2)、在终端1Ctrl+C关闭程序运行,如下所示:
以上就是本次博客的全部内容啦,欢迎收看林君本次博客的讲解,遇到问题的小伙伴欢迎评论区留言哦!写作不易,记得点赞、评论、关注哦!
陈一月的又一天编程岁月*_*!