ROS——构建一个模拟的两轮ROS机器人

news2024/11/28 9:23:00

构建一个模拟的两轮ROS机器人

  • 1. 确保已经安装了Rviz
  • 2. 生成并构建ROS功能包
    • 2.1 生成一个catkin工作空间
    • 2.2 漏了一个懒得改
    • 2.3 构建差分驱动的机器人的URDF
      • 2.3.1 创建机器人底座
      • 2.3.2 使用roslaunch
      • 2.3.3 添加轮子
      • 2.3.4 添加颜色
      • 2.3.5 添加小脚轮
      • 2.3.6 添加碰撞属性
      • 2.3.7 移动轮子
      • 2.3.8 添加物理属性
    • 2.4 Gazebo
      • 2.4.1 安装Gazebo
      • 2.4.2 使用roslaunch启动Gazebo
      • 2.4.3 更改颜色
      • 2.4.4模型验证
      • 2.4.5 在Gazebo中查看URDF
      • 2.4.6 新建环境

1. 确保已经安装了Rviz

2. 生成并构建ROS功能包

2.1 生成一个catkin工作空间

$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws/src
$ catkin_init_workspace

编译工作空间

$ cd ~/catkin_ws/
$ catkin_make

加载源文件

$ source ~/catkin_ws/devel/setup.bash

在.bashrc文件中加入命令

$ echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc

为了确定源文件是否被加载,通过下列命令查询ROS环境正在使用的工作空间

$ echo $ROS_PACKAGE_PATH

对应输出应为:

home/username/catkin_ws/src:/opt/ros/noetic/share

2.2 漏了一个懒得改

2.3 构建差分驱动的机器人的URDF

URDF是具有特殊定义的XML格式的文件,专门用来对机器人组件级别进行抽象的模型描述。
在ros_robotics功能包目录生成一个/urdf目录:

$ cd ~/catkin_ws/src/robotics
$ mkdir urdf
$ cd urdf

2.3.1 创建机器人底座

机器人的第一个组成部分是底座盒子长宽高分别为0.5,0.5,0.25。
新建文件dd_robot.urdf保存在urdf文件夹下。

<<?xml version='1.0'?>
<robot name="dd_robot">
<!--Base Link-->
    <link  name="base_link">

        <visual>
            <origin xyz="0 0 0 " rpy="0 0 0" />
            <geometry>
                <box size="0.5 0.5 0.25" /> 
                </geometry>
            </visual>
    </link>
</robot>

2.3.2 使用roslaunch

roslaunch:能够简化启动多个ROS节点的过程;简化参数服务器设置的过程
使用时需通过roscore命令来启动节点管理器
roslaunch语法结构

$ roslaunch <package_name> <file.launch>

在ros_robotics功能包里面新建文件夹lacunch,再新建ddrobot_rviz.launch文件

<launch>
    <!-- value passed by command line input-->
    <arg name="model"/>
    <arg name="gui" default="False"/>

    <!-- set these parameters on Parameter Server-->
    <param name="robot_description"
                textfile="$(find ros_robotics)/urdf/$(arg model)"/>
    <param name="use_gui" value="$(arg gui)"/>

    <!-- Start 3 nodes: joint_state_publisher,
                        robot_state_publisher and
                        rviz -->
    <node name="joint_state_publisher"
           pkg="joint_state_publisher"
          type="joint_state_publisher"/>
    <node name="robot_state_publisher"
           pkg="robot_state_publisher"
          type="robot_state_publisher"/>
    <node name="rviz" pkg="rviz" type="rviz"
           args="-d $(find ros_robotics)/urdf.rviz"
           required="true"/>          
</launch>

输入以下命令查看机器人模型

$ roslaunch ros_robotics ddrobot_rviz.launch model:=dd_robot.urdf

如果出现下面错误,RLException: [ddrobot_rviz.launch] is neither a launch file in package [launch] nor is [launch] a launch file name
The traceback for the exception was written to the log file
错误
解决方法:将devel/setup.bash添加到系统

source ./devel/setup.bash

在displays添加Robotmodel和TF,并将FIxed frame改为base_link。
在这里插入图片描述

