news 2026/10/3 7:05:50

RVIZ2显示urdf模型 (手动版)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
RVIZ2显示urdf模型 (手动版)

本文讲述如何使用rviz2显示urdf模型,环境是WSL Ubuntu 24.04,ROS2是Jazzy版本


一 准备URDF文件

这里写一个简单的机械臂urdf文件,名为robot.urdf

<?xml version="1.0"?><robotname="test_arm"><linkname="base_link"><visual><originxyz="0 0 0"rpy="0 0 0"/><geometry><boxsize="0.2 0.2 0.2"/></geometry><materialname="blue"><colorrgba="0 0 1 0.8"/></material></visual></link><jointname="joint1"type="revolute"><parentlink="base_link"/><childlink="link1"/><originxyz="0 0 0.1"rpy="0 0 0"/><axisxyz="0 0 1"/><limitlower="-3.14"upper="3.14"effort="10.0"velocity="1.0"/></joint><linkname="link1"><visual><originxyz="0 0 0.15"rpy="0 0 0"/><geometry><boxsize="0.16 0.16 0.3"/></geometry><materialname="red"><colorrgba="1 0 0 0.8"/></material></visual></link></robot>

这个是一个关节joint1,2个link:base_link(蓝色立方体)和link1(红色立方体)。关节把这2个link连接在一起,base_link是根link。


二 安装需要的程序

首先是安装ROS2 Jazzy,可以参考官方文档,记住是安装ros-jazzy-desktop,里面包含了rviz2

然后安装joint_state_publisher_gui,该程序提供了一个界面来让关节运动,方便调试

sudoaptupdatesudoaptinstall-yros-jazzy-joint-state-publisher-gui

三 测试

1. 运行robot_state_publisher

robot_state_publisher是ros2自带的,可以使用它把urdf文件内容publish到topic: “/robot_description”

source/opt/ros/jazzy/setup.bash ros2 run robot_state_publisher robot_state_publisher --ros-args-probot_description:="$(catrobot.urdf)"

这里参数robot_description的值就是robot.urdf的内容,可以根据robot.urdf的位置加上路径

2. 运行joint_state_publisher_gui

运行下面命令,

source/opt/ros/jazzy/setup.bash ros2 run joint_state_publisher_gui joint_state_publisher_gui

弹出窗口,如下,显示关节名joint1,和urdf文件里定义的一样

这个界面的第一个按钮Randomize是用来给关节生成随机位置,Center则是让关节复位

joint_state_publisher_gui是通过向"/joint_state"发送位置,速度等信息,继而让关节运动

3. 运行rviz2

source/opt/ros/jazzy/setup.bash rviz2

弹出界面后,点击Fixed Frame,然后选择base_link,这个是robot.urdf文件里定义的根link

最后点击左下角的Add,然后选择RobotModel

添加完毕后在Description Topic里选择"/robot_description"

选择好之后久可以在rviz2中间的窗口中看到这个模型,可以通过鼠标滚轮靠近这个模型。

最后通过joint_state_publisher_gui上的滑块来控制joint1运动,同时会发现这个模型也在动

4. 自定义运动脚本

如果想通过自己写的python脚本让模型运动,那就需要先关闭joint_state_publisher_gui,然后使用如下简单脚本,

#!/usr/bin/env python3importrclpyfromrclpy.nodeimportNodefromsensor_msgs.msgimportJointStateclassJointPub(Node):def__init__(self):super().__init__("joint_publisher")self.pub=self.create_publisher(JointState,"/joint_states",10)self.timer=self.create_timer(0.5,self.timer_cb)self.angle=0.0deftimer_cb(self):msg=JointState()# 关键:填充时间戳msg.header.stamp=self.get_clock().now().to_msg()msg.header.frame_id=""msg.name=["joint1"]msg.position=[self.angle]self.pub.publish(msg)self.angle+=0.2ifself.angle>3.14:self.angle=-3.14defmain():rclpy.init()node=JointPub()rclpy.spin(node)node.destroy_node()rclpy.shutdown()if__name__=="__main__":main()

运行后发现模型可以旋转

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/3 7:05:34

talk to figma MCP 实战:在 Cursor 里把设计稿变成可运行代码

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/3 7:01:17

工控机选型避坑指南:从接口清单到现场稳定性的关键细节

前阵子帮一个做设备集成的朋友收拾烂摊子。他花了五千多买的一台工控机&#xff0c;项目验收时总死机&#xff0c;Windows一更新就蓝屏&#xff0c;现场工程师折腾了两周也没查明白。拆开机箱一看&#xff0c;固态盘是杂牌&#xff0c;主板是商用办公板&#xff0c;电源功率刚刚…

作者头像 李华