Pular para o conteúdo principal

Guia de Integração do reBot Arm B601-DM com ROS2

reBot Arm B601-DM

License: MITROS2 Humble | JazzyPython VersionVersion v0.2.2PlatformHardware

ROS2 Control · Controle da Garra · Interface de Trajetória Padrão · Compensação de Gravidade · Visualização no RViz · Totalmente Open Source

Este tutorial mostra como executar o workspace de controle ROS2 rebotarm_ros2 para o reBot Arm B601-DM. O workspace encapsula o SDK Python de baixo nível reBotArm_control_py em tópicos, serviços e ações ROS2, facilitando a integração com planejamento de alto nível, preensão visual, visualização no RViz e desenvolvimento de aplicações personalizadas.

nota

Este tutorial usa Ubuntu 24.04 + ROS2 Jazzy + Python 3.12 como ambiente de referência principal. ROS2 Humble / Ubuntu 22.04 podem seguir o mesmo fluxo de trabalho com a distribuição ROS2 correspondente.

Funcionalidades do Projeto

  1. Interfaces ROS2 Padrão
    Fornece interfaces ROS2 comuns como /joint_states, FollowJointTrajectory, GripperCommand e MoveToPose, facilitando a integração com MoveIt2, pipelines de preensão visual ou sistemas em nível de tarefa.

  2. Nós Prontos para Uso de Cinemática, Trajetória e Compensação de Gravidade
    Fornece nós prontos para uso de cinemática direta/inversa, execução de trajetória, compensação de gravidade e suporte à visualização no RViz.

  3. Integração com MoveIt 2
    Inclui configuração completa do MoveIt 2 e demos de aplicação, suportando o plugin MotionPlanning do RViz para planejamento simulado e execução em hardware real.

Especificações

O hardware para este tutorial é fornecido pela Seeed Studio.

ParâmetroEspecificação
Modelo do Braço RobóticoreBot Arm B601-DM
Graus de Liberdade6-DOF + Garra
Versão do MotorVersão do motor DAMIAO
ComunicaçãoBarramento CAN via bridge serial USB2CAN
Porta Serial Padrão/dev/ttyACM0
Sistema RecomendadoUbuntu 24.04 + ROS2 Jazzy + Python 3.12
Sistema de ReferênciaUbuntu 22.04 + ROS2 Humble + Python 3.10

Lista de Materiais (BOM)

ComponenteQuantidadeIncluído
Braço Robótico reBot Arm B601-DM1
Garra1
Bridge Serial USB2CAN1
Adaptador de Energia (24V)1
Cabo USB-C / Comunicação1
PC Host com Ubuntu1Preparado pelo usuário

Fiação

  1. Conecte a bridge serial USB2CAN ao barramento CAN do braço robótico.
  2. Conecte a fonte de alimentação de 24V e conecte o adaptador USB2CAN ao PC host.
  3. Confirme que o host reconhece o dispositivo serial:
ls /dev/ttyACM*

Se você precisar conceder permissão de porta serial temporariamente:

sudo chmod 666 /dev/ttyACM0

É recomendável adicionar o usuário atual ao grupo dialout em vez disso. Faça logout e login novamente para que a alteração tenha efeito:

sudo usermod -a -G dialout $USER

Requisitos de Ambiente

ItemRequisito Recomendado
Sistema OperacionalUbuntu 24.04, Ubuntu 22.04 pode ser usado como referência
ROS2Jazzy, Humble pode ser usado como referência
PythonPython do sistema. Jazzy geralmente usa 3.12, enquanto Humble geralmente usa 3.10

Etapas de Instalação

Etapa 0. Concluir a Configuração Básica do Braço Robótico

Antes de iniciar a integração com ROS2, conclua o Guia de Introdução ao reBot Arm B601-DM, incluindo montagem, configuração de ID dos motores, inicialização da posição zero e verificação básica de conectividade.

Etapa 1. Instalar a Versão do ROS2 para o Seu Sistema Ubuntu

Consulte a documentação oficial do ROS2:

Etapa 2. Instalar Ferramentas de Build e Dependências do ROS

Instale colcon, pip, Git e os pacotes ROS exigidos por este workspace:

sudo apt update
sudo apt install -y python3-colcon-common-extensions python3-pip git
sudo apt install -y \
ros-jazzy-control-msgs \
ros-jazzy-trajectory-msgs \
ros-jazzy-tf-transformations \
ros-jazzy-robot-state-publisher \
ros-jazzy-rviz2 \
ros-jazzy-pinocchio