2.3.3 添加轮子

继续在上一段代码加

<?xml version='1.0'?>
<robot name="dd_robot">
<!--Base Link-->
    <link  name="base_link">
        <visual>
            <origin xyz="0 0 0 " rpy="0 0 0" />
            <geometry>
                <box size="0.5 0.5 0.25" /> 
            </geometry>
        </visual>
    </link>

<!-- Right Wheel-->
    <link name="right_wheel">
        <visual>
            <origin xyz="0 0 0" rpy="1.570795 0 0 " />
            <geometry>
                <cylinder length="0.1" radius="0.2"/>
            </geometry>
        </visual>
    </link>
    <joint name="joint_right_wheel" type="continuous">
        <parent link="base_link"/>
        <child link="right_wheel"/>
        <origin xyz="0 -0.30 0" rpy="0 0 0"/>
        <axis xyz="0 1 0"/>
    </joint>

<!-- Left Wheel-->
    <link name="left_wheel">
        <visual>
            <origin xyz="0 0 0" rpy="1.570795 0 0" />
            <geometry>
                <cylinder length="0.1" radius="0.2"/>
            </geometry>
        </visual>
    </link>
    <joint name="joint_left_wheel" type="continuous">
        <parent link="base_link"/>
        <child link="left_wheel"/>
        <origin xyz="0 0.30 0" rpy="0 0 0"/>
        <axis xyz="0 1 0"/>
    </joint>
</robot>

运行

2.3.4 添加颜色

为了方便观看
还是在上面代码改

<?xml version='1.0'?>
<robot name="dd_robot">
<!--Base Link-->
    <link  name="base_link">
        <visual>
            <origin xyz="0 0 0 " rpy="0 0 0" />
            <geometry>
                <box size="0.5 0.5 0.25" /> 
            </geometry>
            <material name="blue">
                <color rgba="0 0.5 1 1"/>
            </material>
        </visual>
    </link>

<!-- Right Wheel-->
    <link name="right_wheel">
        <visual>
            <origin xyz="0 0 0" rpy="1.570795 0 0 " />
            <geometry>
                <cylinder length="0.1" radius="0.2"/>
            </geometry>           
            <material name="black">
                <color rgba="0.05 0.05 0.05 1"/>
            </material>
        </visual>
    </link>
    <joint name="joint_right_wheel" type="continuous">
        <parent link="base_link"/>
        <child link="right_wheel"/>
        <origin xyz="0 -0.30 0" rpy="0 0 0"/>
        <axis xyz="0 1 0"/>
    </joint>

<!-- Left Wheel-->
    <link name="left_wheel">
        <visual>
            <origin xyz="0 0 0" rpy="1.570795 0 0" />
            <geometry>
                <cylinder length="0.1" radius="0.2"/>
            </geometry>
            <material name="black">
                <color rgba="0.05 0.05 0.05 1"/>
            </material>
        </visual>
    </link>
    <joint name="joint_left_wheel" type="continuous">
        <parent link="base_link"/>
        <child link="left_wheel"/>
        <origin xyz="0 0.30 0" rpy="0 0 0"/>
        <axis xyz="0 1 0"/>
    </joint>
</robot>

继续运行,我们的车出来了
在这里插入图片描述

2.3.5 添加小脚轮

添加小脚轮来使小车平衡

在base_link加代码

<!--Caster-->
        <visual name="caster">
            <origin xyz="0.2 0 -0.125" rpy="0 0 0"/>
            <geometry>
                <sphere radius="0.05"/>
            </geometry>
        </visual>

在这里插入图片描述

2.3.6 添加碰撞属性

添加碰撞属性来使小车检测和识别物体的边界
同样是在<link>元素中加<collision>属性
完整代码

