学习仿真环境gazebo下利用UR10e机械臂搭建模拟平台,此博客用于记录搭建过程
搭建过程参考了很多博主的帖子和GitHub开源代码,对在此领域一起努力并且乐于分享的人表示感谢!!!
运行环境:Ubuntu18.04+Ros-melodic+Gazebo9
目录
find_object_2d环境搭建
本文主要参考berry丶博主
(66条消息) Ros中使用find_object_2d快速实现物体的检测识别_berry丶的博客-优快云博客
首先下载melodic版本的find_object_2d源码放入工作空间后编译
introlab/find-object at melodic-devel (github.com)
真实相机我使用的是realsense D405,可以用该语句启动相机,需要编译realsense-ros功能包
roslaunch realsense2_camera rs_camera.launch
也可以采用usb_cam或者uvc_camera功能包,同样也需要下载编译后运行
roscore ---启动ros
roslaunch usb_cam usb_cam-test.launch ---使用usb_cam
rosrun uvc_camera uvc_camera_node device:=/dev/video1 ---使用uvc_camera
当/dev/video不止一个时,比如D405彩色图像对应的是/dev/video4。对于usb_cam可以直接修改usb_cam.yml文件指定设备编号,对于uvc_camera 可以通过加device:=/dev/video1指定设备号
launch文件改写
在启动相机之后可以通过rostopic list命令看一下相机的话题是哪些,或者直接rqt_image_view看看各个话题对应的图片都是啥。
launch文件主要是改写这三个订阅的话题,需要和实际启动的相机订阅的话题一致。
--文件名 find_object_3d.launch
<arg name="rgb_topic" default="camera/rgb/image_rect_color"/>
<arg name="depth_topic" default="camera/depth_registered/image_raw"/>
<arg name="camera_info_topic" default="camera/rgb/camera_info"/>
对于D405,修改为
<arg name="rgb_topic" default="/d435/color/image_raw"/>
<arg name="depth_topic" default="/d435/depth/image_raw"/>
<arg name="camera_info_topic" default="/d435/depth/camera_info"/>
对于仿真环境下的D435,修改为
<arg name="rgb_topic" default="/d435/color/image_raw"/>
<arg name="depth_topic" default="/d435/depth/image_raw"/>
<arg name="camera_info_topic" default="/d435/depth/camera_info"/
运行结果
真实相机,两个终端启动
roslaunch find_object_2d find_object_3d_rs_D405.launch
roslaunch realsense2_camera rs_camera.launch
仿真环境,两个终端启动,一个启动find_object_2d,另一个启动自己的仿真环境
roslaunch find_object_2d find_object_rs_D435.launch
闲谈
find_object_2d功能包编译的时候因为我的虚拟机上有多个opecv版本,而这个包编写的时候测试用的还是opencv2.3,过于古老,现在基本都是opencv3.x或者4.x了,所以需要在CMakeLists文件中指定opencv版本,不然可能会多个版本打架导致编译过了但是启动不了。我就指定成默认的3.2.0了,虽然我有4.5版本的但是没有试可以不。
FIND_PACKAGE(OpenCV 3.2.0 REQUIRED) # tested on 2.3.1
realsense D405相机有个bug就是在ros1中直接启动官方的launch文件是识别不了设备的,问了官方回应说是该相机不支持ROS1,搁置了半年没用,后来在GitHub上有人说可以改头文件就行,亲测可行,具体修改为realsense-ros->realsense2_camera->include->constants.h,第37行D405部分修改为,即可。大坑啊!!!
const uint16_t RS405_PID = 0x0B5B; // DS5U