ROS2机器人仿真环境搭建指南:Ubuntu18.04下使用Gazebo11和RViz2快速配...
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。曾经有个哥们以为是驱动问题,重装了十几次系统,最后发现是虚拟机配置没开这个选项。

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


所有评论(0)