手把手教你搭建一个传递数字消息的机器人程序。
本系列已经耗时6天,博主也是从零开始,尽力去写的,如果发现了错误一定要私信告诉我呀。这么努力的博主,关注一下吧。
作者:杨丝儿
座右铭:始于兴趣,源于热爱,成于投入。
介绍:爱丁堡大学 人工智能专业。技术兴趣点集中在机器人、人工智能可解释性、数学、物理等等。
聊天吹水QQ群:兔叽的魔术工房 (942848525)
个人博客:discover304.top
个人B站账号:杨丝儿今天也在科学修仙(UP主跨站求个三连加关注)
✨注意
本文只提供在Linux平台上的代码演示和最基本的注释,不进行逻辑的解释。
相关解释以及需要用到的基础知识参见:【机器人】ROS程序框架:架构部分
✨安装ROS1环境
需要用到的技术以及流程参见:【机器人】开发系统镜像制作指南
✨搭建环境
cd ~/Desktop
# 在桌面上新建工作区,方便观看过程
mkdir -p rob_dev_ws/src
cd rob_dev_ws/src
catkin_init_workspace
✨创建包
在src路径下执行
# 这里使用python,所以我们依赖 rospy
catkin_create_pkg communicate_bot rospy
✨开始编程
包内src路径下放置我们的代码。
首先是发送端,文件名叫做:topic_publisher.py
#!/usr/bin/env python3
import rospy
from std_msgs.msg import Int32
class Publisher():
count = 0
def Publisher():
pass
def publish(self):
rospy.init_node('topic_publisher') # 初始化节点
pub = rospy.Publisher('counter', Int32, queue_size=10)
rate = rospy.Rate(2) # 定义频率单位为:Hz
while not rospy.is_shutdown():
pub.publish(self.count)
self.count += 1
print(self.count)
rate.sleep()
if __name__ == '__main__':
publisher = Publisher()
publisher.publish()
我们采用面向对象的思想进行编程,方便未来增改需求。
接下来是接收端,文件名称叫做topic_subscriber.py
#!/usr/bin/env python3
import rospy
from std_msgs.msg import Int32
class Subscriber():
def Subscriber():
pass
def listen(self):
rospy.init_node('topic_subscriber')
# 最后一个参数传递回调函数,如何处理数据
sub = rospy.Subscriber('counter', Int32, lambda msg : print(msg.data))
rospy.spin() # 阻塞等待,将程序交到ROS管理
if __name__ == "__main__":
subscriber = Subscriber()
subscriber.listen()
✨对程序/包进行编译
在工作区文件夹执行
catkin_make
✨运行程序
在工作区目录进行以下操作:
第一个终端执行
rosmaster
第二个终端执行
source devel/setup.bash
rosrun communicate_bot topic_publisher.py
第三个终端执行
source devel/setup.bash
rosrun communicate_bot topic_subscriber.py
✨退出程序
Ctrl+C
退出每一个终端中的程序
下一篇会涉及自定义消息类型的项目,链接在这里:【机器人】ROS1工程案例:自定义消息类型