
利用奥比中光astra mini和ar_trck_alvar在ubuntu20.04环境下实现识别二维码功能【保姆级教程】
2)检测的代码使用individualMarkersNoKinect(若想使用其他检测代码,可参考ar_track_alver包下的node文件夹),修改订阅图像数据的话题名(若不清楚相应话题名,可启动摄像头后,使用rostopic list来查看),还有实际使用的AR码大小尺寸,单位为厘米。3)rviz:在启动识别程序后,新终端中启动rviz,可根据下文订阅的话题名进行配置,保存后修改launc
工作环境:(1)ubuntu20.04 (2)ROS1 noetic
难点:在没有官方ar_track包和例程的情况下,使用低配置的摄像头实现二维码识别定位
1.安装astra驱动包:参考:
3D视觉AI开放平台https://vcp.developer.orbbec.com.cn/documentation?doc=doc-83
(1)官网上下载驱动OpenNI_SDK_ROS_v1.1.4_20220927_e5a9dc_Linux.zip
3D视觉AI开放平台https://vcp.developer.orbbec.com.cn/resourceCenter?defaultSelectedKeys=70
然后将包解压到任意文件夹中,记好路径
(2)准备工作:安装依赖
sudo apt install libgflags-dev ros-$ROS_DISTRO-image-geometry ros-$ROS_DISTRO-camera-info-manager\
ros-$ROS_DISTRO-image-transport ros-$ROS_DISTRO-image-publisher libgoogle-glog-dev libusb-1.0-0-dev libeigen3-dev
- 安装libuvc
git clone https://github.com/libuvc/libuvc.git
cd libuvc
mkdir build && cd build
cmake .. && make -j4
sudo make install
sudo ldconfig
- (3)新建 ros workspace
mkdir -p ~/ros_ws/src
- 将 OpenNISDK_ROS_xxx.tar.gz 解压并复制到 ~/ros_ws/src
- 编译
cd ~/ros_ws
catkin_make
- 安装libusb rules
cd ~/ros_ws
source ./devel/setup.bash
roscd astra_camera
./scripts/create_udev_rules
sudo udevadm control --reload && sudo udevadm trigger
发布的时候最好 Release 编译
启动相机
- 在terminal 1,注意:在这一步大概率会报错。
source ./devel/setup.bash
roslaunch astra_camera astra.launc
- 在terminal 2
source ./devel/setup.bash
rviz
- 查看 topics / services/ parameters (新开一个终端)
rostopic list
rosservice list
rosparam list
如果在启动步骤有报错,新开一个窗口
运行:rqt_image_view
查看是否有图像消息,如果有,则不用管报错。
运行到这一步,/ws/src/ros_astra_camera文件夹可以作为astra mini的启动模版来使用
在rviz中的效果:打开图像消息:
2.在这一步正式开始我们的目的:实现二维码识别
先创建一个新的工作空间,创建src文件夹,将ros_astra_camera文件复制到src中,
然后,在src目录下安装ar_trck功能包:注意catkin_make要在ws目录下进行
# cd ~ 安装colcon
sudo apt install python3-colcon-common-extensions
# 在ws/src目录下
git clone https://github.com/machinekoder/ar_track_alvar.git -b noetic-devel
# colcon
colcon build
# cd ..
catkin_make -DCMAKE_BUILD_TYPE=Release
编译完后,检验是否安装成功:
在ws目录下运行source ./devel/setup.bash
在功能包中运行:
rosrun ar_track_alvar createMarker 0
如果生成了二维码,则说明安装成功!
3.最关键的一步:修改ar_track中的launch文件:
参考博客:【学习笔记】AR码(二维码)识别_ar识别-CSDN博客
以原来的默认文件pr2_indiv_no_kinect.launch为例:
<launch>
<arg name="marker_size" default="4.4" />
<arg name="max_new_marker_error" default="0.08" />
<arg name="max_track_error" default="0.2" />
<arg name="cam_image_topic" default="/wide_stereo/left/image_color" />
<arg name="cam_info_topic" default="/wide_stereo/left/camera_info" />
<arg name="output_frame" default="/torso_lift_link" />
<node name="ar_track_alvar" pkg="ar_track_alvar" type="individualMarkersNoKinect" respawn="false" output="screen">
<param name="marker_size" type="double" value="$(arg marker_size)" />
<param name="max_new_marker_error" type="double" value="$(arg max_new_marker_error)" />
<param name="max_track_error" type="double" value="$(arg max_track_error)" />
<param name="output_frame" type="string" value="$(arg output_frame)" />
<remap from="camera_image" to="$(arg cam_image_topic)" />
<remap from="camera_info" to="$(arg cam_info_topic)" />
</node>
</launch>
主要进行以下几点修改:
1)添加world与camera之间的TF坐标转换
2)检测的代码使用individualMarkersNoKinect(若想使用其他检测代码,可参考ar_track_alver包下的node文件夹),修改订阅图像数据的话题名(若不清楚相应话题名,可启动摄像头后,使用rostopic list来查看),还有实际使用的AR码大小尺寸,单位为厘米
3)rviz:在启动识别程序后,新终端中启动rviz,可根据下文订阅的话题名进行配置,保存后修改launch文件中的路径
修改完后:
<launch>
<node pkg="tf" type="static_transform_publisher" name="world_to_cam"
args="0 0 0.5 0 1.57 0 world camera_link 10" />
<arg name="marker_size" default="4.4" />
<arg name="max_new_marker_error" default="0.08" />
<arg name="max_track_error" default="0.2" />
<arg name="cam_image_topic" default="/camera/color/image_raw" />
<arg name="cam_info_topic" default="/camera/color/camera_info" />
<arg name="output_frame" default="/camera_link" />
<node name="ar_track_alvar" pkg="ar_track_alvar" type="individualMarkersNoKinect" respawn="false" output="screen">
<param name="marker_size" type="double" value="$(arg marker_size)" />
<param name="max_new_marker_error" type="double" value="$(arg max_new_marker_error)" />
<param name="max_track_error" type="double" value="$(arg max_track_error)" />
<param name="output_frame" type="string" value="$(arg output_frame)" />
<remap from="camera_image" to="$(arg cam_image_topic)" />
<remap from="camera_info" to="$(arg cam_info_topic)" />
</node>
<node pkg="rviz" type="rviz" name="rviz" args="-d /home/robot/test4_ws/src/use.rviz" />
</launch>
4.运行:
先打开一个终端运行:(1)开启摄像头
source ./devel/setup.bash
roslaunch astra_camera astra.launch
(2)开启识别二维码launch文件:
roslaunch ar_track_alvar pr2_indiv_no_kinect.launch
(3)另开一个终端运行rviz:
接下来介绍一下我的rviz配置:
a)Fixed Frame:选择world,添加tf
b)camera:订阅/camera/color/image_raw topic
c)marker:在Displays窗口左下角选择add,添加marker
在marker中选择话题/visualization_marker
如此,应该就能看见AR码显示在图像中,并且能够看到AR码的位姿状态
同时,我们可以使用ROS命令查看AR话题中的信息
第一个ar_pose_maker就是二维码的位姿信息
最终实现效果:
有问题欢迎评论区交流~~~
更多推荐
所有评论(0)