一、调整机器人模型大小
1. 修改 URDF/XACRO 文件中的几何参数
机器人模型的大小由 URDF 中的geometry
元素定义,直接修改尺寸参数即可。
示例:调整立方体大小
<link name="base_link">
<visual>
<geometry>
<!-- 修改size参数调整大小 -->
<box size="0.6 0.4 0.2"/> <!-- 原尺寸为0.4 0.3 0.1 -->
</geometry>
</visual>
</link>
示例:调整圆柱体大小
<link name="wheel_link">
<visual>
<geometry>
<!-- 修改radius和length参数 -->
<cylinder radius="0.08" length="0.03"/> <!-- 原尺寸为radius=0.05, length=0.02 -->
</geometry>
</visual>
</link>
2. 使用 XACRO 缩放比例(推荐)
通过 XACRO 宏可以统一缩放整个机器人模型:
<?xml version="1.0"?>
<robot name="my_robot" xmlns:xacro="http://www.ros.org/wiki/xacro">
<!-- 定义缩放因子 -->
<xacro:property name="scale" value="1.5"/>
<link name="base_link">
<visual>
<geometry>
<!-- 使用缩放因子 -->
<box size="${0.4*scale} ${0.3*scale} ${0.1*scale}"/>
</geometry>
</visual>
</link>
</robot>
二、调整机器人模型位置
1. 修改 joint 的 origin 参数
通过调整 joint 的origin
参数改变部件的相对位置:
示例:调整轮子位置
<joint name="left_wheel_joint" type="continuous">
<parent link="base_link"/>
<child link="left_wheel_link"/>
<!-- 修改xyz参数调整位置 -->
<origin xyz="-0.3 -0.2 0" rpy="0 1.5707 0"/> <!-- 原位置为-0.2 -0.17 0 -->
</joint>
2. 修改 TF 变换关系
如果需要动态调整机器人在世界中的位置,可通过修改 TF 变换实现:
方法一:使用 static_transform_publisher
# 发布静态TF变换,将base_link相对于map坐标系偏移
ros2 run tf2_ros static_transform_publisher 1.0 0.5 0 0 0 0 map base_link
方法二:编写 TF 发布节点
import rclpy
from rclpy.node import Node
from geometry_msgs.msg import TransformStamped
import tf2_ros
class FixedFramePublisher(Node):
def __init__(self):
super().__init__('fixed_frame_publisher')
self.tf_broadcaster = tf2_ros.TransformBroadcaster(self)
timer = self.create_timer(0.1, self.broadcast_transform)
def broadcast_transform(self):
t = TransformStamped()
t.header.stamp = self.get_clock().now().to_msg()
t.header.frame_id = 'map'
t.child_frame_id = 'base_link'
# 设置位置偏移
t.transform.translation.x = 1.0 # X轴偏移1米
t.transform.translation.y = 0.5 # Y轴偏移0.5米
t.transform.translation.z = 0.0
# 设置姿态(四元数)
t.transform.rotation.x = 0.0
t.transform.rotation.y = 0.0
t.transform.rotation.z = 0.0
t.transform.rotation.w = 1.0
self.tf_broadcaster.sendTransform(t)
def main():
rclpy.init()
node = FixedFramePublisher()
rclpy.spin(node)
if __name__ == '__main__':
main()
三、调整 RViz 视图中的显示位置
1. 改变 Fixed Frame
- 在 RViz 顶部工具栏中修改
Fixed Frame
- 例如:将
map
改为odom
或base_link
2. 手动调整视角
- 使用鼠标操作:
- 左键拖动:旋转视角
- 右键拖动:平移视图
- 滚轮:缩放
- 或使用工具栏中的预设视角按钮(如
Top
、Front
、Side
)
四、常见问题与解决方案
1. 修改后模型未更新
- 确保重新加载了 URDF/XACRO 文件
- 重启
robot_state_publisher
节点 - 在 RViz 中点击
Displays
面板中的Reset
按钮
2. 模型位置异常
- 检查 joint 的
origin
参数是否符合右手定则 - 使用
tf2_tools view_frames
检查 TF 树是否正确 - 确保所有 joint 的 parent 和 child link 名称正确
3. 缩放后碰撞检测异常
- 如果使用 MoveIt! 等规划库,需同步修改碰撞模型的尺寸
- 在 URDF 中确保
collision
元素与visual
元素尺寸一致
五、验证修改效果
- 编译并加载修改后的模型
# 若使用XACRO,重新编译
ros2 run xacro xacro my_robot.xacro > my_robot.urdf
# 重启robot_state_publisher
ros2 run robot_state_publisher robot_state_publisher --ros-args -p robot_description:="$(cat my_robot.urdf)"
- 在 RViz 中确认修改
- 观察模型尺寸是否变化
- 使用
rviz2
中的TF
显示元素检查坐标系位置关系