<?xml version='1.0'?>
<robot name="dd_robot">
<!--Base Link-->
    <link  name="base_link">
        <visual>
            <origin xyz="0 0 0 " rpy="0 0 0" />
            <geometry>
                <box size="0.5 0.5 0.25" /> 
            </geometry>
            <material name="blue">
                <color rgba="0 0.5 1 1"/>
            </material>
        </visual>
        <!--Base collision-->
        <collision>
            <origin xyz="0 0 0 " rpy="0 0 0 "/>
            <geometry>
                <box size="0.5 0.5 0.25"/>
            </geometry>    
        </collision>
        <!--Caster-->
        <visual name="caster">
            <origin xyz="0.2 0 -0.125" rpy="0 0 0"/>
            <geometry>
                <sphere radius="0.05"/>
            </geometry>
        </visual>
        <!--caster collision -->
        <collision>
            <origin xyz="0.2 0 -0.125" rpy="0 0 0 "/>
            <geometry>
                <sphere radius="0.05"/>
            </geometry>
        </collision>
    </link>

<!-- Right Wheel-->
    <link name="right_wheel">
        <visual>
            <origin xyz="0 0 0" rpy="1.570795 0 0 " />
            <geometry>
                <cylinder length="0.1" radius="0.2"/>
            </geometry>           
            <material name="black">
                <color rgba="0.05 0.05 0.05 1"/>
            </material>
        </visual>
        <!--right wheel collision -->
        <collision>
            <origin xyz="0 0 0" rpy="1.570795 0 0 "/>
            <geometry>
                <cylinder length="0.1" radius="0.2"/>
            </geometry>
        </collision>
    </link>
    <joint name="joint_right_wheel" type="continuous">
        <parent link="base_link"/>
        <child link="right_wheel"/>
        <origin xyz="0 -0.30 0" rpy="0 0 0"/>
        <axis xyz="0 1 0"/>
    </joint>

<!-- Left Wheel-->
    <link name="left_wheel">
        <visual>
            <origin xyz="0 0 0" rpy="1.570795 0 0" />
            <geometry>
                <cylinder length="0.1" radius="0.2"/>
            </geometry>
            <material name="black">
                <color rgba="0.05 0.05 0.05 1"/>
            </material>
        </visual>
        <!--left wheel collision -->
        <collision>
            <origin xyz="0 0 0" rpy="1.570795 0 0 "/>
            <geometry>
                <cylinder length="0.1" radius="0.2"/>
            </geometry>
        </collision>
    </link>
    <joint name="joint_left_wheel" type="continuous">
        <parent link="base_link"/>
        <child link="left_wheel"/>
        <origin xyz="0 0.30 0" rpy="0 0 0"/>
        <axis xyz="0 1 0"/>
    </joint>
</robot>

2.3.7 移动轮子

接下来,我们通过GUI弹窗来控制轮子的关节组件
将gui添加到命令字段,如下:

$ roslaunch ros_robotics ddrobot_rviz.launch model:=dd_robot.urdf gui:=True

如果发现打开Rviz,发现没有GUI窗口。采用下面这个方法

  • 下载joint_state_publisher_gui
$ sudo apt-get install ros-noetic-joint-state-publisher-gui
  • 将launch文件里面的joint_state_publisher改为joint_state_publisher_gui
  • 重新运行命令,就会出现GUI窗口了
    在这里插入图片描述

2.3.8 添加物理属性

物理属性:包括惯性<inertia>,3*3矩阵;质量<mass>,单位kg
之后就可以在Gazebo引擎中启动了
需要在<link>中添加<inertial>标签
具体代码较长

<?xml version='1.0'?>
<robot name="dd_robot">
<!--Base Link-->
    <link  name="base_link">
        <visual>
            <origin xyz="0 0 0 " rpy="0 0 0" />
            <geometry>
                <box size="0.5 0.5 0.25" /> 
            </geometry>
            <material name="blue">
                <color rgba="0 0.5 1 1"/>
            </material>
        </visual>
        <!--Base collision-->
        <collision>
            <origin xyz="0 0 0 " rpy="0 0 0 "/>
            <geometry>
                <box size="0.5 0.5 0.25"/>
            </geometry>    
        </collision>
        <inertial>
            <mass value="5"/>
            <inertia ixx="0.13" ixy="0.0" ixz="0.0" iyy="0.21" iyz="0.0" izz="0.13"/>
        </inertial>
        <!--Caster-->
        <visual name="caster">
            <origin xyz="0.2 0 -0.125" rpy="0 0 0"/>
            <geometry>
                <sphere radius="0.05"/>
            </geometry>
        </visual>
        <!--caster collision -->
        <collision>
            <origin xyz="0.2 0 -0.125" rpy="0 0 0 "/>
            <geometry>
                <sphere radius="0.05"/>
            </geometry>
        </collision>
        <inertial>
            <mass value="0.5"/>
            <inertia ixx="0.0001" ixy="0.0" ixz="0.0" iyy="0.0001" iyz="0.0" izz="0.0001"/>
        </inertial>
    </link>