Verifique a instalação:

source /opt/ros/jazzy/setup.bash
python3 -c "import pinocchio; print('pinocchio', pinocchio.__version__)"

Se você usar ROS2 Humble, substitua os nomes de pacotes ros-jazzy-* por ros-humble-* e faça source em /opt/ros/humble/setup.bash.

Etapa 3. Clonar o Repositório de Código

Use por padrão o repositório oficial Seeed-Projects:

git clone https://github.com/Seeed-Projects/reBotArmController_ROS2.git rebotarm_ros2
cd rebotarm_ros2

Você também pode usar o repositório de desenvolvimento atual:

git clone https://github.com/EclipseaHime017/reBotArmController_ROS2.git rebotarm_ros2
cd rebotarm_ros2

Etapa 4. Instalar o motorbridge

Instale motorbridge a partir da fonte oficial do PyPI:

python3 -m pip install --user --break-system-packages --index-url https://pypi.org/simple motorbridge

Etapa 5. Obter o SDK de Baixo Nível

mkdir -p third_party
git clone https://github.com/vectorBH6/reBotArm_control_py.git third_party/reBotArm_control_py

Etapa 6. Compilar o Workspace

source /opt/ros/jazzy/setup.bash
colcon build --symlink-install
source install/setup.bash

Verifique as entradas executáveis:

ros2 pkg executables rebotarmcontroller

As entradas esperadas incluem:

rebotarmcontroller reBotArmController
rebotarmcontroller GravityCompensation
rebotarmcontroller GripperControl
rebotarmcontroller MoveTo
rebotarmcontroller MoveToPose

Início Rápido

Antes de usar o robô, observe o seguinte: O controlador do braço possui um alto grau de liberdade. Antes de habilitar o controlador ou energizar o braço, certifique-se de que a área de trabalho esteja livre de pessoas e obstáculos. Revise cuidadosamente cada comando de movimento para evitar acidentes. Operações perigosas são estritamente proibidas; você é responsável por quaisquer consequências.

Iniciar o Sistema Completo

O bringup completo inicia:

  • Nó de controle reBotArmController
  • robot_state_publisher
  • RViz opcional
cd ~/seeed/rebotarm_ros2
source /opt/ros/jazzy/setup.bash
source install/setup.bash
ros2 launch rebotarm_bringup bringup.launch.py channel:=/dev/ttyACM0

Se a sua porta serial não for /dev/ttyACM0, substitua-a pelo nome real do dispositivo:

ros2 launch rebotarm_bringup bringup.launch.py channel:=/dev/ttyACM1

Iniciar a Visualização no RViz

ros2 launch rebotarm_bringup bringup.launch.py channel:=/dev/ttyACM0 use_rviz:=true

Se o modelo parecer muito pequeno no RViz, ajuste a visualização no painel Views à esquerda:

  • Defina Target Frame como base_link
  • Ajuste Distance, por exemplo para 1.0 ou 1.5
  • Use a roda do mouse para dar zoom
  • Confirme que Fixed Frame está definido como base_link

Iniciar Apenas o Nó de Controle

Se URDF e RViz não forem necessários:

ros2 launch rebotarm_bringup driver_only.launch.py channel:=/dev/ttyACM0

Você também pode executar o nó diretamente:

ros2 run rebotarmcontroller reBotArmController

Namespace ROS2

O namespace padrão é:

/rebotarm

Portanto, todos os tópicos, serviços e ações são prefixados com /rebotarm, por exemplo:

/rebotarm/joint_states
/rebotarm/enable
/rebotarm/move_to_pose

Se você precisar de múltiplos braços robóticos ou quiser executar em paralelo com outros sistemas ROS2, pode alterar o namespace em tempo de lançamento:

ros2 launch rebotarm_bringup bringup.launch.py arm_namespace:=left_arm

Nesse caso, /rebotarm/joint_states se torna /left_arm/joint_states. O namespace afeta apenas os nomes de tópicos, serviços e ações no grafo ROS. Ele não altera automaticamente os nomes dos frames TF no URDF.

APIs Comuns

Tópicos de Status

APITipoDescrição
/rebotarm/joint_statessensor_msgs/msg/JointStatePosições, velocidades e esforços das juntas de 6 eixos
/rebotarm/arm_statusrebotarm_msgs/msg/ArmStatusModo de controle, estado de habilitação, máquina de estados e códigos de erro
/rebotarm/joints/<joint>/staterebotarm_msgs/msg/JointMotorStateEstado do motor de uma única junta
/rebotarm/gripper/staterebotarm_msgs/msg/JointMotorStateEstado do motor da garra

