## page was copied from ROS/Tutorials/catkin/CreatingPackage <> == Do que é feito um pacote catkin? == Para que um pacote seja considerado um pacote catkin, ele deve responder à alguns requerimentos: * O pacote deve conter um arquivo [[catkin/package.xml|package.xml]] * O arquivo package.xml provê meta-informações sobre o pacote * O pacote deve conter uma [[catkin/CMakeLists.txt|CMakeLists.txt que use catkin]]. * [[catkin/package.xml#Metapackages|Catkin metapackages]] têm que ter um arquivo CMakeLists.txt de "boilerplate". * Não pode haver mais de um pacote em cada diretório * Isso significa que múltiplos pacotes não podem ficar no mesmo diretório O pacote mais simples possível poderia ser assim: . {{{ my_package/ CMakeLists.txt package.xml }}} == Pacotes em um espaço de trabalho catkin == O método recomendado para trabalhar com pacotes catkin é usando um [[catkin/workspaces|espaço de trabalho catkin]], mas você também pode criar pacotes catkin por fora. Um espaço de trabalho trivial poderia ser algo do tipo: . {{{ espaco_de_trabalho/ -- espaço de trabalho (workspace) src/ -- espaço do código fonte CMakeLists.txt -- arquivo CMake mais acima, provido pelo catkin pacote_1/ CMakeLists.txt -- arquivo CMake para pacote_1 package.xml -- manifesto para pacote_1 ... pacote_n/ CMakeLists.txt -- arquivo CMake para pacote_n package.xml -- manifesto para pacote_n }}} Antes de continuar com este tutorial, crie um espaço catkin vazio seguindo o tutorial sobre [[catkin/Tutorials/create_a_workspace|criar um espaço de trabalho catkin]]. == Criando um pacote catkin == Este tutorial vai mostrar como usar o script [[catkin/commands/catkin_create_pkg|catkin_create_pkg]] para criar um novo pacote catkin, e o que você pode fazer com ele depois de ter sido criado. Primeiro vá para o diretório de código fonte que você criou no tutorial [[catkin/Tutorials/create_a_workspace|Criando um espaço de trabalho catkin]]: {{{ # Você já deveria ter criado este diretório no tutorial anterior $ cd ~/catkin_ws/src }}} Agora use o script `catkin_create_pkg` para criar um novo pacote chamado `beginner_tutorials`, que depende de std_msgs, roscpp, e rospy: {{{ $ catkin_create_pkg beginner_tutorials std_msgs rospy roscpp }}} Isso vai criar uma pasta `beginner_tutorials` que contém os arquivos [[catkin/package.xml|package.xml]] e [[catkin/CMakeLists.txt|CMakeLists.txt]], que já foram parcialmente preenchidos com informações que você deu ao script `catkin_create_pkg`. `catkin_create_pkg` pede que você dê um `nome_do_pacote' e opcionalmente uma lista de dependências para o pacote: {{{ # Isso é um exemplo, não rode # catkin_create_pkg [depende1] [depende2] [depende3] }}} `catkin_create_pkg` também tem funcionalidades mais avançadas que são descritas em [[catkin/commands/catkin_create_pkg]]. == Compilando o espaço catkin e usando o arquivo de setup == Agora você precisa compilar os pacotes no espaço de trabalho catkin: {{{ $ cd ~/catkin_ws $ catkin_make }}} Depois do espaço ter sido compilado, ele criou uma estrutura similar na subpasta `devel`, como geralmente encontrado em `/opt/ros/$ROSDISTRO_NAME`. Para adicionar o espaço ao seu ambiente ROS você precisa "source" o arquivo setup gerado com o seguinte comando: {{{ $ . ~/catkin_ws/devel/setup.bash }}} == Dependências do pacote == === Dependências de primeira ordem === Quando usamos [[catkin/commands/catkin_create_pkg|catkin_create_pkg]] antes, algumas dependências foram fornecidas. Essas dependências de '''primeira ordem''' agora podem ser revisadas com a ferramenta {{{rospack}}}. {{{ $ rospack depends1 beginner_tutorials }}} . {{{ roscpp rospy std_msgs }}} Você pode ver que {{{rospack}}} lista as mesmas dependências que foram usadas como argumentos quando rodamos {{{catkin_create_pkg}}}. Essas dependências de pacote são guardadas no arquivo '''package.xml''': {{{ $ roscd beginner_tutorials $ cat package.xml }}} . {{{ ... catkin roscpp rospy std_msgs ... }}} === Dependências indiretas === Em muitos casos, uma dependência também vai ter suas próprias dependências. Por exemplo, `rospy` tem outras dependências. {{{ $ rospack depends1 rospy }}} . {{{ genpy roscpp rosgraph rosgraph_msgs roslib std_msgs }}} Um pacote pode ter várias dependências. Felizmente, {{{rospack}}} pode determinar recursivamente todas as dependências herdadas. {{{ $ rospack depends beginner_tutorials cpp_common rostime roscpp_traits roscpp_serialization catkin genmsg genpy message_runtime gencpp geneus gennodejs genlisp message_generation rosbuild rosconsole std_msgs rosgraph_msgs xmlrpcpp roscpp rosgraph ros_environment rospack roslib rospy }}} == Customizando seu pacote == Esta parte do tutorial vai examinar cada arquivo gerado por [[catkin/commands/catkin_create_pkg|catkin_create_pkg]] e descrever, linha por linha, cada componente desses arquivos e como customizá-los para seu pacote. === Customizando package.xml === O arquivo [[catkin/package.xml|package.xml]] gerado deve estar no seu novo pacote. Agora vamos ao novo [[catkin/package.xml|package.xml]] e modificar os elementos que precisam de sua atenção. ==== tag description ==== Primeiro, atualize a tag: <> Modifique a descrição para qualquer coisa que você goste, mas por convenção a primeira frase deve ser curta o bastante para abranger o escopo do pacote. Se for difícil descrever o pacote em uma simples frase então ela pode ser quebrada em mais frases. ==== tag maintainer ==== Em seguida, vem a tag maintainer: <> Essa é uma tag obrigatória e importante para o [[catkin/package.xml|package.xml]] porque ela permite que outras pessoas saibam com quem entrar em contato para saber mais sobre o pacote. Ao menos um mantenedor (''maintainer'') é necessário, mas se quiser você pode inserir quantos for necessário. O nome do mantenedor vai no corpo da tag, mas também tem um atributo de email que deve ser preenchido: <> ==== tag license ==== Próximo é a tag license, que também é obrigatória: <> Você deve escolher uma licença e inseri-la aqui. Algumas licenças comuns são BSD, MIT, Boost Software License, GPLv2, GPLv3, LGPLv2.1, and LGPLv3. Você pode ler sobre algumas delas em [[http://opensource.org/licenses/alphabetical|Open Source Initiative]]. Para este tutorial iremos usar a licença BSD porque o restante dos componentes do ROS já utiliza ela: <> ==== tags dependencies ==== O próximo conjunto de tags descreve as dependências do seu pacote. As dependências são dividas em `build_depend`, `buildtool_depend`, `exec_depend`, `test_depend`. Para uma explicação mais detalhadas destas tags, veja a documentação [[catkin/package.xml#Build.2C_Run.2C_and_Test_Dependencies|Dependências Catkin]]. Como passamos `std_msgs`, `roscpp`, and `rospy` como argumentos para [[catkin/commands/catkin_create_pkg|catkin_create_pkg]], as dependências terão essa aparência: <> Todas as nossas dependências listadas foram adicionadas como `build_depend`, além do padrão `buildtool_depend` para catkin. Nesse caso, queremos que todas as nossas dependências especificadas estejam disponíveis no tempo de compilação e execução, portanto adicionaremos a tag `exec_depend` para cada um delas também: <> ==== Final package.xml ==== Como você pode ver o [[catkin/package.xml|package.xml]] final, sem comentários e sem tags não utilizadas, é muito mais conciso: <> === Customizando o CMakeLists.txt === Agora que o [[catkin/package.xml|package.xml]], que contém meta-informação, foi adaptado para o seu pacote, você está pronto para seguir em frente nos tutoriais. O arquivo [[catkin/CMakeLists.txt|CMakeLists.txt]] criado no tutorial [[catkin/commands/catkin_create_pkg|catkin_create_pkg]] será abordado nos próximos tutoriais sobre compilação dos códigos do ROS.