<!-- Right Wheel-->
    <link name="right_wheel">
        <visual>
            <origin xyz="0 0 0" rpy="1.570795 0 0 " />
            <geometry>
                <cylinder length="0.1" radius="0.2"/>
            </geometry>           
            <material name="black">
                <color rgba="0.05 0.05 0.05 1"/>
            </material>
        </visual>
        <!--right wheel collision -->
        <collision>
            <origin xyz="0 0 0" rpy="1.570795 0 0 "/>
            <geometry>
                <cylinder length="0.1" radius="0.2"/>
            </geometry>
        </collision>
        <inertial>
            <mass value="0.5"/>
            <inertia ixx="0.01" ixy="0.0" ixz="0.0" iyy="0.005" iyz="0.0" izz="0.005"/>
        </inertial>
    </link>
    <joint name="joint_right_wheel" type="continuous">
        <parent link="base_link"/>
        <child link="right_wheel"/>
        <origin xyz="0 -0.30 0" rpy="0 0 0"/>
        <axis xyz="0 1 0"/>
    </joint>

<!-- Left Wheel-->
    <link name="left_wheel">
        <visual>
            <origin xyz="0 0 0" rpy="1.570795 0 0" />
            <geometry>
                <cylinder length="0.1" radius="0.2"/>
            </geometry>
            <material name="black">
                <color rgba="0.05 0.05 0.05 1"/>
            </material>
        </visual>
        <!--left wheel collision -->
        <collision>
            <origin xyz="0 0 0" rpy="1.570795 0 0 "/>
            <geometry>
                <cylinder length="0.1" radius="0.2"/>
            </geometry>
        </collision>
        <inertial>
            <mass value="0.5"/>
            <inertia ixx="0.01" ixy="0.0" ixz="0.0" iyy="0.005" iyz="0.0" izz="0.005"/>
        </inertial>
    </link>
    <joint name="joint_left_wheel" type="continuous">
        <parent link="base_link"/>
        <child link="left_wheel"/>
        <origin xyz="0 0.30 0" rpy="0 0 0"/>
        <axis xyz="0 1 0"/>
    </joint>
</robot>

我们可以使用check_urdf工具来检查语法

$ check_urdf dd_robot.urdf

2.4 Gazebo

2.4.1 安装Gazebo

打开Gazebo

$ gazebo

2.4.2 使用roslaunch启动Gazebo

$ roslaunch gazebo_ros empty_world.launch

2.4.3 更改颜色

<gazebo reference="base_link">
                material>Gazebo/Blue</material>
                <pose>0 0 3 0 0 0</pose>
            </gazebo>

2.4.4模型验证

验证代码是否有问题

$ gzsdf -p dd_robot.gazebo 

如果这个有问题换下面的

$ gz sdf -p dd_robot.gazebo 

2.4.5 在Gazebo中查看URDF

使用XML生成ddrobot_gazebo.launch

<launch>
  <!-- We resume the logic in gazebo_ros package empty_world.launch, -->
  <!-- changing only the name of the world to be launched -->
  <include file="$(find gazebo_ros)/launch/empty_world.launch">
    <arg name="world_name" value="$(find ros_robotics)/worlds/ddrobot.world"/>
   
    <arg name="paused" default="false"/>
    <arg name="use_sim_time" default="true"/>
    <arg name="gui" default="true"/>
    <arg name="headless" default="false"/>
    <arg name="debug" default="false"/>

  </include>

  <!-- Spawn dd_robot into Gazebo -->
  <node name="spawn_urdf" pkg="gazebo_ros" type="spawn_model" output="screen"
     args="-file $(find ros_robotics)/urdf/dd_robot.gazebo -urdf -model ddrobot" />