Exemplos:

ros2 topic echo /rebotarm/joint_states --once
ros2 topic echo /rebotarm/arm_status --once

Serviços

APITipoDescrição
/rebotarm/enablestd_srvs/srv/TriggerHabilitar o braço robótico
/rebotarm/disablestd_srvs/srv/TriggerDesabilitar o braço robótico
/rebotarm/safe_homestd_srvs/srv/TriggerVoltar para a posição inicial segura
/rebotarm/set_moderebotarm_msgs/srv/SetModeAlternar entre mit, pos_vel e vel
/rebotarm/set_zerorebotarm_msgs/srv/SetZeroDefinir posição zero para todas as juntas ou para uma única junta
/rebotarm/move_to_pose_ikrebotarm_msgs/srv/MoveToPoseIKPré-verificação de IK e solução de juntas alvo
/rebotarm/gripper/setrebotarm_msgs/srv/SetGripperDefinir a posição do motor da garra em rad
/rebotarm/gravity_compensation/startstd_srvs/srv/TriggerIniciar compensação de gravidade
/rebotarm/gravity_compensation/stopstd_srvs/srv/TriggerParar compensação de gravidade

Ações

APITipoDescrição
/rebotarm/move_to_poserebotarm_msgs/action/MoveToPoseMovimento de pose do efetuador final
/rebotarm/follow_joint_trajectorycontrol_msgs/action/FollowJointTrajectoryPonto de entrada padrão compatível com trajetória de juntas
/rebotarm/gripper/commandcontrol_msgs/action/GripperCommandAção padrão de garra

Exemplos de Controle Básico

1. Habilitar o Braço Robótico

ros2 service call /rebotarm/enable std_srvs/srv/Trigger

2. Mover para uma Pose do Efetuador Final

ros2 action send_goal /rebotarm/move_to_pose rebotarm_msgs/action/MoveToPose \
"{target_pose: {position: {x: 0.30, y: 0.0, z: 0.30}, orientation: {x: 0.0, y: 0.0, z: 0.0, w: 1.0}}, duration: 2.0}"

3. Enviar um Alvo de Junta

ros2 action send_goal /rebotarm/follow_joint_trajectory \
control_msgs/action/FollowJointTrajectory \
"{trajectory: {joint_names: ['joint1','joint2','joint3','joint4','joint5','joint6'],
points: [{positions: [0.1,0,0,0,0,0], time_from_start: {sec: 5}}]}}"

4. Posição Inicial Segura e Desabilitar

ros2 service call /rebotarm/safe_home std_srvs/srv/Trigger
ros2 service call /rebotarm/disable std_srvs/srv/Trigger

Exemplos de Demonstração

Todos os exemplos assumem que reBotArmController já está em execução:

cd ~/seeed/rebotarm_ros2
source /opt/ros/jazzy/setup.bash
source install/setup.bash
ros2 launch rebotarm_bringup bringup.launch.py channel:=/dev/ttyACM0

Exemplo de Movimento de Juntas

Controle todas as 6 juntas de uma vez. A unidade é rad:

ros2 run rebotarmcontroller MoveTo -- \
0.20 -0.20 -0.20 -0.20 0.10 -0.10 \
--duration 8.0

Controle apenas uma junta:

ros2 run rebotarmcontroller MoveTo -- --joint joint3 --position -0.20 --duration 5.0

Exemplo de Pose do Efetuador Final

ros2 run rebotarmcontroller MoveToPose -- --x 0.30 --y 0.0 --z 0.30 --qw 1.0 --duration 2.0

Exemplo de Compensação de Gravidade

ros2 run rebotarmcontroller GravityCompensation

O script primeiro chama /rebotarm/enable, depois inicia a compensação de gravidade. Quando você pressionar Ctrl+C, o script chama os seguintes serviços na ordem:

  1. /rebotarm/gravity_compensation/stop
  2. /rebotarm/safe_home
  3. /rebotarm/disable

Isso interrompe primeiro a compensação de gravidade, depois move o braço de volta para a posição inicial segura e o desabilita.

Você também pode chamar os serviços manualmente:

ros2 service call /rebotarm/enable std_srvs/srv/Trigger
ros2 service call /rebotarm/gravity_compensation/start std_srvs/srv/Trigger
ros2 service call /rebotarm/gravity_compensation/stop std_srvs/srv/Trigger
ros2 service call /rebotarm/safe_home std_srvs/srv/Trigger
ros2 service call /rebotarm/disable std_srvs/srv/Trigger

Exemplo de Garra Interativa

ros2 run rebotarmcontroller GripperControl

Após iniciar, digite:

o / open    Open the gripper
c / close Close the gripper
q / quit Quit

Configuração

Os arquivos de configuração padrão estão localizados em:

src/rebotarm_bringup/config/
ArquivoDescrição
arm.yamlID do motor, feedback e parâmetros de controle para as 6 juntas do braço
gripper.yamlID do motor da garra, ID de feedback, fornecedor e parâmetros de controle
driver_params.yamlExemplos de parâmetros ROS

Parâmetros comuns de launch:

ParâmetroPadrãoDescrição
arm_configarm.yaml embutido do bringupCaminho da configuração do braço
gripper_configgripper.yaml embutido do bringupCaminho da configuração da garra
channelString vaziaUsar YAML por padrão. Sobrescreve a porta serial quando não estiver vazia
joint_state_rate100.0Taxa de publicação de /rebotarm/joint_states
cmd_arbitrationrejectArbitragem de comandos de baixo nível durante a execução da trajetória do braço. reject ou preempt; comandos de baixo nível da garra não preemptam trajetórias do braço
arm_namespacerebotarmPrefixo de namespace ROS
frame_idbase_linkQuadro base do braço robótico
ee_frame_idend_linkQuadro do efetuador final
use_rvizfalseSe deve iniciar o RViz

Tópicos de Comando de Baixo Nível

O workspace ROS2 também fornece tópicos de depuração de motor de baixo nível:

APITipoDescrição
/rebotarm/joints/<joint>/cmd/mitrebotarm_msgs/msg/JointMitCmdComando bruto MIT de junta única
/rebotarm/joints/<joint>/cmd/pos_velrebotarm_msgs/msg/JointPosVelCmdComando bruto de posição-velocidade de junta única
/rebotarm/joints/<joint>/cmd/velrebotarm_msgs/msg/JointVelCmdComando bruto de velocidade de junta única
/rebotarm/gripper/cmd/mitrebotarm_msgs/msg/JointMitCmdComando bruto MIT da garra
/rebotarm/gripper/cmd/pos_velrebotarm_msgs/msg/JointPosVelCmdComando bruto de posição-velocidade da garra
/rebotarm/gripper/cmd/velrebotarm_msgs/msg/JointVelCmdComando bruto de velocidade da garra
cuidado

Os tópicos de comando de baixo nível são destinados a depuração e experimentos. Eles não executam IK, planejamento de trajetória ou verificações de limites de URDF. Para movimento em nível de aplicação, prefira serviços e ações como /move_to_pose, /follow_joint_trajectory e /gripper/set.

MoveIt 2

MoveIt 2 é o framework de planejamento de movimento usado aqui para cinemática inversa, verificação de colisão, planejamento de trajetória e execução. As demos são separadas em seu próprio pacote para que os fluxos de aplicação permaneçam isolados do driver base. Para mais detalhes, consulte a Documentação oficial do MoveIt 2.

O conteúdo relacionado ao MoveIt é dividido em dois pacotes:

PacoteFinalidade
rebotarm_moveit_configModelo do robô, SRDF, cinemática, limites de juntas, controlador e configuração do RViz
rebotarm_moveit_demosDemos de aplicação baseadas em MoveIt 2

O ambiente MoveIt usa hardware simulado através de ros2_control e move_group para planejamento e execução. Ele é destinado a validar o modelo, IK, planejamento de trajetória e fluxo de demonstração no RViz.

Este repositório também oferece suporte a hardware real. Antes de conectar o hardware real, certifique-se de que a configuração zero do braço, direções das juntas, limites das juntas, limites de velocidade e faixa da garra estejam todos corretos, ou mantenha a configuração padrão do repositório.

Configuração do Ambiente MoveIt

Primeiro, certifique-se de que o ambiente ROS2 esteja disponível. Você pode instalar pacotes para a distribuição ROS atualmente carregada através de ROS_DISTRO:

