ROS学习【3】-----ROS通信编程:小乌龟走正方形

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 
#include 
#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
  //第二个参数是发布的缓冲区大小,是消息类型
  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;
}

ROS学习【3】-----ROS通信编程:小乌龟走正方形_第1张图片

4、关闭文件

到这里,我们的让小乌龟画圆的程序就编写好了,如下所示:
ROS学习【3】-----ROS通信编程:小乌龟走正方形_第2张图片

二、修改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

如下图所示即为成功:
ROS学习【3】-----ROS通信编程:小乌龟走正方形_第3张图片
你们的可能会长一点,但只要出现100%即为成功,我的只是之前编译过,所以比较快、少!

五、运行程序

1、程序注册

1)、回到我们的工作空间

cd ~/ros

2)、程序注册

source ./devel/setup.bash

在这里插入图片描述

2、新建一个终端,运行ros,我们命名为终端2

roscore

在这里插入图片描述

3、再新建一个终端,启动我们的小海龟,海龟的窗口我们命名为窗口3

rosrun turtlesim turtlesim_node

ROS学习【3】-----ROS通信编程:小乌龟走正方形_第4张图片

4、在终端1运行我们的小海龟走方形程序,也就是我们最开始的终端!

记住,我们新建的终端一个都不要关闭
1)、终端1运行画圆程序

rosrun comm fang

在该命令执行后,上面的窗口3都会发生变化,如下图所示:
ROS学习【3】-----ROS通信编程:小乌龟走正方形_第5张图片
小乌龟开始走方形,出现该结果,表示程序运行成功,本次实验成功!
2)、在终端1Ctrl+C关闭程序运行,如下所示:
ROS学习【3】-----ROS通信编程:小乌龟走正方形_第6张图片
以上就是本次博客的全部内容啦,欢迎收看林君本次博客的讲解,遇到问题的小伙伴欢迎评论区留言哦!写作不易,记得点赞、评论、关注哦!
陈一月的又一天编程岁月*_*!

你可能感兴趣的:(嵌入式开发项目学习,嵌入式,linux,c++)