1. 安装SDK
chmod +x ZED_SDK_Tegra_JP45_v3.6.5.run
./ZED_SDK_Tegra_JP45_v3.6.5.run
此后一路Y,需保证网络不中断
2. 如果要用 Python 编程,则需运行 get_python_api.py,该文件在 /usr/local/zed/ 中,用 root 权限运行可一次性将cython、numpy和pyzed及各种必要的依赖都装好。root权限获取
su
password: # 输入密码
3. 使用 ros 启动 zed min 节点后,如果要运行 object_detection 服务一定要在工作空间目录下运行终端,否则会出现:ERROR: Unable to load type [zed_interface/start_object_detection].Have you typed make in [zed_interface]
4. 运行 object_detection 后如果要在另一个功能包中读取zed摄像头发送的话题,
(4.1)首先使用
rostopic list
列出当前 ros 系统中在正在发布的话题,找到 zedm/zed_node/obj_det/objects(该话题在zed摄像头节点运行 object_detection 后在终端底部也会提示“Advertised on topic /zedm/zed_node/obj_det/objects”)
(4.2)然后使用
rostopic type zedm/zed_node/obj_det/objects
查看广播的消息类型,显示 zed_interfaces/ObjectsStamped。表明该消息存在于 zed_interfaces功能包中,消息名称为 ObjectsStamped。
(4.3)最后在python文件前面使用
from zed_interfaces.msg import ObjectsStamped
这样才能在订阅这声明中正确使用,如
rospy.Subscriber("zedm/zed_node/obj_det/objects", ObjectsStamped, callback)
完整代码如下,顺便打印出检测物体的类型和位置
#!/usr/bin/env python
import rospy
# from geometry_msgs.msg import Pose
from zed_interfaces.msg import ObjectsStamped
def callback(data):
print(data.objects[0].label)
print(data.objects[0].sublabel)
print(data.objects[0].position)
def listener():
rospy.init_node("single_object_detection_fruit", anonymous=True)
rospy.Subscriber("zedm/zed_node/obj_det/objects", ObjectsStamped, callback)
rospy.spin()
if __name__ == '__main__':
listener()