使用ROS实现服务器和客户端通信程序 实验报告
时间: 2024-02-27 20:53:49 浏览: 31
本次实验旨在使用ROS框架实现服务器和客户端通信程序,具体实验步骤如下:
1. 安装ROS
在Ubuntu系统下,使用以下命令安装ROS:
```
sudo apt-get install ros-<distro>-desktop-full
```
其中,`<distro>`表示ROS版本,如Melodic、Noetic等。
2. 创建ROS工作空间
在终端中执行以下命令,创建ROS工作空间:
```
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/
catkin_make
```
3. 创建ROS包和节点
在终端中执行以下命令,创建ROS包和节点:
```
cd ~/catkin_ws/src
catkin_create_pkg my_package std_msgs rospy roscpp
cd my_package
mkdir scripts
cd scripts
touch my_server.py
touch my_client.py
```
在`my_server.py`和`my_client.py`中,编写服务器和客户端程序,具体代码如下:
`my_server.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('my_server', anonymous=True)
rospy.Subscriber('chatter', String, callback)
rospy.spin()
if __name__ == '__main__':
listener()
```
`my_client.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('my_client', 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. 编译ROS包
在终端中执行以下命令,编译ROS包:
```
cd ~/catkin_ws/
catkin_make
```
5. 运行ROS节点
在两个终端中分别执行以下命令,运行ROS节点:
```
rosrun my_package my_server.py
rosrun my_package my_client.py
```
6. 测试
在客户端终端中,可以看到发布的消息:
```
[INFO] [1632282400.974590]: hello world 0.000425100326538
[INFO] [1632282401.974994]: hello world 1.00042057037
[INFO] [1632282402.975398]: hello world 2.00041604042
...
```
在服务器终端中,可以看到接收到的消息:
```
[INFO] [1632282400.980415]: I heard hello world 0.000425100326538
[INFO] [1632282401.980743]: I heard hello world 1.00042057037
[INFO] [1632282402.981175]: I heard hello world 2.00041604042
...
```
至此,使用ROS框架实现服务器和客户端通信程序的实验完成。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)