无人驾驶——ROS完成订阅与发送

无人驾驶——ROS完成订阅与发送

0.前言

ros完成简单的订阅与发送,
第一种方法:通过敲击命令行一步步的实现
第二种方法:针对RoboWare Studio鼠标点击实现
参考网址:ROS中的CMakeLists.txt
具体步骤内容大致见下:

1.第一种方法:命令行方式

1.0启动roscore检查ros是否安装成功

在这里插入图片描述

1.1建立起始工作空间
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws
catkin_make初始化,没有任何源代码的进行编译
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
roscd查看环境变量是否添加
cd ~/catkin_ws
1.2建立test的节点
cd ~/catkin_ws/src
catkin_create_pkg july_say std_msgs roscpp
cd july_say/src
vim july_say_node.cpp
cd ..
vim CMakeLists.txt
cd ~/catkin_ws
catkin_make #编译
rosrun july_say july_say_node 运行
此时,因为没有启动ros master节点,所以还无法运行

启动效果如下图所示:
在这里插入图片描述

2.第二种方法:RoboWare Studio方式

2.1RoboWare Studio打开catkin_ws工作空间

在这里插入图片描述

2.2新建cpp源文件

之后自动弹出需要更改文件名(PS:其实是设置节点名字)
在这里插入图片描述

2.3给对应的文件中填写代码文件

// july_say_node.cpp


// july_say_node.cpp
#include "ros/ros.h"
#include "std_msgs/String.h"
#include <sstream>

int main(int argc,char ** argv){
    ros::init(argc,argv,"july_talker");
    ros::NodeHandle n;
    ros::Publisher july_pub = n.advertise<std_msgs::String>("/july_topic",10);
    ros::Rate loop_rate(10);
    int count = 0;

    while(ros::ok()){
        std_msgs::String msg;
        std::stringstream ss;
        ss << "hello july" << count;
        count ++;
        msg.data = ss.str();
        july_pub.publish(msg);
        loop_rate.sleep();
    }

}

// july_listen_node.cpp

#include "ros/ros.h"
#include "std_msgs/String.h"
//#include <july_msgs/JulyMsg.h>

void julyCallback(const std_msgs::String::ConstPtr& msg){
    ROS_INFO("I heard %s",msg->data.c_str());
}


int main(int argc, char ** argv){
    ros::init(argc,argv,"july_listener");
    ros::NodeHandle n;
    ros::Subscriber sub = n.subscribe("july_topic",10,julyCallback);
    ros::spin();
    return 0;
}

一般会自动设置好cmakelist.txt的文件,如果编译出错,那就根据错误结果,进行修改

3.总结常见问题

3.1 问题1:更改CMakeLists.txt文件时,易错点?

代码中不要有空格

3.2问题2:如果忘记contrl+c关闭roscore?

暂时只能重启解决,否则一直会提示,已经启动
在这里插入图片描述

3.3问题3:更改pub节点中的发送内容的操作?

如果更改node里面的内容,每次都要重新catkin_make一下,这里是经常报错的地方,(最好重启roscore,然后在运行catkin_make
在这里插入图片描述
在这里插入图片描述

第一步:更改july_say_node.cpp中节点的内容
在这里插入图片描述
第二步:设置CmakeLists.txt中/july_say的值

在这里插入图片描述
第三步:打开新的终端 并输入roscore
在这里插入图片描述
第四步:每次更新cpp函数和其他的配置,都需要重新catkin_make一下,否则一直发送的是上次的值,(PS:记得关闭当前的使用rostopic kill july_topic)

杀死topic之后,重新catkin_make图片如下:
在这里插入图片描述
并且发送的结果也确实是改变的:
第一次是:this is my first ROS 第二次是:my first ROS,具体见下图所示:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值