2021-04-05
Antes de volta a trabalhar no ficheiro urdf com o modelo do robot de lagartas, fui, mais uma vez, ver se conseguia colocar o plugin phobos para o blender de modo a passar a usar a funcionalidade de import/export de urdfs no blender e desse modo usar o blender para desennhar os modelos urdf dos robots.
Mais uma vez não tive sucesso nessa instalação.
Entretanto consegui acabar o urdf do robot com lagartas á mão e ficou com o seguinte aspecto no rviz e no gazebo:
Existe uma pequena diferença relação ao modelo definido no sdf original, o angulo dos flippers face ao solo é menor (os flippers são as extremidades que existem anexas a cada lagarta)
Passado o problema da conversão do sdf para urdf, passei ao problema do controlo do movimento do robot, que gostava que fosse efectuado com base no seguinte plugin do gazebo (e a respectiva evocação no urdf):
libSimpleTrackedVehiclePlugin.so
<plugin filename=”libSimpleTrackedVehiclePlugin.so” name=”simple_tracked_vehicle”>
<body>base_link</body>
<left_track>left_track</left_track>
<right_track>right_track</right_track>
<left_flipper>front_left_flipper</left_flipper>
<left_flipper>rear_left_flipper</left_flipper>
<right_flipper>front_right_flipper</right_flipper>
<right_flipper>rear_right_flipper</right_flipper>
<track_mu>2</track_mu>
<track_mu2>0.5</track_mu2>
</plugin>
Mas o problema, á primeira vista é que este plugin não tem interface para topicos do ROS e aparenta ter como input o teclado via o seguinte plugin do gazebo (e a respectiva evocação no urdf):
libKeysToCmdVelPlugin.so
<gui>
<plugin name=”keyboard” filename=”libKeyboardGUIPlugin.so”/>
</gui>
<plugin filename=”libKeysToCmdVelPlugin.so” name=”keyboard_control”>
<publish_as_twist>true</publish_as_twist>
<cmd_vel_topic>~/simple_tracked/cmd_vel_twist</cmd_vel_topic>
</plugin>
Apesar da referência ao seguinte tópico do ros:
~/simple_tracked/cmd_vel_twist
não vejo qualquer referencia a esse topico com o rostopic list
/bot1/joint_states
/clock
/gazebo/link_states
/gazebo/model_states
/gazebo/parameter_descriptions
/gazebo/parameter_updates
/gazebo/set_link_state
/gazebo/set_model_state
/rosout
/rosout_agg
/tf
/tf_static
O codigo fonte dos gazebo plugins envolvidos estão disponíveis em:
https://github.com/osrf/gazebo/blob/gazebo11/plugins/KeyboardGUIPlugin.cc
https://github.com/osrf/gazebo/blob/gazebo11/plugins/KeysToCmdVelPlugin.cc
https://github.com/osrf/gazebo/blob/gazebo11/plugins/TrackedVehiclePlugin.cc
https://github.com/osrf/gazebo/blob/gazebo11/plugins/SimpleTrackedVehiclePlugin.cc
Compare gazebo plugins source
https://github.com/osrf/gazebo/blob/gazebo11/plugins/DiffDrivePlugin.cc
https://github.com/osrf/gazebo/blob/gazebo11/plugins/SkidSteerDrivePlugin.cc
Compare rROS gazebo plugins source
https://github.com/ros-simulation/gazebo_ros_pkgs/blob/noetic-devel/gazebo_plugins/src/gazebo_ros_diff_drive.cpp
https://github.com/ros-simulation/gazebo_ros_pkgs/blob/noetic-devel/gazebo_plugins/src/gazebo_ros_skid_steer_drive.cpp
Linux gazebo plugins lib files
/usr/lib/x86_64-linux-gnu/gazebo-11/plugins/libSimpleTrackedVehiclePlugin.so
/usr/lib/x86_64-linux-gnu/gazebo-11/plugins/libTrackedVehiclePlugin.so
/usr/lib/x86_64-linux-gnu/gazebo-11/plugins/libWheelTrackedVehiclePlugin.so
Desenvolver ros plugins para o gazebo
sudo apt install libgazebo11
sudo apt install libgazebo11-dev
http://gazebosim.org/tutorials?tut=ros_installing&cat=connect_ros
https://github.com/ros-simulation/gazebo_ros_pkgs
cd ~/catkin_ws/src
git clone https://github.com/ros-simulation/gazebo_ros_pkgs.git -b noetic-devel
www.theconstructsim.com/create-a-ros-sensor-plugin-for-gazebo/
Desenvolver plugins para o gazebo
http://gazebosim.org/tutorials?cat=write_plugin
http://gazebosim.org/tutorials?tut=plugins_model&cat=write_plugin
Other plugins sources
https://github.com/onlytailei/gym_ped_sim
https://github.com/wojiaojiao/pegasus_gazebo_plugins
Other robots
https://wiki.cogni.io/Simulation
2021-04-24
Já desde ontem que ando de volta da simulação do robot com lagartas, que vai ficar no seguinte repositório.
https://github.com/inaciose/sibottrkd_description
Alguns launch files
roslaunch sibottrkd_description spawn_bot.launch
roslaunch sibottrkd_description world_1bot.launch
roslaunch sibottrkd_description world.launch world:=tracked_vehicle_simple
Tenho estado a construir o modelo com base no modelo disponível no seguinte mundo (world file) do gazebo:
https://github.com/osrf/gazebo/blob/gazebo11/worlds/tracked_vehicle_simple.world
O modelo de robot de lagartas definido no mundo acima usa o seguinte plugin especifico para robots de lagartas (tracked robot):
libSimpleTrackedVehiclePlugin.so
Primeiro passei por um processo de conversão manual do sdf para urdf, no entanto o resultado não foi satisfatório. Todos os componentes do modelo ficaram colocados no eixo dos y, e as extremidades das lagartas também não ficaram bem posicionadas.
O modelo tal como está no mundo do gazebo em sdf tem o seguinte aspecto:
O aspecto original no rviz e no gazebo do modelo após o primeiro processo manual de conversão do sdf para urdf era o seguinte:
2021-04-22
sibotdiff_description & sibotdiff_bringup
Actualizei o sibotdiff_description da seguinte forma:
Removi os models antigos (robot01 e robot02) e respectivas pastas de includes, e copiei o model robot01 do multibot_description (e respectiva pasta de includes) para a para a pasta urdf do sibotdiff_description.
Na pasta launch do sibotdiff_bringup actualizei os ficheiros spawn_* e world_* para ficarem em linha com o existente no multibot_description.
Os modelos e ficheiros relacionados do sibotdiff_description vão ficar a ser desenvolvidos no multibot_description até ficarem estáveis e serem copiados para o sibotdiff_description.
multibot_description
Passando para o desenvolvimento no multibot_description o proximo passo é passar a usar macros e fazer com que a robot seja mais estavel (eventualmente pesado)
Sobre as propriedades fisicas seguem dois links importantes
http://wiki.ros.org/urdf/Tutorials/Adding%20Physical%20and%20Collision%20Properties%20to%20a%20URDF%20Model
<inertial>
<mass value=”10″/>
<inertia ixx=”0.4″ ixy=”0.0″ ixz=”0.0″ iyy=”0.4″ iyz=”0.0″ izz=”0.2″/>
</inertial>
<mass> (massa) em Kg
<inertia> Matriz de inercia. 3×3, só são necessárias as bolds.
Para mais informações sobre como calcular estes valores, ver:
https://en.wikipedia.org/wiki/List_of_moments_of_inertia#List_of_3D_inertia_tensors
Este tipo de cálculos (inertia) pode ser executado por macros.
rviz.launch melhorado para usar multiplas configurações
modelos robot00, e robot01, alterados para terem as rodas e o chassis com cores diferentes (a cor do chassis é escolhido num dos argumentos)
2021-04-21
multibot_description
Depois de ter conseguido por o multi robot a funcionar no sibot, decidi fazer um pacote especifico para servir como demo.
launch commands
roslaunch multibot_description world_1bot.launch
roslaunch multibot_description spawn_bot.launch ns:=sibot2 botcolor:=Blue x:=2
roslaunch multibot_description spawn_bot.launch ns:=sibot3 botcolor:=Red x:=3
roslaunch multibot_description world_2bot.launch
relativamente ao sibotdiff_description & bringup, removei o botname, e substitui pelo namespace onde ele era usado.
Consegui por o imu a funcionar.
Sibot, multi robot experiences
De volta da tentativa de colocar multiplos robots a funcionar correctamente no gazebo e no rviz.
Há três dias que ando de volta disto e ainda não consegui por as coisas a funcionar no rviz.
Creio que o problema esta no tf_prefix que deixou de funcionar, no ros noetic, mas não tenho a certeza.
No gazebo creio que não há problemas vejo a simulação a funcionar.
Tentativa 1
Hoje tentei a solução que está no primeiro link, o segundo link é para o pacote rosbot_description necessário para este teste
https://community.husarion.com/t/rviz-with-multiple-rosbots/792/4
https://github.com/husarion/rosbot_description
Também não funcionou.
Tentativa 2
Com base nos ficheiros xacro robot02 que tem o namespace tem todos os links e joints fiz as seguintes alterações:
Alterei ficheiro gazebo.diff_drive_controller.xacro, com base nas tags com a variável namespace disponíveis no ficheiro gazebo.xacro rosbot
Comentei as entradas do IMU.
E funcionou !
Tenho que fazer um pacote especifico para o multi robot.
roslaunch sibotdiff_bringup world_with_botns.launch model:=robot02
roslaunch sibotdiff_bringup spawn_botns.launch ns:=sibot1 botname:=bot1 botcolor:=Red x:=1
roslaunch sibotdiff_bringup spawn_botns.launch ns:=sibot2 botname:=bot2 botcolor:=Blue x:=2
aplicar xacro e converter xacro files para um urdf único
rosrun xacro xacro -o model.urdf robot02.urdf.xacro botname:=bot1 namespace:=bot1 botcolor:=Green
roslaunch sibotackm_bringup world_bot_twist.launch
Joystick para conduzir os robots no gazebo
Passar a usar o joystick em vez do rqt para conduzir o robot
As coisas não correram muito bem. O manipulo para andar nas diversas direcções não funciona bem para conduzir o carro.
Instalar
sudo apt-get install ros-melodic-joy
sudo apt install ros-noetic-teleop-twist-joy
Mais informação:
http://wiki.ros.org/teleop_twist_joy