sudo apt update
sudo apt install -y \
ros-${ROS_DISTRO}-moveit \
ros-${ROS_DISTRO}-moveit-configs-utils \
ros-${ROS_DISTRO}-ros2-control \
ros-${ROS_DISTRO}-ros2-controllers \
ros-${ROS_DISTRO}-xacro

A configuração e as demos do MoveIt estão incluídas neste workspace. Após instalar as dependências, reconstrua o workspace:

cd your/path/to/rebotarm_ros2
colcon build --symlink-install
source install/setup.bash

Verifique os pacotes MoveIt e os pontos de entrada das demos:

ros2 pkg list | grep rebotarm_moveit
ros2 pkg executables rebotarm_moveit_demos

As entradas esperadas incluem:

rebotarm_moveit_demos draw_square
rebotarm_moveit_demos pick_place

Usar o MoveIt

O planejamento com MoveIt pode ser usado através da interface gráfica do RViz ou através de nós ROS, tanto em simulação quanto em cenas reais.

Usar o MoveIt em simulação

O MoveIt usa a interface de hardware virtual do ros2_control para simulação no RViz:

cd your/path/to/rebotarm_ros2
source install/setup.bash
ros2 launch rebotarm_moveit_config demo.launch.py

Por padrão, isso inicia:

  • move_group
  • robot_state_publisher
  • ros2_control_node
  • joint_state_broadcaster
  • rebotarm_controller
  • gripper_controller
  • RViz com o plugin MoveIt MotionPlanning

O RViz é aberto automaticamente e carrega o modelo URDF do robô. Você pode controlar o movimento através do painel no lado esquerdo da interface gráfica.

Para executar o ambiente MoveIt sem o RViz:

ros2 launch rebotarm_moveit_config demo.launch.py use_rviz:=false

Usar o MoveIt com o hardware reBotArm

Para o robô real, primeiro inicie o controlador com a interface de hardware em vez do controlador virtual, depois inicie o ambiente MoveIt para hardware:

ros2 launch rebotarm_bringup driver.launch.py channel:=/dev/ttyACM0

Em outro terminal:

cd your/path/to/rebotarm_ros2
source install/setup.bash
ros2 launch rebotarm_moveit_config hardware.launch.py

Reforçando: antes de executar qualquer demo em hardware real, certifique-se de que o workspace esteja livre de pessoas e obstáculos, verifique o caminho planejado no RViz e esteja pronto para parar o controlador a qualquer momento.

Executar a demo draw-square

Inicie primeiro o ambiente MoveIt, depois execute em outro terminal:

cd your/path/to/rebotarm_ros2
source install/setup.bash
ros2 launch rebotarm_moveit_demos draw_square.launch.py

draw_square move gripper_tcp pelos quatro cantos de um retângulo coplanar. Parâmetros padrão:

src/rebotarm_moveit_demos/config/draw_square.yaml

Parâmetros comuns:

ParâmetroDescrição
start_pointPosição de reset das juntas antes do início da demo
rectangle_centerCentro do retângulo em base_link
rectangle_width / rectangle_heightDimensões do retângulo em metros
tcp_rpyOrientação do TCP, com padrão de garra voltada para baixo
tcp_yaw_offsetsValores alternativos de yaw de IK usados para evitar grandes voltas da junta 6

Executar a demo pick-place

Inicie primeiro o ambiente MoveIt, depois execute em outro terminal:

cd your/path/to/rebotarm_ros2
source install/setup.bash
ros2 launch rebotarm_moveit_demos pick_place.launch.py

Parâmetros padrão:

src/rebotarm_moveit_demos/config/pick_place.yaml

Parâmetros comuns:

ParâmetroDescrição
ready_pointPosição de junta de prontidão usada antes e depois de pegar/colocar
pick_positionPosição inferior-central do objeto em base_link
pick_tcp_rpy / place_tcp_rpyOrientação do TCP para pegar e colocar
object_dimensionsDimensões do objeto na cena de planejamento em metros
max_gripper_widthAbertura total máxima da garra, padrão 0.09m
open_gripper_position / closed_gripper_positionPosições de abertura/fechamento da junta da garra de um lado, simulada
hardware_open_gripper_position / hardware_closed_gripper_positionPosições de abertura/fechamento do motor da garra em hardware
grasp_gripper_to_object_widthCalcula a posição de preensão a partir da largura do objeto

Arquivos de configuração do MoveIt

