Dofbot机械臂学习(1)

本文是Yahboom公司的Dofbot机械臂从零部署的笔记,涵盖创建URDF模型、配置MoveIt及运行效果。首先介绍创建工作空间、配置文件,包括urdf、meshes和launch文件,然后详细讲解如何配置MoveIt,包括启动Setup Assistant、设置自碰撞检测、虚拟关节等,最后展示运行效果和检查模型。

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

Yahboom公司机械臂Dofbot从零部署笔记,看这篇的同学首先需要购买他们公司的Dofbot机械臂 + 树莓派组合,出厂已经配置好部署完毕的镜像。

需要适当的前置知识:什么是URDF模型、什么是moveit和轨迹规划。

一、创建URDF模型

1、创造新的工作空间

在根目录下创建工作空间

mkdir -p catkin_ws/src
cd catkin_ws/
catkin_make

进入src目录:

catkin_create_pkg dofbot_description urdf xacro

2、文件配置

进入dofbot_description目录,建立四个文件夹:

  • urdf:存放机器人模型的URDF或xacro文件
  • meshes:存放URDF中引用的模型渲染文件
  • launch:保存相关启动文件
  • config:保存rviz的配置文件
2.1 urdf文件

进入urdf目录,创建模型文件:

touch dofbot.urdf

  dofbot机械臂的urdf模型

