ubuntu18.04 ros通信编程
时间: 2023-12-22 22:25:06 浏览: 131
在Ubuntu 18.04上进行ROS通信编程,需要先安装ROS Melodic版本。安装完成后,可以使用ROS提供的通信机制,如话题(Topic)和服务(Service)等。
话题是一种发布/订阅(Publish/Subscribe)模式的通信机制,可以实现多个节点之间的异步通信。在ROS中,话题的数据类型是消息(Message),可以自定义消息类型。节点可以发布消息到话题,也可以订阅话题接收消息。
服务是一种请求/响应(Request/Response)模式的通信机制,可以实现节点之间的同步通信。在ROS中,服务的数据类型也是消息,但是服务消息包含请求消息和响应消息两部分。节点可以提供服务,也可以请求服务。
下面是一个简单的ROS话题通信示例:
1. 创建一个ROS工作空间
```
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/
catkin_make
```
2. 创建一个ROS包
```
cd ~/catkin_ws/src
catkin_create_pkg my_package rospy
```
3. 在my_package中创建一个发布者节点
```
cd ~/catkin_ws/src/my_package
mkdir scripts
cd scripts
touch talker.py
chmod +x talker.py
```
将以下代码复制到talker.py文件中:
```python
#!/usr/bin/env python
import rospy
from std_msgs.msg import String
def talker():
pub = rospy.Publisher('chatter', String, queue_size=10)
rospy.init_node('talker', anonymous=True)
rate = rospy.Rate(10) # 10hz
while not rospy.is_shutdown():
hello_str = "hello world %s" % rospy.get_time()
rospy.loginfo(hello_str)
pub.publish(hello_str)
rate.sleep()
if __name__ == '__main__':
try:
talker()
except rospy.ROSInterruptException:
pass
```
4. 在my_package中创建一个订阅者节点
```
cd ~/catkin_ws/src/my_package/scripts
touch listener.py
chmod +x listener.py
```
将以下代码复制到listener.py文件中:
```python
#!/usr/bin/env python
import rospy
from std_msgs.msg import String
def callback(data):
rospy.loginfo(rospy.get_caller_id() + "I heard %s", data.data)
def listener():
rospy.init_node('listener', anonymous=True)
rospy.Subscriber('chatter', String, callback)
rospy.spin()
if __name__ == '__main__':
listener()
```
5. 编译ROS包
```
cd ~/catkin_ws/
catkin_make
```
6. 运行ROS节点
在一个终端中运行发布者节点:
```
source ~/catkin_ws/devel/setup.bash
rosrun my_package talker.py
```
在另一个终端中运行订阅者节点:
```
source ~/catkin_ws/devel/setup.bash
rosrun my_package listener.py
```
你可以看到,发布者节点会不断地发布消息到话题“chatter”中,而订阅者节点会接收到这些消息并打印出来。
阅读全文