UR10e+D435+ag95夹爪 gazebo 仿真记录(二)

文章记录了在Ubuntu18.04系统和RosMelodic环境下,使用Gazebo9搭建UR10e机械臂的模拟平台,并结合find_object_2d包进行物体检测识别。过程中涉及realsenseD405相机的使用,包括启动相机、修改launch文件以匹配相机话题,以及解决在ROS1中D405相机识别问题的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习仿真环境gazebo下利用UR10e机械臂搭建模拟平台,此博客用于记录搭建过程

搭建过程参考了很多博主的帖子和GitHub开源代码,对在此领域一起努力并且乐于分享的人表示感谢!!!

运行环境:Ubuntu18.04+Ros-melodic+Gazebo9

目录

find_object_2d环境搭建

launch文件改写

运行结果

 闲谈


find_object_2d环境搭建

本文主要参考berry丶博主

(66条消息) Ros中使用find_object_2d快速实现物体的检测识别_berry丶的博客-CSDN博客

首先下载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

### UR10e Gazebo 仿真配置教程 对于UR10e机器人的Gazebo仿真,通常需要依赖ROS(Robot Operating System)生态系统来完成完整的设置。以下是关于如何配置和启动UR10e机器人在Gazebo中的仿真的相关内容。 #### ROS包准备 为了实现UR10e的Gazebo仿真,需安装Universal Robots官方支持的相关ROS包。这些包包含了UR系列机械臂的描述文件、控制器配置以及MoveIt!集成工具[^2]。可以通过以下命令安装: ```bash sudo apt-get install ros-$<rosdistro>-universal-robots ros-$<rosdistro>-moveit ``` 其中`$<rosdistro>`应替换为当前使用的ROS版本名称,例如`noetic`或`melodic`。 #### 启动Gazebo仿真环境 一旦安装完毕,可以利用预定义的launch文件加载UR10e模型到Gazebo环境中。假设已下载并编译了对应的ROS工作空间,则可通过如下指令启动仿真: ```bash roslaunch ur_gazebo ur10e_bringup.launch ``` 此命令会初始化Gazebo世界并将UR10e放置于默认位置[^3]。如果希望自定义场景或者调整参数,可以在`.world`文件中修改相应设定。 #### MoveIt!整合 除了基本运动外,还可能涉及路径规划等功能需求。此时可借助MoveIt框架进一步增强功能。通过执行下面脚本能够同时开启RViz界面用于可视化操作效果: ```bash roslaunch ur10e_moveit_config demo.launch sim:=true ``` 上述选项`simg:=true`表明是在模拟环境下运行而非真实硬件上[^4]。 #### 自定义控制逻辑开发 针对特定应用场景下的高级行为设计,开发者往往还需要编写专属节点处理业务流程。Python/C++均可作为首选编程语言构建此类应用软件模块并与现有系统无缝对接。 ```python import rospy from trajectory_msgs.msg import JointTrajectory, JointTrajectoryPoint def send_trajectory(): rospy.init_node('joint_trajectory_publisher') pub = rospy.Publisher('/trajectory_controller/command', JointTrajectory, queue_size=10) jt = JointTrajectory() jt.joint_names = ["shoulder_pan_joint", "shoulder_lift_joint", ... ] # 完整关节列表 point = JointTrajectoryPoint() positions = [0.0, -1.57,...] # 设定目标角度值数组 velocities = [0.0]*len(positions) accelerations = [0.0]*len(positions) effort = [0.0]*len(positions) point.positions = positions point.velocities = velocities point.accelerations = accelerations point.effort = effort point.time_from_start = rospy.Duration(5.0) jt.points.append(point) rate = rospy.Rate(10) while not rospy.is_shutdown(): pub.publish(jt) rate.sleep() if __name__ == '__main__': try: send_trajectory() except rospy.ROSInterruptException: pass ``` 以上代码片段展示了怎样向指定话题发布一条简单的轨迹消息实例[^5]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值