<?xml version="1.0" encoding="utf-8" ?>
<robot name="yahboom_dofbot">
    <link name="base_link">
        <visual>
            <origin xyz="0 0 0" rpy="0 0 0" />
            <geometry>
                <mesh filename="package://dofbot_description/meshes/base_link.STL" />
            </geometry>
            <material name="">
                <color rgba="0.2 0.2 0.2 1" />
            </material>
        </visual>
        <collision>
            <origin xyz="0 0 0" rpy="0 0 0" />
            <geometry>
                <mesh filename="package://dofbot_description/meshes/base_link.STL" />
            </geometry>
        </collision>
    </link>
    
    <link name="arm_link1">
        <visual>
            <origin xyz="0 0 0" rpy="0 0 0" />
            <geometry>
                <mesh filename="package://dofbot_description/meshes/visual/arm_link1.STL" />
            </geometry>
            <material name="">
                <color rgba="1 1 1 1" />
            </material>
        </visual>
        <collision>
            <origin xyz="0 0 0" rpy="0 0 0" />
            <geometry>
                <mesh filename="package://dofbot_description/meshes/collision/arm_link1.STL" />
            </geometry>
        </collision>
    </link>
    
    <joint name="arm_joint1" type="revolute">
        <origin xyz="0 0 0.06605" rpy="-0.010805 0 1.5" />
        <parent link="base_link" />
        <child link="arm_link1" />
        <axis xyz="0 0 1" />
        <limit effort="30" velocity="10.0" lower="-1.5708" upper="1.5708" />
    </joint>
    
    
    <link name="arm_link2">
        <visual>
            <origin xyz="0 0 0" rpy="0 0 0" />
            <geometry>
                <mesh filename="package://dofbot_description/meshes/visual/arm_link2.STL" />
            </geometry>
            <material name="">
                <color rgba="1 1 1 1" />
            </material>
        </visual>
        <collision>
            <origin xyz="0 0 0" rpy="0 0 0" />
            <geometry>
                <mesh filename="package://dofbot_description/meshes/collision/arm_link2.STL" />
            </geometry>
        </collision>
    </link>
    <joint name="arm_joint2" type="revolute">
        <origin xyz="0 0 0.0405" rpy="-1.5708 0 0" />
        <parent link="arm_link1" />
        <child link="arm_link2" />
        <axis xyz="0 0 -1" />
        <limit lower="-1.5708" upper="1.5708" effort="100" velocity="10" />
    </joint>
    <link name="arm_link3">
        <visual>
            <origin xyz="0 0 0" rpy="0 0 0" />
            <geometry>
                <mesh filename="package://dofbot_description/meshes/visual/arm_link3.STL" />
            </geometry>
            <material name="">
                <color rgba="1 1 1 1.0" />
            </material>
        </visual>
        <collision>
            <origin xyz="0 0 0" rpy="0 0 0" />
            <geometry>
                <mesh filename="package://dofbot_description/meshes/collision/arm_link3.STL" />
            </geometry>
        </collision>
    </link>
    <joint name="arm_joint3" type="revolute">
        <origin xyz="0 -0.0829 0" rpy="0 0 0" />
        <parent link="arm_link2" />
        <child link="arm_link3" />
        <axis xyz="0 0 -1" />
        <limit lower="-1.5708" upper="1.5708" effort="100" velocity="10" />
    </joint>
    <link name="arm_link4">
        <visual>
            <origin xyz="0 0 0" rpy="0 0 0" />
            <geometry>
                <mesh filename="package://dofbot_description/meshes/visual/arm_link4.STL" />
            </geometry>
            <material name="">
                <color rgba="1 1 1 1" />
            </material>
        </visual>
        <collision>
            <origin xyz="0 0 0" rpy="0 0 0" />
            <geometry>
                <mesh filename="package://dofbot_description/meshes/collision/arm_link4.STL" />
            </geometry>
        </collision>
    </link>
    <joint name="arm_joint4" type="revolute">
        <origin xyz="0 -0.0829 0" rpy="0 0 0" />
        <parent link="arm_link3" />
        <child link="arm_link4" />
        <axis xyz="0 0 -1" />
        <limit lower="-1.5708" upper="1.5708" effort="100" velocity="10" />
    </joint>
    <link name="arm_link5">
        <visual>
            <origin xyz="0 0 0" rpy="0 0 0" />
            <geometry>
                <mesh filename="package://dofbot_description/meshes/visual/arm_link5.STL" />
            </geometry>
            <material name="">
                <color rgba="1 1 1 1" />
            </material>
        </visual>
        <collision>
            <origin xyz="0 0 0" rpy="0 0 0" />
            <geometry>
                <mesh filename="package://dofbot_description/meshes/collision/arm_link5.STL" />
            </geometry>
        </collision>
    </link>
    <joint name="arm_joint5" type="revolute">
        <origin xyz="-0.00215 -0.17455 0" rpy="1.5708 0 0" />
        <parent link="arm_link4" />
        <child link="arm_link5" />
        <axis xyz="0 0 1" />
        <limit lower="-1.5708" upper="3.14159" effort="100" velocity="10" />
    </joint>
    <link name="rlink1">
        <visual>
            <origin xyz="0 0 0" rpy="0 0 0" />
            <geometry>
                <mesh filename="package://dofbot_description/meshes/visual/rlink1.STL" />
            </geometry>
            <material name="">
                <color rgba="1 1 1 1" />
            </material>
        </visual>
        <collision>
            <origin xyz="0 0 0" rpy="0 0 0" />
            <geometry>
                <mesh filename="package://dofbot_description/meshes/visual/rlink1.STL" />
            </geometry>
        </collision>
    </link>
    <joint name="grip_joint" type="revolute">
        <origin xyz="-0.0035 -0.012625 -0.0685" rpy="0 -1.5708 0" />
        <parent link="arm_link5" />
        <child link="rlink1" />
        <axis xyz="0 0 1" />
        <limit lower="-1.54" upper="0" effort="100" velocity="10" />
    </joint>
    <link name="rlink2">
        <visual>
            <origin xyz="0 0 0" rpy="0 0 0" />
            <geometry>
                <mesh filename="package://dofbot_description/meshes/visual/rlink2.STL" />
            </geometry>
            <material name="">
                <color rgba="1 1 1 1" />
            </material>
        </visual>
        <collision>
            <origin xyz="0 0 0" rpy="0 0 0" />
            <geometry>
                <mesh filename="package://dofbot_description/meshes/visual/rlink2.STL" />
            </geometry>
        </collision>
    </link>
    <joint name="rlink_joint2" type="continuous">
        <origin xyz="0.03 -0.00075429 0" rpy="0 0 0" />
        <parent link="rlink1" />
        <child link="rlink2" />
        <axis xyz="0 0 1" />
        <mimic joint="grip_joint" multiplier="-1" />
    </joint>
    <link name="rlink3">
        <visual>
            <origin xyz="0 0 0" rpy="0 0 0" />
            <geometry>
                <mesh filename="package://dofbot_description/meshes/visual/rlink3.STL" />
            </geometry>
            <material name="">
                <color rgba="1 1 1 1" />
            </material>
        </visual>
        <collision>
            <origin xyz="0 0 0" rpy="0 0 0" />
            <geometry>
                <mesh filename="package://dofbot_description/meshes/visual/rlink3.STL" />
            </geometry>
        </collision>
    </link>
    <joint name="rlink_joint3" type="continuous">
        <origin xyz="-0.0035 -0.0045 -0.0505" rpy="0 -1.5708 0" />
        <parent link="arm_link5" />
        <child link="rlink3" />
        <axis xyz="0 0 1" />
        <mimic joint="grip_joint" multiplier="1" />
    </joint>
    <link name="llink1">
        <visual>
            <origin xyz="0 0 0" rpy="0 0 0" />
            <geometry>
                <mesh filename="package://dofbot_description/meshes/visual/llink1.STL" />
            </geometry>
            <material name="">
                <color rgba="1 1 1 1" />
            </material>
        </visual>
        <collision>
            <origin xyz="0 0 0" rpy="0 0 0" />
            <geometry>
                <mesh filename="package://dofbot_description/meshes/visual/llink1.STL" />
            </geometry>
        </collision>
    </link>
    <joint name="llink_joint1" type="continuous">
        <origin xyz="-0.0035 0.012375 -0.0685" rpy="0 -1.5708 0" />
        <parent link="arm_link5" />
        <child link="llink1" />
        <axis xyz="0 0 1" />
        <mimic joint="grip_joint" multiplier="-1" />
    </joint>
    <link name="llink2">
        <visual>
            <origin xyz="0 0 0" rpy="0 0 0" />
            <geometry>
                <mesh filename="package://dofbot_description/meshes/visual/llink2.STL" />
            </geometry>
            <material name="">
                <color rgba="1 1 1 1" />
            </material>
        </visual>
        <collision>
            <origin xyz="0 0 0" rpy="0 0 0" />
            <geometry>
                <mesh filename="package://dofbot_description/meshes/visual/llink2.STL" />
            </geometry>
        </collision>
    </link>
    <joint name="llink_joint2" type="continuous">
        <origin xyz="0.03 0.00065104 0" rpy="0 0 0" />
        <parent link="llink1" />
        <child link="llink2" />
        <axis xyz="0 0 1" />
        <mimic joint="grip_joint" multiplier="1" />
    </joint>
    <link name="llink3">
        <visual>
            <origin xyz="0 0 0" rpy="0 0 0" />
            <geometry>
                <mesh filename="package://dofbot_description/meshes/visual/llink3.STL" />
            </geometry>
            <material name="">
                <color rgba="1 1 1 1" />
            </material>
        </visual>
        <collision>
            <origin xyz="0 0 0" rpy="0 0 0" />
            <geometry>
                <mesh filename="package://dofbot_description/meshes/visual/llink3.STL" />
            </geometry>
        </collision>
    </link>
    <joint name="llink_joint3" type="continuous">
        <origin xyz="-0.0035 0.0045 -0.0505" rpy="0 -1.5708 0" />
        <parent link="arm_link5" />
        <child link="llink3" />
        <axis xyz="0 0 1" />
        <mimic joint="grip_joint" multiplier="-1" />
    </joint>
 
