# 本地构建工程目录及配置文件
通过本地构建工程目录，用户构建完整的机器人描述包（如abc_description）、规划配置包（如abc_config）、夹爪控制包（如abc_gripper_controller)及必要的配置文件，以支持后续的轨迹生成任务和模型评测。
#### 在本地构建工程目录及配置文件
1. 进入<https://github.com/huaweicloud-samples/cloudrobo-samples>下载custom-robot工程，custom-robot工程中的robot_ur5e包含一款示例单臂机器人的全部配置文件，您可查看custom-robot的**README.md**了解各文件的功能。
2. 初始化工程。 
   假定您的机器人命名为"abc"，在本地环境进入custom_robot目录下执行python .\\scripts\\init_project.py abc，即会生成一个初始化的自定义机器人工程robot_abc，初始化工程中很多内容需要您补充，可参考文档解释和ur5e机器人的样例robot_ur5e。此处把scripts复制放到robot_abc下，方便后续进入开发环境执行脚本，目录结构如下图所示。
   图1目录结构   
   ![](https://support.huaweicloud.com/bestpractice-cloudrobo/images/zh-cn_image_0000002731944964.png)
   
   
3. 进入robot_abc/Assets/robots/robot_abc/abc_description，将您的urdf放在robot_abc/Assets/robots/robot_abc/abc_description/urdf文件夹下，确保下面只有一个urdf，并且是abc.urdf这种格式，将您的机器人mesh文件放在robot_abc/Assets/robots/robot_abc/abc_description/meshes文件夹下。 
   description是一个ROS2包，用来描述一个机器人的完整模型。它本身不含任何代码逻辑，只是把机器人的"定义文件"打包好，让RViz、O3DE、MoveIt 都能找到。可以将ur5e_description下的launch/display.launch.py和rviz/urdf.rviz放到abc的同级目录下，并且修改名字变成您的机器人如abc。
   ![](https://support.huaweicloud.com/bestpractice-cloudrobo/images/zh-cn_image_0000002761568845.png "点击放大")
   可以把robot_abc\\Assets\\robots\\robot_abc\\abc_description\\CMakeLists.txt下面的config删掉，大多数机器人在description中不需要config文件。
   ```
   install(
     DIRECTORY config launch meshes rviz urdf
     DESTINATION share/${PROJECT_NAME}
   )
   ```
   以UR5e为例，ur5e_description包的目录结构如下所示：
   ```
   ur5e_description/ 
   ├── CMakeLists.txt # 构建配置：告诉 colcon 把哪些目录安装出去 
   ├── package.xml # 包的"信息"：包名、依赖、作者 
   ├── urdf/ # 机器人描述文件（核心） 
   │ └── ur5e.urdf 
   ├── meshes/ # 3D 外壳文件（STL 格式） 
   │ ├── base_link.STL 
   │ └── ... 
   ├── launch/ # 启动脚本 
   │ └── display.launch.py 
   └── rviz/ # RViz 配置 
    └── urdf.rviz
   ```
   
   
4. 书写metadata.json。 
   - 如果是**单** **臂** ，可仿照如下：
     ```
     { 
      "robot_type": "abc", //此处定义机器人名，务必和init_project.py使用同一个名字 
      "record_topic": [ 
      "/arm_controller/follow_joint_trajectory/_action/feedback", 
      "/arm_position_controller/commands", 
      "/joint_states", 
      "/hand_position_controller/commands", 
      "/hand_gripper_controller" 
      ] 
     }
     ```
     
   
   
   
   - 如果是**双臂** ，可仿照如下：
     ```
     { 
      "robot_type": "abc", //此处定义机器人名，务必和init_project.py使用同一个名字 
      "record_topic":[ 
      "/arm_controller/follow_joint_trajectory/_action/feedback", 
      "/left_arm_position_controller/commands", 
      "/right_arm_position_controller/commands", 
      "/joint_states", 
      "/left_gripper_position_controller/commands", 
      "/left_gripper_controller", 
      "/right_gripper_position_controller/commands" 
      "/right_gripper_controller", 
      "/torso_position_controller/commands" //此处是带躯干的双臂机器人 
      ] 
     }
     ```
     
   
   
   
   
5. 在本地初始化工程后，上传该工程到OBS（必须是绑定了工作空间OBS地址下的子路径）。本地工程建议使用OBS Browser+上传更方便，如下图所示。 
   图2OBS Browser+   
   ![](https://support.huaweicloud.com/bestpractice-cloudrobo/images/zh-cn_image_0000002758489621.png "点击放大")
   图3通过OBS Browser+上传工程   
   ![](https://support.huaweicloud.com/bestpractice-cloudrobo/images/zh-cn_image_0000002761625039.png "点击放大")
   
   
 
