0x00 往期博文
《HelloOriginBot::使用Python编写Joy手柄功能包》
0x01 实验目的
使用 find_object_2d 功能包实现书籍、卡片等2d物品识别;
0x02 实验流程
1\ 在开发机上,下载和编译 find_obj_2d 功能包;
2\ OB(OriginBot, 后文同理) 打开 mipi 摄像头发布图像;
3\ 在开发机上订阅 OB 发布的图像;
4\ 在开发机上采集、标定、保存特征;
5\ 在开发机上验证识别效果;
6\ 在OB上安装 find_obj_2d 包; 脱离服务器(开发机)运行;
7\ 在OB上输出位置框、或中心坐标; 进行应用开发;
0x03 开发机上安装 find_obj_2d 功能包
cd ~/ros2_ws
git clone https://github.com/introlab/find-object.git src/find_object_2d
colcon build
添加工作空间环境变量后,执行以下命令测试运行;
ros2 pkg list | grep find_object_2d
若找到该功能包说明安装成功;
0x04 OriginBot 发布图像
ros2 launch originbot_demo camera.launch.py
注: mipi 支持发布 bgr8 和 nv12 格式的图像; 这里我们使用 bgr8;
若 mipi 打开了shared mem 通信方式,则只支持发布 hbmem_img 主题的图片。用于'零拷贝'。
故 image_raw 中无数据, 所以需要把 shared mem 关掉; 改为 mmap 模式。
launch文件配置如下:
from launch import LaunchDescription
from launch_ros.actions import Node
def generate_launch_description():
return LaunchDescription([
Node(
package='mipi_cam',
executable='mipi_cam',
output='screen',
parameters=[
{"camera_calibration_file_path": "/opt/tros/lib/mipi_cam/config/GC4663_calibration.yaml"},
{"out_format": "bgr8"},
{"image_width": 960},
{"image_height": 544},
{"io_method": "mmap"},
{"video_device": "GC4663"}
],
arguments=['--ros-args', '--log-level', 'error']
),
Node(
package='originbot_demo',
executable='transport_img',
arguments=['--ros-args', '--log-level', 'error']
),
])
transport_img 压缩图像的用法请参考往期博文:《App上位机控制OriginBot小车》
0x05 开发机订阅 OB 发布的图像;
订阅OB发布的 /bgr8_image 图像话题;
ros2 run find_object_2d find_object_2d image:=bgr8_image
执行该命令后可在上位机看到OB发来的图像;
0x06 开发机采集、标定、保存特征;
在Objects窗口中右键->选择 add object from scene... (从图像中选择目标)
之后在弹出的窗口中,选择 Take picture 抓取图像,再选择欲识别的2d物品。注意:是2d物品,3d物品识别效果不好;
选取完欲识别的物体后,选择 File -> Save objects, File -> Sace settings,用于下次启动时加载;
Save objects : 保存欲识别2d目标的图片;
Sace settings : 保存当前软件算子配置;
保存结果如下:
0x07 在开发机上验证识别效果;
find_object_2d 功能包下有 find_object_2d 节点,该节点发布 objects 话题;
检测到的对象格式为[objectId1,objectWidth,objectHeight,h11,h12,h13,h21,h22,h23,h31,h32,h33,objectId2…]
参考链接:
find_object_2d/ObjectsStamped Documentation (ros.org)
(83条消息) Ros中使用find_object_2d快速实现物体的检测识别_berry丶的博客-CSDN博客
ros2 topic echo /objects
已识别到两本书籍;
0x08 在OB上安装 find_obj_2d 包; 脱离服务器(开发机)运行;
同 0x03 ,通过 github 下载编译源码;
无 GUI 运行:
ros2 launch find_object_2d find_object_2d.launch.py \
image_topic:="bgr8_image" \
gui:=false \
settings_path:="/home/ning/find_obj_2d_cfg/setting.ini" \
objects_path:="/home/ning/find_obj_2d_cfg/img"
0x09 在OB上输出位置框、或中心坐标; 进行应用开发;
订阅 /objects 识别结果进行应用开发.
0x0A 总结
find_object_2d 功能包,对3D物品识别效果很差,但对2d平面物品效果很好。
参考:
评论(0)
您还未登录,请登录后发表或查看评论