</robot>
2.2 meshes文件

可以从以下链接提取

链接: https://pan.baidu.com/s/16a1roVT0-WjkZqEdYmZdpg 提取码: pdkg

2.3 launch文件

dofbot.launch

<launch>
    <arg name="model" default="dofbot.urdf"/>
    <arg name="gui" default="false"/>
    
    <!-- 设置机器人模型路径参数 -->
    <param name="robot_description" command="$(find xacro)/xacro --inorder $(find dofbot_description)/urdf/$(arg model)"/>
    
    <param name="use_gui" value="$(arg gui)"/>
    
    <!-- 运行joint_state_publisher节点,发布机器人的关节状态  -->
    <node name="joint_state_publisher_gui" pkg="joint_state_publisher_gui" type="joint_state_publisher_gui"/>

    <!-- 运行robot_state_publisher节点,发布tf  -->
    <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher"/>

    <!-- 运行rviz可视化界面 -->
    <node name="rviz" pkg="rviz" type="rviz" args="-d $(find dofbot_description)/config/dofbot.rviz" required="true"/>
</launch>

3、 编译并运行

进入工作空间目录编译:catkin_make
运行:

source ./devel/setup.bash
roslaunch dofbot_description dofbot.launch

4、 运行效果

ADD → RobotModel
在Fixed Frame处改为 base_link
保存配置,以便下次继续查看:
顶端的菜单栏 File → Save Config As,保存至刚才建立的config文件夹下
取名为 dofbot.rviz

 添加坐标系:
