无人驾驶——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,具体见下图所示: