手把手教你搭建一个传递数字消息的机器人程序。
:sparkles:注意
本文只提供在Linux平台上的代码演示和最基本的注释,不进行逻辑的解释。
相关解释以及需要用到的基础知识参见:【机器人】ROS程序框架:架构部分
:sparkles:安装ROS1环境
需要用到的技术以及流程参见:【机器人】开发系统镜像制作指南
:sparkles:搭建环境
1 2 3 4 5
| cd ~/Desktop # 在桌面上新建工作区,方便观看过程 mkdir -p rob_dev_ws/src cd rob_dev_ws/src catkin_init_workspace
|
:sparkles:创建包
在src路径下执行
1 2
| # 这里使用python,所以我们依赖 rospy catkin_create_pkg communicate_bot rospy
|
:sparkles:开始编程
包内src路径下放置我们的代码。
首先是发送端,文件名叫做:topic_publisher.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
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) 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
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() if __name__ == "__main__": subscriber = Subscriber() subscriber.listen()
|
:sparkles:对程序/包进行编译
在工作区文件夹执行
:sparkles:运行程序
在工作区目录进行以下操作:
第一个终端执行
第二个终端执行
1 2
| source devel/setup.bash rosrun communicate_bot topic_publisher.py
|
第三个终端执行
1 2
| source devel/setup.bash rosrun communicate_bot topic_subscriber.py
|
:sparkles:退出程序
Ctrl+C
退出每一个终端中的程序
下一篇会涉及自定义消息类型的项目,链接在这里:TODO正在施工中