ROS2-rviz2实例化机械臂

ROS2-rviz2实例化机械臂

摘要

本文基于ROS2 实现了机械臂在rviz2中的建模,实现过程真的很艰辛,没有ROS1的经验,ROS2的rviz2教程又很少,虽然rviz和rviz2打开后几乎一样,但是编译过程,launch文件的编写,其代表的含义都不一样。这也算是一个rviz2实例化的教程吧!在这里插入图片描述

实现环境和对象

ROS版本:ROS2-foxy
机械臂:aubo-i5-机械臂(其urdf文件可在官网下载得到,后文会给出下载链接)

学习基础:学习过官网的基础教程,懂得创建、编译和运行package

教学开始

  1. 在dev_ws/src 下创建一个包命名为aubo_i5_simulation
ros2 pkg create aubo_i5_simulation --build-type ament_cmake --dependencies rclcpp
  1. 配置urdf和rviz文件
    a. 进入dev_ws/src/aubo_i5_simulation,新建一个urdf文件夹,用来放urdf文件。
    我们使用现成的urdf文件(下载地址:https://github.com/lg609/aubo_robot/blob/master/aubo_description/urdf/aubo_i5.urdf),下载到urdf文件夹,命名为aubo_i5.urdf
    关于urdf文件的格式及含义这里简单解释一下,它就是一个模型文件。aubo_i5.urdf包含了机械臂的框架,比如节点和轴的信息,以及具体的几何数据。需要注意的是,这个urdf文件把几何结构用STL、DAE文件来表示的,比如:
<geometry>
        <mesh filename="package://aubo_description/meshes/aubo_i5/collision/base_link.STL" />
      </geometry>

因此,我们还需要补充一下这些文件。
b.在aubo_i5_simulation中再新建一个meshes文件夹,把这个链接(https://github.com/lg609/aubo_robot/tree/master/aubo_description/meshes)里的aubo_i5文件夹下载到meshes中。
c.注意我们这里包的名字是aubo_i5_simulation, 下载的urdf里meshes的路径是aubo_description下的,所以我们需要把urdf/aubo_i5.urdf里有关有关meshes的路径全部修改一下,把aubo_description改成aubo_i5_simulation。比如:

<geometry>
        <mesh filename="package://aubo_i5_simulation/meshes/aubo_i5/collision/base_link.STL" />
      </geometry>

d. 至此urdf文件算是搞定了,下面配置rviz文件,ROS2的默认rviz文件在/opt/ros/foxy/share/rviz_common下,复制该目录下的default.rviz到aubo_i5_simulation/urdf文件夹下。即跟urdf文件在同一文件夹下。

3.配置launch文件
在aubo_i5_simulation里新建一个launch文件夹,然后在launch文件夹里新建一个display.launch.py文件,其内容为下列代码:

import os
from ament_index_python.packages import get_package_share_directory
import launch
from launch.substitutions import Command, LaunchConfiguration
import launch_ros
import os

def generate_launch_description():
    pkg_share=launch_ros.substitutions.FindPackageShare(package='aubo_i5_simulation').find('aubo_i5_simulation')
    urdf_path =os.path.join(pkg_share, 'urdf/aubo_i5.urdf')
    rviz_path =os.path.join(pkg_share, 'urdf/default.rviz')
    with open(urdf_path, 'r') as infp:
        robot_desc = infp.read()
    rsp_params = {'robot_description': robot_desc}
    
    
    
    robot_state_publisher_node = launch_ros.actions.Node(
        package='robot_state_publisher',
        executable='robot_state_publisher',
        output='screen',
        parameters=[rsp_params]
    )
    joint_state_publisher_node = launch_ros.actions.Node(
        package='joint_state_publisher',
        executable='joint_state_publisher',
        name='joint_state_publisher',
        output='screen',
        condition=launch.conditions.UnlessCondition(LaunchConfiguration('gui'))
    )
    joint_state_publisher_gui_node = launch_ros.actions.Node(
        package='joint_state_publisher_gui',
        executable='joint_state_publisher_gui',
        name='joint_state_publisher_gui',
        output='screen',
        condition=launch.conditions.IfCondition(LaunchConfiguration('gui'))
    )
    rviz_node = launch_ros.actions.Node(
        package='rviz2',
        executable='rviz2',
        name='rviz2',
        output='screen',
        arguments=['-d', rviz_path],
    )
 
    return launch.LaunchDescription([
        launch.actions.DeclareLaunchArgument(name='gui', default_value='True',
                                             description='Flag to enable joint_state_publisher_gui'),
        launch.actions.DeclareLaunchArgument(name='model', default_value=urdf_path,
                                             description='Absolute path to robot urdf file'),
        
        joint_state_publisher_node,
        joint_state_publisher_gui_node,
        robot_state_publisher_node,
        rviz_node
    ])

note:这里用了一个joint_state_publisher_gui_node,需要在编译前安装好,安装命令:

sudo apt-get install ros-foxy-joint-state-publisher-gui 

4.修改cmakelists.txt
打开cmakelists.txt,在ament_package()前面加上以下几行:

# Install launch files.
install(DIRECTORY
  launch
  meshes
  urdf
  DESTINATION share/${PROJECT_NAME}/
)

这是为了编译时把你自己建立的launch,meshes,urdf一起复制到执行文件夹内,不然编译后运行时会找不到相应的文件。

5.编译该包
在dev_ws下打开命令窗,输入:

colcon build --packages-select aubo_i5_simulation

配置启动文件

. install/setup.bash 

执行launch文件

ros2 launch aubo_i5_simulation display.launch.py 
  1. 这个时候会自动启动rviz2,打开后的界面是这样的
    在这里插入图片描述
    把左上角Fixed frame 里的map改为base_link
    然后点击左下角add,找到robotmodel,添加进去
    在这里插入图片描述
    然后把robotmodel的选项按下图更改,机械臂就出来了
    在这里插入图片描述

总结

本文没有讲的很细,只能说是初步实现了rviz2的建模,很多细节还是要靠自己理解!!!答主也在学习ROS2的过程中,以后也会陆续分享一些学习经验!与君共勉!

<think>好的,用户想在ROS2中实现机械的点到点编程,需要教程和示例代码。首先,我得回想一下ROS2的基本结构和机械控制的相关知识。ROS2中使用MoveIt 2进行机械的运动规划,而点到点运动通常指的是让机械的末端执行器移动到指定的位置和姿态。 首先,需要确认用户是否已经配置好了ROS2环境和机械的URDF文件。因为MoveIt需要机械的模型来进行路径规划。然后,安装MoveIt 2和相关依赖是必要的步骤,比如ros-humble-moveit和ros-humble-moveit-ros-planning-interface。 接下来,创建功能包,可能需要使用ament_cmake或colcon构建工具。然后,编写代码部分,应该使用MoveGroupInterface来设置目标位姿,并执行运动规划。记得在代码中初始化节点、设置规划组、设置目标位姿,然后进行规划和执行。 另外,用户可能需要了解如何设置目标位姿,这可以通过指定位置坐标和四元数方向来完成。还需要注意坐标系的转换,通常目标位姿是相对于机械的基坐标系或者某个特定的link。 示例代码的结构应该是这样的:初始化节点,创建MoveGroupInterface实例,设置目标位姿,调用move()方法执行运动。同时,需要处理可能的规划失败情况,给出提示信息。 此外,用户可能还需要了解如何测试代码,比如启动机械的驱动程序、MoveIt配置以及运行编写的节点。可能还需要使用RViz来可视化运动过程。 在参考引用中,用户提供了MoveIt编程和Aubo-i5的相关资料,可以结合这些内容来给出更具体的建议。例如,引用[2]提到遨博机械的MoveGroup接口,这可能与ROS2的MoveGroupInterface类似,但需要注意版本差异,因为ROS2ROS1的API有所不同。 需要检查是否有现成的ROS2包支持用户的机械型号,比如Aubo-i5是否有ROS2的驱动支持。如果没有,可能需要用户自行移植或使用其他兼容的接口。 最后,确保代码示例的正确性,包括正确的语法和必要的异常处理。同时提醒用户在实际应用中进行参数调整和错误处理,确保安全性。</think>### ROS2机械点到点编程实现步骤 根据Aubo-i5机械ROS2的MoveIt 2框架,点到点编程实现流程如下: 1. **环境配置** - 安装ROS2 Humble及MoveIt 2: ```bash sudo apt install ros-humble-moveit ros-humble-moveit-ros-planning-interface ``` - 配置机械URDF文件(参考引用[4]的Aubo-i5模型) 2. **创建功能包** ```bash ros2 pkg create aubo_p2p_control --build-type ament_python --dependencies moveit_ros_planning_interface rclpy ``` 3. **核心代码示例**(保存为aubo_p2p_node.py) ```python #!/usr/bin/env python3 import rclpy from rclpy.node import Node from geometry_msgs.msg import Pose from moveit.planning import MoveIt2 class AuboP2P(Node): def __init__(self): super().__init__('aubo_p2p_controller') # 初始化MoveIt2接口(参考引用[2]的MoveGroup编程模式) self.moveit2 = MoveIt2( node=self, joint_names=['shoulder_joint', 'upperArm_joint', 'foreArm_joint', 'wrist1_joint', 'wrist2_joint', 'wrist3_joint'], base_link='base_link', end_effector_link='tool0', group_name='manipulator' ) # 设置目标位姿(坐标系参考引用[4]) target_pose = Pose() target_pose.position.x = 0.5 # 单位:米 target_pose.position.y = 0.2 target_pose.position.z = 0.3 target_pose.orientation.w = 1.0 # 四元数默认朝向 # 执行运动规划(参考引用[3]的规划接口) self.moveit2.move_to_pose(pose=target_pose, position_tolerance=0.01, # 位置容差1cm orientation_tolerance=0.1) # 角度容差0.1rad def main(): rclpy.init() node = AuboP2P() rclpy.spin(node) node.destroy_node() rclpy.shutdown() if __name__ == '__main__': main() ``` 4. **运行测试** ```bash # 启动机械驱动(参考引用[4]的Aubo驱动配置) ros2 launch aubo_controller aubo_driver.launch.py # 启动MoveIt配置 ros2 launch aubo_moveit_config moveit.launch.py # 运行控制节点 ros2 run aubo_p2p_control aubo_p2p_node.py ``` **关键参数说明**: - `position_tolerance`:影响路径规划精度的关键参数(参考引用[5]的精度控制) - `orientation_tolerance`:姿态容差设置需根据任务需求调整 - 坐标系定义应符合DH参数约定(参考引用[4]的官方文档)
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值