ArquivoDescrição
rebotarm_moveit_config/config/rebotarm.urdf.xacroModelo de robô usado pelo MoveIt
rebotarm_moveit_config/config/rebotarm.srdfGrupos do MoveIt, efetuador final e estados padrão
rebotarm_moveit_config/config/kinematics.yamlConfiguração do solucionador de IK
rebotarm_moveit_config/config/joint_limits.yamlLimites das juntas usados pelo planejamento do MoveIt
rebotarm_moveit_config/config/moveit_controllers.yamlConfiguração do controlador de execução de trajetórias do MoveIt
rebotarm_moveit_config/config/ros2_controllers.yamlConfiguração do controlador ros2_control
rebotarm_moveit_config/config/initial_positions.yamlPosições iniciais das juntas para hardware simulado
rebotarm_moveit_demos/config/draw_square.yamlParâmetros da demonstração de desenho de quadrado
rebotarm_moveit_demos/config/pick_place.yamlParâmetros da demonstração de pick and place

FAQ

1. open serial port /dev/ttyACM0 failed aparece na inicialização

Isso significa que a porta serial padrão não existe ou que o nome do dispositivo foi alterado. Primeiro verifique o dispositivo serial real:

ls /dev/ttyACM*

Em seguida, especifique-o com channel:

ros2 launch rebotarm_bringup bringup.launch.py channel:=/dev/ttyACM1

2. Device or resource busy aparece na inicialização

Isso significa que a porta serial já está ocupada por outro processo. Causas comuns incluem um nó ROS2 iniciado anteriormente, um exemplo do SDK ou um script de depuração que não foi encerrado. Verifique primeiro os processos:

ps aux | grep -E "reBotArmController|ros2|python"

Pare o processo que está ocupando a porta serial e reinicie. O braço e a garra devem compartilhar o mesmo controlador de baixo nível. Não abra a mesma porta serial separadamente para o braço e para a garra.

3. Permissão negada

Se o dispositivo serial existir, mas a permissão for negada:

sudo usermod -a -G dialout $USER

Saia da sessão e entre novamente para que a alteração tenha efeito. Para depuração temporária, você também pode executar:

sudo chmod 666 /dev/ttyACM0

4. O modelo do robô não é exibido no RViz

Verifique o seguinte:

  • Se o workspace foi carregado com: source install/setup.bash
  • Se Fixed Frame está definido como base_link
  • Se robot_state_publisher foi iniciado corretamente
  • Se o caminho da malha URDF é package://rebotarm_bringup/description/meshes/...

5. Aparece um aviso de porta FastDDS SHM

Se o terminal mostrar algo como:

[RTPS_TRANSPORT_SHM Error] Failed init_port fastrtps_port7002: open_and_lock_file failed

Isso geralmente é causado por arquivos de bloqueio de memória compartilhada do FastDDS remanescentes após um processo ROS2 anterior ter sido encerrado de forma anormal. Se serviços e ações ainda responderem normalmente, esse aviso geralmente não afeta o controle.

Para limpar isso, pare primeiro os processos ROS2 relacionados e então execute:

pkill -f ros2
pkill -f reBotArmController
rm -f /dev/shm/fastrtps_port*

Se você quiser ignorar temporariamente o transporte por memória compartilhada, defina o seguinte antes de iniciar o ROS2:

export FASTDDS_BUILTIN_TRANSPORTS=UDPv4

6. E se eu usar Humble?

Usuários do Humble podem seguir o mesmo fluxo de trabalho, substituir jazzy por humble nos comandos e instalar as dependências correspondentes de acordo com a documentação oficial do Humble. Após alternar as distribuições do ROS2, execute colcon build novamente.

7. pinocchio não pode ser encontrado

Se um nó ou comando de verificação relatar:

ModuleNotFoundError: No module named 'pinocchio'

Primeiro, certifique-se de que o pacote Pinocchio para a sua distribuição ROS2 esteja instalado:

sudo apt install -y ros-jazzy-pinocchio

Em seguida, certifique-se de que o terminal atual carregou o ambiente ROS2:

source /opt/ros/jazzy/setup.bash
python3 -c "import pinocchio; print(pinocchio.__version__)"

Se ainda assim não puder ser encontrado, verifique se o caminho de busca do Python atual contém o caminho do pacote Python do ROS2:

python3 -c "import sys; print('\n'.join(sys.path))"

Após carregar o Jazzy, você deverá ver um caminho semelhante a /opt/ros/jazzy/lib/python3.12/site-packages. Se você usar Humble, substitua jazzy por humble nos comandos.

Contato

Referências

Loading Comments...