步骤 1: 创建ROS动作文件
1.打开终端。
2.进入你的ROS包的目录
cd ~/catkin_ws/src/your_package_name
3.在该目录下创建一个名为 action 的文件夹
mkdir action
4.进入 action 文件夹
cd action
5.创建一个名为 DetectParts.action 的文件,并使用文本编辑器打开它:
touch DetectParts.action
gedit DetectParts.action
6.在编辑器中添加以下内容作为 DetectParts.action 文件的内容:
float32 progress
---
---
步骤 2: 编写服务端代码
创建一个服务端节点,用于接收动作请求并模拟检测零件的过程。
#!/usr/bin/env python
import rospy
import actionlib
from your_package_name.msg import DetectPartsAction, DetectPartsGoal, DetectPartsResult
class DetectPartsServer:
def __init__(self):
self.server = actionlib.SimpleActionServer('detect_parts', DetectPartsAction, self.execute, False)
self.server.start()
def execute(self, goal):
rate = rospy.Rate(1) # 1 Hz
progress = 0.0
for i in range(40):
progress += 2.5
rospy.loginfo('Detecting part %d' % (i + 1))
feedback = DetectPartsFeedback()
feedback.progress = progress
self.server.publish_feedback(feedback)
rate.sleep()
result = DetectPartsResult()
self.server.set_succeeded(result)
if __name__ == '__main__':
rospy.init_node('detect_parts_server')
server = DetectPartsServer()
rospy.spin()
解决文件限权问题:
chmod +x detect_parts_server.py
步骤 3: 编写客户端代码
创建一个客户端节点,用于发送动作请求并接收动作反馈
#!/usr/bin/env python
import rospy
import actionlib
from your_package_name.msg import DetectPartsAction, DetectPartsGoal, DetectPartsFeedback
def feedback_callback(feedback):
rospy.loginfo('Progress: %.1f%%' % feedback.progress)
def detect_parts_client():
client = actionlib.SimpleActionClient('detect_parts', DetectPartsAction)
client.wait_for_server()
goal = DetectPartsGoal()
client.send_goal(goal, feedback_cb=feedback_callback)
client.wait_for_result()
rospy.loginfo('Detection completed.')
if __name__ == '__main__':
rospy.init_node('detect_parts_client')
detect_parts_client()
解决文件限权问题:
chmod +x detect_parts_client.py
步骤 4: 编译和运行代码
确保ROS包已经编译,然后分别启动服务端和客户端节点:
catkin_make
roscore
rosrun your_package_name detect_parts_server.py
rosrun your_package_name detect_parts_client.py
结果体现:
补充说明:
1.动作消息文件(DetectParts.action): 定义了动作的请求、反馈和结果。 2.服务端节点(detect_parts_server.py): 创建了一个接收动作请求的简单动作服务器,并模拟检测40个零件的过程。每隔1秒钟发布一次检测进度反馈。 3.客户端节点(detect_parts_client.py): 创建了一个简单的动作客户端,发送动作请求,并在检测完成时打印消息。同时,订阅了动作反馈,实时打印检测进度。 |
设置环境变量 要设置环境变量,你可以编辑你的shell配置文件,通常是 .bashrc(对于Bash shell)或 .zshrc(对于Zsh shell)。以下是设置环境变量的一般步骤: 1.打开终端。 使用文本编辑器打开你的shell配置文件。如果你使用的是Bash shell,可以运行以下命令: gedit ~/.bashrc 如果你使用的是Zsh shell,可以运行以下命令: gedit ~/.zshrc 在打开的文件中,找到一个适合设置环境变量的地方。通常,你可以在文件的末尾添加新的环境变量设置。 添加你想要设置的环境变量。例如,如果你想要将 ROS_MASTER_URI 设置为 http://localhost:11311,则可以在文件中添加以下行: export ROS_MASTER_URI=http://localhost:11311 确保替换 http://localhost:11311 为你实际想要设置的值。 保存文件并退出编辑器。 重新启动终端,或者运行以下命令来使你的shell配置文件生效: source ~/.bashrc # 如果你使用的是Bash shell source ~/.zshrc # 如果你使用的是Zsh shell 现在,你设置的环境变量就会在终端会话中生效了。 请注意,在设置环境变量之后,记得在终端中运行 echo $ROS_MASTER_URI(假设你设置的是 ROS_MASTER_URI)来验证该环境变量是否已经成功设置。 |
安装缺失rospkg模块 方法一:使用apt安装: sudo apt-get update sudo apt-get install python-rospkg 方法二:使用pip安装: pip install rospkg |
下面是完成这个实验所需的依赖包: rospy:ROS Python 客户端库 actionlib:ROS 动作库,用于创建和处理动作消息 std_msgs:ROS 标准消息包,包含常用的消息类型 |