</launch>

2.4.6 新建环境

在功能包里面新建文件夹worlds
新建文件ddrobot.world

<?xml version="1.0" ?>
<sdf version="1.4">
  <world name="default">
    <include>
      <uri>model://ground_plane</uri>
    </include>
    <include>
      <uri>model://sun</uri>
    </include>
    <include>
      <uri>model://construction_cone</uri>
      <name>construction_cone</name>
      <pose>-3.0 0 0 0 0 0</pose>
    </include>
    <include>
      <uri>model://construction_cone</uri>
      <name>construction_cone</name>
      <pose>3.0 0 0 0 0 0</pose>
    </include>
  </world>
</sdf>

在这里插入图片描述
参考文献:ROS机器人开发实用案例分析(第二版)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/49548.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CHS寻址

盘片&#xff08;platter&#xff09; 、磁头&#xff08;head&#xff09;、 磁道&#xff08;track&#xff09;、 扇区&#xff08;sector&#xff09;、 柱面&#xff08;cylinder&#xff09;。 CHS&#xff1a;通过柱面&#xff08;cylinder&#xff09;、磁头&#xff0…

成都易佰特的坑——E103-W06

写这篇博客&#xff0c;是为了记录&#xff0c;为了防止技术同行踩坑。 因为什么原因&#xff0c;就不说了。反正就是买了这个E103-W06模块来进行测试wifi透传的性能. 结果&#xff0c;好家伙&#xff0c;买回来就不能用。TMD虚拟串口都识别不了。还他妈卖的挺贵。95元~99元一…

【附源码】计算机毕业设计JAVA装修网站

【附源码】计算机毕业设计JAVA装修网站 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JAVA mybatis M…

2分能出线,6分却不能出线?世界杯小组赛的出线规则这次真被我整明白了

写在前面 这个月世界杯正是进行得火热&#xff0c;我这样的十几年的老球迷自然是场场不落&#xff0c;周边不少不看球的朋友甚至连我那一场比赛上多少人都弄不明白的老婆也能说上几句&#xff1a;“听说梅西输了&#xff1f;”&#xff0c;“听说德国队要回家了”&#xff0c;“…

mybatis实战:一、mybatis入门

出自《MyBatis从入门到精通》刘增辉&#xff0c;精简 1.pom.xml 1.设置源码编码方式为 UTF -8 2.设置编译源代码的 JDK 版本 3.添加mybatis依赖 4.还需要添加会用到的 Log4j JUnit ySql 驱动的依赖。 <?xml version"1.0" encoding"UTF-8"?> <pr…

基于BM1684X 架构实现 Faiss 的两个查询接口

文章目录Faiss 简介距离度量在 Sophon TPU 上的接口实现Sophon TPUindexflat 实现indexPQ 实现 Faiss 简介 Faiss 库是 Facebook 开发的一个用于稠密向量相似性搜索和聚类的库&#xff0c;该库包含有诸多向量相似性搜索的算法。向量相似性搜索是将一个向量与底库中的向量集合…

[附源码]计算机毕业设计springboot教务管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

2022科大讯飞A.I.开发者大赛 柑橘花果梢识别挑战赛冠军方案

2022科大讯飞A.I.开发者大赛 柑橘花果梢识别挑战赛冠军方案PPT

游戏道具平台|基于Springboot+Vue实现游戏道具平台系统

作者主页&#xff1a;编程指南针 作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容&#xff1a;Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助 收藏点赞不迷路 关注作者有好处 文末获取源…

Vagrant 搭建虚拟机环境

用 Vagrant 和 VirtualBox 来快速搭建一个开发环境是非常方便的。简单整理一下 Vagrant 搭建 VirtualBox 虚拟机的记录。 首先安装 Vagrant 和 VirtualBox&#xff0c;这一步就直接省略了。自行安装即可。 什么是 Vagrant&#xff0c;我们这里引用 OSChina 上的一段话来进行解释…

