ROS2 Ubuntu18.04机器人系统,机器人仿真机械臂搭建 Ubuntu18.04 已经搭建好 Ros2 foxcy环境及所需命令语句,配套有gazebo11,rviz2,可以直接使用 配置了官网机械臂,压缩包文件,用VMware打开就能用

刚给机械臂接上电源,Ubuntu18.04的桌面突然弹出gazebo启动画面——这玩意儿总算跑起来了。今天咱们直接上手折腾这个预装好ROS2 foxcy环境的虚拟机,手把手教你让官网机械臂在仿真环境里动起来。

先把压缩包扔进虚拟机桌面,解压后记得在workspace里执行:

source /opt/ros/foxy/setup.bash
colcon build --symlink-install

这步很多人会栽跟头,要是看到"package not found"的报错,八成是没在workspace/src里放机械臂的urdf描述文件。我直接把官方提供的ur5robotiq85gripper.xacro扔进去,配置了夹爪的碰撞检测参数。

启动命令有点讲究,别用ros2 launch直接莽:

from launch import LaunchDescription
from launch_ros.actions import Node
from ament_index_python.packages import get_package_share_directory

def generate_launch_description():
    return LaunchDescription([
        Node(
            package='gazebo_ros',
            executable='gazebo',
            arguments=['-s', 'libgazebo_ros_init.so', '/usr/share/gazebo-11/worlds/empty.world']
        ),
        Node(
            package='robot_state_publisher',
            executable='robot_state_publisher',
            name='robot_state_publisher',
            output='screen',
            parameters=[{'robot_description': open('ur5_robotiq.urdf').read()}]
        )
    ])

这个launch文件先启动物理引擎再加载机器人模型。注意第13行直接读urdf文件的方式虽然简单粗暴,但比用参数文件更不容易出错。遇到过有人在yaml配置里写错缩进,模型死活加载不出来。

在rviz2里添加RobotModel时经常报TF丢失,这时候打开终端敲:

ros2 run tf2_ros static_transform_publisher 0 0 0 0 0 0 world base_link

这个静态坐标变换把世界坐标系和机械臂基座强行绑定。有次手滑把z轴坐标写成1,结果机械臂直接悬空两米,场面极其魔幻。

想让机械臂关节动起来,试试这个Python控制脚本:

# move_joints.py
import rclpy
from rclpy.node import Node
from trajectory_msgs.msg import JointTrajectory, JointTrajectoryPoint

class ArmMover(Node):
    def __init__(self):
        super().__init__('arm_driver')
        self.publisher = self.create_publisher(JointTrajectory, '/joint_trajectory_controller/joint_trajectory', 10)
        
        trajectory = JointTrajectory()
        trajectory.joint_names = ['shoulder_pan_joint', 'shoulder_lift_joint', 'elbow_joint', 'wrist_1_joint', 'wrist_2_joint', 'wrist_3_joint']
        
        point = JointTrajectoryPoint()
        point.positions = [0.0, -1.57, 1.57, 0.0, 0.0, 0.0]  # 经典安全位形
        point.time_from_start.sec = 2
        
        trajectory.points.append(point)
        self.publisher.publish(trajectory)

if __name__ == '__main__':
    rclpy.init()
    node = ArmMover()
    rclpy.spin_once(node, timeout_sec=0.1)
    node.destroy_node()
    rclpy.shutdown()

注意第13行的关节角度数值范围,有次把shoulderliftjoint设成正值,结果机械臂直接穿透地面。Gazebo的碰撞检测这时候会疯狂刷警告,CPU占用瞬间飙到90%。

最后说个坑:虚拟机运行Gazebo时记得在VMware设置里勾选3D加速,不然帧率会卡得像PPT。曾经有个哥们以为是驱动问题,重装了十几次系统,最后发现是虚拟机配置没开这个选项。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