ADD → TF

显示joint转动效果:
单击左侧joint_state_publisher_gui图标

5、检查模型

从 ~/catkin_ws/src/dofbot_description/urdf 打开终端,输入:

urdf_to_graphiz dofbot.urdf

会生成模型检查文档,打开:

二、配置MoveIt

1、启动Setup Assistant

roslaunch moveit_setup_assistant setup_assistant.launch

注意: 运行代码前需要确认是否打开roscore,建议进入工作空间内输入source ./devel/setup.bash刷新环境变量再打开moveit。

 点击“Create New MoveIt Configuration Package”
载入之前的 dofbot.urdf

2、配置自碰撞检测(Self-Collisions)

点击“Generate Collision Matrix”

3、添加虚拟关节(Virtual Joints)

添加虚拟关节与外界的某一个参考系建立连接。
点击 Add Virtual Joints:
命名为 virtual_joint
Child Link选择 base_link
Parent Frame Name即世界坐标的名称,命名为 world
关节类型选择 Fixed

4、创建运动规划组(Planning Groups)

点击 Add Group。
Group Name,我命名为 dofbot
Kinematic Solver 运动学求解器,用来求解正运动学(Forward Kinematics)和逆运动学(IK),选择 kdl_kinematics_plugin
Kin. Search Resolution 运动学求解的精度(关节空间采样密度)
Kin. Search Timeout 求解时间,这个规划的时间可以适当拉长(设为0.5也可以),也可以默认 0.005

接着为以上的规划设置选择针对的关节Joints。
可点击 Add Kin.Chain 直接添加运动链
选择base_link为 Base Link,选择arm_link5为 Tip Link,点击save。
这样就生成了一个规划组。

添加夹爪规划组
点击Add Group,添加夹爪规划组。
创建组名设置为gripper_group,无需设置运动学求解器;点击Add Links添加夹爪连杆。 

 选中夹爪部分的连杆,点击【>】,自动添加右侧,点击Save保存。

5、预定义机器人位姿(Robot Poses)

点击 Add Pose
我们把全角度为0的位姿定义为 up,点击 Save,我们再定义一个 down,joint2为-1.5708,其余角度不变,再保存。

 添加init姿态

 添加夹爪close姿态

 添加夹爪open姿态

6、设置终端(End Effectors)

可以设置夹爪

7、设置消极关节(Passive Joints)

设置规划时不让动的关节,这里没有,5个关节都要动。

8、设置 ROS Control

ROS是通过ROS Control中的一个个Controller接口,与gazebo仿真环境、或者实机环境进行连接的。
点击 Auto Add FollowJointTrajectory…

9、Simulation

可自动产生URDF模型,其中会加入各种gazebo仿真的属性,方便将这个机械臂模型放入gazebo。
点击 Generate URDF。

将这段代码覆盖到 dofbot.urdf 中。
注意将代码中 EffortJointInterface 改成 PositionJointInterface,因为我们前面建的是position_controller。

10、建立3D信息(Setup 3D Perception Sensors)

如果有3D感知的相机,可以设置
这里可先略过

11、添加作者信息

添加Name和邮箱地址

12、生成配置文件(Generate Configuration Files)

在工作空间 catkin_ws/src 下新建一个文件夹 dofbot_moveit_config
选择该目录作为 Package Save Path
点击 Generate Package 完成

点击 Exit… 退出。

我们打开 dofbot_moveit_config/config 下的 dofbot.srdf 查看模型文件。文件名为 dofbot 是与我们之前urdf文件里定义的robot的名字一致。
其他文件还有一些参数文件:
chomp_planning.yaml 运动规划的参数
joint_limits.yaml 配置关节约束
kinematics.yaml 运动学算法的配置
ompl_planning.yaml 运动规划算法的配置
ros_controllers.yaml ROS Controller配置
sensors_3d.yaml 3D视觉接收器配置

13、运行demo

我们运行demo,来看看通过moveit可视化手臂运动,并进行轨迹规划

roslaunch dofbot_moveit_config demo.launch

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值