浏览器IndexedDB模块损坏及解决办法

浏览器IndexedDB模块损坏及解决办法 表现 提示错误码&#xff1a; UnknownError Internal error opening backing store for indexedDB.open. indexedDB无法展开。 复现方式 进入以下路径 Mac C:\用户\xxx\AppData\Local\Google\Chrome\User Data\Default\IndexedDB Windo…

吴恩达2022机器学习——第二部分高级学习算法第三周笔记

目录1.1决定下一步做什么&#xff08;构建机器学习的实用建议&#xff09;1.2模型评估1.3模型选择&交叉验证测试集的训练方法模型选择总结举例2.1通过偏差与方法进行诊断2.2正则化、偏差、方差1.1决定下一步做什么&#xff08;构建机器学习的实用建议&#xff09; 从一个例…

C++运算符重载【加号、左移、递增、指针、赋值、中括号、关系、函数调用】,统统载了

学习目标 在c对象的学习中&#xff0c;我们会使用到运算符重载&#xff0c;接下来大家一起学习一下吧&#xff01; 学习内容 运算符重载&#xff1a; operator overloading运算符重载是一种形式的C多态 即对已有运算符进行重新定义&#xff0c;赋予新的功能&#xff0c;使其…

我的创作纪念日

机缘 成为创作者的初心&#xff1a; 让大家目光向我看齐&#xff0c;来我这CV&#xff08;狗头&#xff09; 收获 在创作的过程中都有哪些收获 获得了28粉的关注获得了252赞、83评论、233474阅读量、548收藏 &#xff08;还好我自己点了几个赞&#xff0c;不然250赞显得我好…

安洵杯-复现

reee 主要就是这个函数 void __noreturn sub_401640() {char Buffer[52]; // [esp0h] [ebp-60h] BYREFchar ArgList[16]; // [esp34h] [ebp-2Ch] BYREFint v2; // [esp44h] [ebp-1Ch]CHAR Text[13]; // [esp48h] [ebp-18h] BYREFint v4; // [esp55h] [ebp-Bh]__int16 v5; // [e…

《Redis实战篇》一、短信登录

1.1、导入黑马点评项目 1.1.1 、导入SQL 1.1.2、有关当前模型 手机或者app端发起请求&#xff0c;请求我们的nginx服务器&#xff0c;nginx基于七层模型走的事HTTP协议&#xff0c;可以实现基于Lua直接绕开tomcat访问redis&#xff0c;也可以作为静态资源服务器&#xff0c;轻…

Java并发常见面试题(二)

为什么要使用多线程&#xff1f; 从整体上来看 从计算机底层来说&#xff1a; 线程可以看作是轻量级的进程&#xff0c;是最小的程序执行单位&#xff0c;线程间的切换和调度的成本远远小于进程。另外&#xff0c;多核CPU时代&#xff0c;多个线程可以同时运行&#xff0c;这…

PCB布线及后仿真验证过程(干货满满,建议收藏)

一 布线的基本要求 1. 布线次序考虑 1) 规则驱动布线遵循的基本步骤 定义禁布区&#xff0c;或控制区&#xff1b; 若有规则约束&#xff0c;要求设置规则&#xff1b; 试布线&#xff0c;评估单板是否可以布通&#xff0c;若不能布通&#xff0c;需要采用策略&#x…

Linux测试常用命令

Linux测试常用命令1.Linux安装2.linux常用命令1.一些Linux环境下的基本操作2. 目录管理3.文件管理1.Linux安装 在VMWare虚拟机上安装linux操作系统&#xff0c;得到一个ip&#xff0c;然后通过MobaXterm远程连接linux并进行命令操作。 公司测试的时候是直接拿到服务器ip&…

食品经营许可证办理要什么材料

食品经营许可证办理要什么材料 1.食品经营许可申请书&#xff1b; 2.营业执照或者其他主体资格证明文件复印件&#xff1b; 3.法定代表人&#xff08;负责人&#xff09;和食品安全管理人员的名册、身份证明复印件。申请人委托他人办理食品经营许可申请的&#xff0c;代理人…