本教程是B站阿杰视频的笔记
视频地址:
ROS Index官网:/
搜索std_msgs
找到匹配的版本
std_msgs
选择Website
,进入
下翻到 2.ROS Message Types
消息是嵌套的,由简单到复杂,类似C++的结构体
这一期我们将按照这个场景来构建话题的发布者,一共有2个发布者,根据需求创建ssr_pkg包的chao_node和yao_node订阅节点
打开之前创建的ssr_pkg
,教程参照: 【初学ROS,年轻人的第一个Node节点】用VScode打开chao_node.cpp
去ROS Index查找对应消息类型,进入,下翻到 2.ROS Message Types
超哥说的那句话不就是一个字符串吗
chao_node.cpp
源程序#include <ros/ros.h>
#include <std_msgs/String.h>
int main(int argc,char *argv[])
{ros::init(argc,argv,"chao_node" );printf("我的枪去而复返,你的生命有去无回!n");ros::NodeHandle nh;ros::Publisher pub = nh.advertise<std_msgs ::String>("kuai_shang_che_kai_hei_qun", 10);ros::Rate loop_rate(10);while( ros::ok()){printf("我要开始刷屏了!n");std_msgs::String msg;msg.data ="国服马超,带飞";pub.publish(msg);loop_rate.sleep();}return 0;
}
ctrl+s
快捷保存
ctrl+shift+b
快捷编译
打开两个终端,分别运行两行代码
roscore
rosrun ssr_pkg chao_node
rostopic工具
rostopic list
rostopic echo /kuai_shang_che_kai_hei_qun
echo -e "u56FDu670Du9A6Cu8D85uFF0Cu5E26u98DE"
rostopic hz /kuai_shang_che_kai_hei_qun
小结
从chao_node.cpp
复制到节点yao_node.cpp
#include <ros/ros.h>
#include <std_msgs/String.h>
int main(int argc,char *argv[])
{ros::init(argc,argv,"yao_node" );printf("过去生于未来!n");ros::NodeHandle nh;ros::Publisher pub = nh.advertise<std_msgs ::String>("gie_gie_dai_wo", 10);ros::Rate loop_rate(10);while( ros::ok()){printf("我要开始刷屏了!n");std_msgs::String msg;msg.data ="求上车+++";pub.publish(msg);loop_rate.sleep();}return 0;
}
ctrl+s
快捷保存
ctrl+shift+b
快捷编译
增加yao_node节点配置
add_executable(chao_node src/chao_node.cpp)
target_link_libraries (chao_node${catkin_LIBRARIES}
)
add_executable(yao_node src/yao_node.cpp)
target_link_libraries(yao_node${catkin_LIBRARIES}
)
运行新节点前,需要保留下面两个终端
roscore
rosrun ssr_pkg chao_node
rosrun ssr_pkg yao_node
采用rostopic查看消息
rostopic工具
rostopic list
rostopic echo /gie_gie_dai_wo
echo -e "u56FDu670Du9A6Cu8D85uFF0Cu5E26u98DE"
rostopic hz /gie_gie_dai_wo
根据需求创建atr_pkg包的ma_node订阅节点
创建Package软件包
catkin_creat_pkg atr_pkg rospy roscpp std_msgs
新建src文件夹的ma_node.cpp
文件
修改ma_node
代码
#include <ros/ros.h>
#include <std_msgs/String.h>
void chao_callback(std_msgs::String msg)
{printf(msg.data.c_str());printf("n");
}
int main(int argc,char *argv[])ros::init(argc,argv,"ma_node" );ros::NodeHandle nh;ros::Subscriber sub = nh.subscribe("kuai_shang_che_kai_hei_qun",10,chao_callback);while ( ros::ok()){ros::spinOnce();}
return 0;
增加ma_node节点配置
add_executable(ma_node src/ma_node.cpp)
target_link_libraries(ma_node${catkin_LIBRARIES}
)
ctrl+s
快捷保存
ctrl+shift+b
快捷编译
打开3个终端,分别运行3行代码
roscore
rosrun ssr_pkg chao_node
rosrun atr_pkg ma_node
修改ma_node节点,添加chao_node节点的订阅
ma_node.cpp
源程序
#include <ros/ros.h>
#include <std_msgs/String.h>
void chao_callback(std_msgs::String msg)
{ROS_INFO(msg.data.c_str());}
int main(int argc,char *argv[])
{setlocale(LC_ALL,"");ros::init(argc,argv,"ma_node" );ros::NodeHandle nh;ros::Subscriber sub = nh.subscribe("kuai_shang_che_kai_hei_qun",10,chao_callback);while ( ros::ok()){ros::spinOnce();}return 0;
}
打印如下
[]时间戳表示【格林尼治时间1970年1月1日0时0分0秒】距离现在多少秒。
修改ma_node节点,添加yao_node节点的订阅
ma_node.cpp
源程序
#include <ros/ros.h>
#include <std_msgs/String.h>
void chao_callback(std_msgs::String msg)
{ROS_INFO(msg.data.c_str());
}
void yao_callback(std_msgs::String msg)
{ROS_WARN(msg.data.c_str());
}
int main(int argc,char *argv[])
{setlocale(LC_ALL,"");ros::init(argc,argv,"ma_node" );ros::NodeHandle nh;ros::Subscriber sub = nh.subscribe("kuai_shang_che_kai_hei_qun",10,chao_callback);ros::Subscriber sub_2 = nh.subscribe("gie_gie_dai_wo",10,yao_callback);while ( ros::ok()){ros::spinOnce();}return 0;
}
打开4个终端,分别运行4行代码
roscore
rosrun ssr_pkg chao_node
rosrun ssr_pkg yao_node
rosrun atr_pkg ma_node
该文件类型是XML语法,类似http文本。
批量启动ros节点文件
新建launch文件夹的kai_hei.launch
文件
kai_he.launch
源码
launch><node pkg="ssr_pkg" type="yao_node" name="yao_node" /><node pkg="ssr_pkg" type="chao_node" name=" chao_node" /><node pkg="atr_pkg" type="ma_node" name="ma_node" output="screen"/>
</launch>
运行下面指令,启动launch的三个节点
roslaunch atr_pkg kai_hei.launch
采用rqt_graph命令查看节点流图
修改kai_he.launch
源码,添加launch-prefix=" gnome-terminal -e"
,开一个新终端运行显示chao_node节点
launch><node pkg="ssr_pkg" type="yao_node" name="yao_node" /><node pkg="ssr_pkg" type="chao_node" name=" chao_node" launch-prefix=" gnome-terminal -e"/><node pkg="atr_pkg" type="ma_node" name="ma_node" output="screen"/>
</launch>
运行下面指令,启动launch的三个节点
roslaunch atr_pkg kai_hei.launch
output="screen”
属性,可以让节点信息输出在终端中。(ROS_WARN不受该属性控制)launch-prefix="gnome-terminal -e"
属性,可以让节点单独运行在一个独立终端中。
ctrl+alt+t
打开终端,只需一次编译
创建python包
cd catkin_ws/src/
catkin_create_pkg ssr_pkg rospy std_msgs
cd ..
catkin_make
VScode打开,创建scripts
创建chao_node.py
先引入python包,设置中文utf-8显示
对比学习C++发布节点
NodeHandle变为rospy
chao_node.py
源码
#!/usr/bin/env python3
#coding=utf-8
import rospy
from std_msgs.msg import String
if _name__ == "_main_":rospy.init_node ( " chao_node ")rospy.logwarn("我的枪去而复返,你的生命有去无回!")pub = rospy.Publisher( "kuai_shang_che_kai_hei_qun" ,String , queue_size=10)rate = rospy. Rate( 10)while not rospy.is_shutdown():rospy.loginfo("我要开始刷屏了")msg = String()msg.data =“国服马超,带飞"pub.publish(msg)rate.sleep(
在所在文件夹打开终端
chmod +x chao_node.py
打开两个终端分别运行两条指令
roscore
rosrun ssr_pkg chao_node.py
rostopic工具
rostopic list
rostopic echo /kuai_shang_che_kai_hei_qun
echo -e "u56FDu670Du9A6Cu8D85uFF0Cu5E26u98DE"
python前面经过第一次编译,后期不需要编译可以直接运行,也不需要CMake文件配置
直接复制chao_node.py改为yao_node.py,权限也会一起传递
yao_node.py
源码
#!/usr/bin/env python3
#coding=utf-8
import rospy
from std_msgs.msg import String
if _name__ = "__main_":rospy.init_node ( "yao_node")rospy.logwarn("过去生于未来! ")pub = rospy. Publisher( "gie_gie_dai_wo" ,String , queue_size=10)rate = rospy.Rate(10)while not rospy.is_shutdown():rospy.loginfo("我要开始刷屏了")msg = String()msg.data = "求上车+++"pub.publish(msg)rate.sleep()
打开两个终端分别运行两条指令
roscore
rosrun ssr_pkg yao_node.py
rostopic工具
rostopic list
rostopic echo /gie_gie_dai_wo
echo -e "u56FDu670Du9A6Cu8D85uFF0Cu5E26u98DE"
根据需求创建atr_pkg包的ma_node订阅节点
创建Package软件包
cd catkin_ws/src/
catkin_creat_pkg atr_pkg rospy std_msgs
cd ..
catkin_make
VScode打开,创建scripts文件夹,创建ma_node.py
先引入python包,设置中文utf-8显示
对比学习C++发布节点
NodeHandle变为rospy
修改ma_node
代码
#!/usr/bin/env python3
#coding=utf-8
import rospy
from std_msgs.msg import String
def chao_callback(msg):rospy. loginfo(msg.data)
ifname== "_main_":rospy.init_node ( "ma_node" )sub = rospy.Subscriber("kuai_shang_che_kai_hei_qun" ,String , chao_callback,queue_size=10)rospy.spin ()
在所在文件夹打开终端
chmod +x ma_node.py
打开3个终端,分别运行3行代码
roscore
rosrun ssr_pkg chao_node.py
rosrun atr_pkg ma_node
修改ma_node节点,添加yao_node节点的订阅
ma_node.py
源程序
#!/usr/bin/env python3
#coding=utf-8
import rospy
from std_msgs.msg import String
def chao_callback(msg):rospy. loginfo(msg.data)
def yao_callback(msg):rospy. logwarn(msg.data)
ifname== "_main_":rospy.init_node ( "ma_node" )sub = rospy.Subscriber("kuai_shang_che_kai_hei_qun" ,String , chao_callback,queue_size=10)sub_2 = rospy.Subscriber("gie_gie_dai_wo" ,String , yao_callback,queue_size=10)rospy.spin ()
新建launch文件夹的kai_hei.launch
文件
kai_he.launch
源码
launch><node pkg="ssr_pkg" type="yao_node.py" name="yao_node" /><node pkg="ssr_pkg" type="chao_node.py" name=" chao_node" /><node pkg="atr_pkg" type="ma_node.py" name="ma_node" launch-prefix=" gnome-terminal -e"/>
</launch>
打开2个终端,分别运行2行代码
roscore
roslaunch atr_pkg kai_hei.launch
打开一个终端,输入
rqt_graph
本节学习了ROS机器人的主要通讯方式,尝试C++和python两种语言编写Topic话题与Message消息,接下来会介绍机器人的运动操作。完美撒花!
本文发布于:2024-02-08 20:04:49,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170739413668675.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |