Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Problem with multiple robots #53

Closed
Analtino2021 opened this issue Jan 21, 2022 · 9 comments
Closed

Problem with multiple robots #53

Analtino2021 opened this issue Jan 21, 2022 · 9 comments

Comments

@Analtino2021
Copy link

Analtino2021 commented Jan 21, 2022

Good morning teacher @miguelriemoliveira ,

I'm not beein able to change the color of the robot through the command line. even with the macro apparently working. It keeps giving me the Default color.
Thats my: Player.urdf.xacro

<?xml version="1.0" ?>
<robot name="p_amartinho" xmlns:xacro="http://ros.org/wiki/xacro">
  <!--  Xacro description of turtlebot robot waffle pi used to play team hunt.-->
  <!-- Analtino Martinho-->
  <!--  PSR, January 2021-->

  <!--Args are local, properties are global, so we copy the values of the arguments to the properties-->
  <xacro:arg name="player_name" default="p_amartinho" />
  <xacro:arg name="player_color" default="Yellow" /> <!-- e.g. Red, Orange. Must exist in Gazebo/Colors and be defined in properties.xacro.-->

  <!--Properties are global so they can be viewed from inside the included xacros-->
  <!--  args are used with $(arg arg_name), properties are used as ${property_name}-->
  <xacro:property name="player_name" value="$(arg player_name)"/>
  <xacro:property name="player_color" value="$(arg player_color)"/>

  <!-- Include other files-->
  <xacro:include filename="$(find ${player_name}_description)/urdf/properties.xacro"/>

  <!--  <xacro:include filename="$(find ${player_name}_description)/urdf/player.gazebo.xacro"/>-->
  <xacro:include filename="$(find ${player_name}_description)/urdf/player.gazebo.macro.xacro"/>
  <xacro:gazebo_macro player_color="${player_color}" laser_visual="true" camera_visual="false" imu_visual="true"/>

<!-- (...) -->
  <link name="base_footprint"/>

    <joint name="base_joint" type="fixed">
      <parent link="base_footprint"/>
      <child link="base_link" />
      <origin xyz="0 0 0.010" rpy="0 0 0"/>
    </joint>

    <link name="base_link">
      <visual>
        <origin xyz="-0.064 0 0.0" rpy="0 0 0"/>
        <geometry>
          <mesh filename="package://turtlebot3_description/meshes/bases/waffle_pi_base.stl" scale="0.001 0.001 0.001"/>
        </geometry>
        <material name="light_black"/>
      </visual>

      <collision>
        <origin xyz="-0.064 0 0.047" rpy="0 0 0"/>
        <geometry>
          <box size="0.266 0.266 0.094"/>
        </geometry>
      </collision>

      <inertial>
        <origin xyz="0 0 0" rpy="0 0 0"/>
        <mass value="1.3729096e+00"/>
        <inertia ixx="8.7002718e-03" ixy="-4.7576583e-05" ixz="1.1160499e-04"
                 iyy="8.6195418e-03" iyz="-3.5422299e-06"
                 izz="1.4612727e-02" />
      </inertial>
    </link>

    <joint name="wheel_left_joint" type="continuous">
      <parent link="base_link"/>
      <child link="wheel_left_link"/>
      <origin xyz="0.0 0.144 0.023" rpy="-1.57 0 0"/>
      <axis xyz="0 0 1"/>
    </joint>

    <link name="wheel_left_link">
      <visual>
        <origin xyz="0 0 0" rpy="1.57 0 0"/>
        <geometry>
          <mesh filename="package://turtlebot3_description/meshes/wheels/left_tire.stl" scale="0.001 0.001 0.001"/>
        </geometry>
        <material name="dark"/>
      </visual>

      <collision>
        <origin xyz="0 0 0" rpy="0 0 0"/>
        <geometry>
          <cylinder length="0.018" radius="0.033"/>
        </geometry>
      </collision>

      <inertial>
        <origin xyz="0 0 0" />
        <mass value="2.8498940e-02" />
        <inertia ixx="1.1175580e-05" ixy="-4.2369783e-11" ixz="-5.9381719e-09"
                 iyy="1.1192413e-05" iyz="-1.4400107e-11"
                 izz="2.0712558e-05" />
        </inertial>
    </link>

    <joint name="wheel_right_joint" type="continuous">
      <parent link="base_link"/>
      <child link="wheel_right_link"/>
      <origin xyz="0.0 -0.144 0.023" rpy="-1.57 0 0"/>
      <axis xyz="0 0 1"/>
    </joint>

    <link name="wheel_right_link">
      <visual>
        <origin xyz="0 0 0" rpy="1.57 0 0"/>
        <geometry>
          <mesh filename="package://turtlebot3_description/meshes/wheels/right_tire.stl" scale="0.001 0.001 0.001"/>
        </geometry>
        <material name="dark"/>
      </visual>

      <collision>
        <origin xyz="0 0 0" rpy="0 0 0"/>
        <geometry>
          <cylinder length="0.018" radius="0.033"/>
        </geometry>
      </collision>

      <inertial>
        <origin xyz="0 0 0" />
        <mass value="2.8498940e-02" />
        <inertia ixx="1.1175580e-05" ixy="-4.2369783e-11" ixz="-5.9381719e-09"
                 iyy="1.1192413e-05" iyz="-1.4400107e-11"
                 izz="2.0712558e-05" />
        </inertial>
    </link>

    <joint name="caster_back_right_joint" type="fixed">
      <parent link="base_link"/>
      <child link="caster_back_right_link"/>
      <origin xyz="-0.177 -0.064 -0.004" rpy="-1.57 0 0"/>
    </joint>

    <link name="caster_back_right_link">
      <collision>
        <origin xyz="0 0.001 0" rpy="0 0 0"/>
        <geometry>
          <box size="0.030 0.009 0.020"/>
        </geometry>
      </collision>

      <inertial>
        <origin xyz="0 0 0" />
        <mass value="0.005" />
        <inertia ixx="0.001" ixy="0.0" ixz="0.0"
                 iyy="0.001" iyz="0.0"
                 izz="0.001" />
      </inertial>
    </link>

    <joint name="caster_back_left_joint" type="fixed">
      <parent link="base_link"/>
      <child link="caster_back_left_link"/>
      <origin xyz="-0.177 0.064 -0.004" rpy="-1.57 0 0"/>
    </joint>

    <link name="caster_back_left_link">
      <collision>
        <origin xyz="0 0.001 0" rpy="0 0 0"/>
        <geometry>
          <box size="0.030 0.009 0.020"/>
        </geometry>
      </collision>

      <inertial>
        <origin xyz="0 0 0" />
        <mass value="0.005" />
        <inertia ixx="0.001" ixy="0.0" ixz="0.0"
                 iyy="0.001" iyz="0.0"
                 izz="0.001" />
      </inertial>
    </link>

    <joint name="imu_joint" type="fixed">
      <parent link="base_link"/>
      <child link="imu_link"/>
      <origin xyz="0.0 0 0.068" rpy="0 0 0"/>
    </joint>

    <link name="imu_link"/>

    <joint name="scan_joint" type="fixed">
      <parent link="base_link"/>
      <child link="base_scan"/>
      <origin xyz="-0.064 0 0.122" rpy="0 0 0"/>
    </joint>

    <link name="base_scan">
      <visual>
        <origin xyz="0 0 0.0" rpy="0 0 0"/>
        <geometry>
          <mesh filename="package://turtlebot3_description/meshes/sensors/lds.stl" scale="0.001 0.001 0.001"/>
        </geometry>
        <material name="dark"/>
      </visual>

      <collision>
        <origin xyz="0.015 0 -0.0065" rpy="0 0 0"/>
        <geometry>
          <cylinder length="0.0315" radius="0.055"/>
        </geometry>
      </collision>

      <inertial>
        <mass value="0.114" />
        <origin xyz="0 0 0" />
        <inertia ixx="0.001" ixy="0.0" ixz="0.0"
                 iyy="0.001" iyz="0.0"
                 izz="0.001" />
      </inertial>
    </link>

    <joint name="camera_joint" type="fixed">
      <origin xyz="0.073 -0.011 0.084" rpy="0 0 0"/>
      <parent link="base_link"/>
      <child link="camera_link"/>
    </joint>

    <link name="camera_link">
      <collision>
        <origin xyz="0.005 0.011 0.013" rpy="0 0 0"/>
        <geometry>
          <box size="0.015 0.030 0.027"/>
        </geometry>
      </collision>
    </link>

    <joint name="camera_rgb_joint" type="fixed">
      <origin xyz="0.003 0.011 0.009" rpy="0 0 0"/>
      <parent link="camera_link"/>
      <child link="camera_rgb_frame"/>
    </joint>
    <link name="camera_rgb_frame"/>

    <joint name="camera_rgb_optical_joint" type="fixed">
      <origin xyz="0 0 0" rpy="-1.57 0 -1.57"/>
      <parent link="camera_rgb_frame"/>
      <child link="camera_rgb_optical_frame"/>
    </joint>
    <link name="camera_rgb_optical_frame"/>


</robot>

Thats my: player.gazebo.macro.xacro

<?xml version="1.0" ?>
<robot name="p_amartinho" xmlns:xacro="http://ros.org/wiki/xacro">
<!-- <xacro:macro name="gazebo_macro" params="player_color laser_visual camera_visual imu_visual">-->

    <xacro:arg name="laser_visual"  default="false"/>
    <xacro:arg name="camera_visual" default="false"/>
    <xacro:arg name="imu_visual"    default="false"/>

    <gazebo reference="base_link">
      <material>Gazebo/DarkGrey</material>
    </gazebo>

    <gazebo reference="wheel_left_link">
      <mu1>0.1</mu1>
      <mu2>0.1</mu2>
      <kp>500000.0</kp>
      <kd>10.0</kd>
      <minDepth>0.001</minDepth>
      <maxVel>0.1</maxVel>
      <fdir1>1 0 0</fdir1>
      <material>Gazebo/${player_color}</material>
    </gazebo>

    <gazebo reference="wheel_right_link">
      <mu1>0.1</mu1>
      <mu2>0.1</mu2>
      <kp>500000.0</kp>
      <kd>10.0</kd>
      <minDepth>0.001</minDepth>
      <maxVel>0.1</maxVel>
      <fdir1>1 0 0</fdir1>
      <material>Gazebo/${player_color}</material>
    </gazebo>

    <gazebo reference="caster_back_right_link">
      <mu1>0.1</mu1>
      <mu2>0.1</mu2>
      <kp>1000000.0</kp>
      <kd>100.0</kd>
      <minDepth>0.001</minDepth>
      <maxVel>1.0</maxVel>
      <material>Gazebo/FlatBlack</material>
    </gazebo>

    <gazebo reference="caster_back_left_link">
      <mu1>0.1</mu1>
      <mu2>0.1</mu2>
      <kp>1000000.0</kp>
      <kd>100.0</kd>
      <minDepth>0.001</minDepth>
      <maxVel>1.0</maxVel>
      <material>Gazebo/FlatBlack</material>
    </gazebo>

    <gazebo reference="imu_link">
      <sensor type="imu" name="imu">
        <always_on>true</always_on>
        <visualize>$(arg imu_visual)</visualize>
      </sensor>
      <material>Gazebo/Grey</material>
    </gazebo>

    <gazebo>
      <plugin name="turtlebot3_waffle_pi_controller" filename="libgazebo_ros_diff_drive.so">
        <commandTopic>cmd_vel</commandTopic>
        <odometryTopic>odom</odometryTopic>
        <odometryFrame>odom</odometryFrame>
        <odometrySource>world</odometrySource>
        <publishOdomTF>true</publishOdomTF>
        <robotBaseFrame>base_footprint</robotBaseFrame>
        <publishWheelTF>false</publishWheelTF>
        <publishTf>true</publishTf>
        <publishWheelJointState>true</publishWheelJointState>
        <legacyMode>false</legacyMode>
        <updateRate>30</updateRate>
        <leftJoint>wheel_left_joint</leftJoint>
        <rightJoint>wheel_right_joint</rightJoint>
        <wheelSeparation>0.287</wheelSeparation>
        <wheelDiameter>0.066</wheelDiameter>
        <wheelAcceleration>1</wheelAcceleration>
        <wheelTorque>10</wheelTorque>
        <rosDebugLevel>na</rosDebugLevel>
      </plugin>
    </gazebo>

    <gazebo>
      <plugin name="imu_plugin" filename="libgazebo_ros_imu.so">
        <alwaysOn>true</alwaysOn>
        <bodyName>imu_link</bodyName>
        <frameName>imu_link</frameName>
        <topicName>imu</topicName>
        <serviceName>imu_service</serviceName>
        <gaussianNoise>0.0</gaussianNoise>
        <updateRate>0</updateRate>
        <imu>
          <noise>
            <type>gaussian</type>
            <rate>
              <mean>0.0</mean>
              <stddev>2e-4</stddev>
              <bias_mean>0.0000075</bias_mean>
              <bias_stddev>0.0000008</bias_stddev>
            </rate>
            <accel>
              <mean>0.0</mean>
              <stddev>1.7e-2</stddev>
              <bias_mean>0.1</bias_mean>
              <bias_stddev>0.001</bias_stddev>
            </accel>
          </noise>
        </imu>
      </plugin>
    </gazebo>

    <gazebo reference="base_scan">
      <material>Gazebo/${player_color}</material>
      <sensor type="ray" name="lds_lfcd_sensor">
        <pose>0 0 0 0 0 0</pose>
        <visualize>$(arg laser_visual)</visualize>
        <update_rate>5</update_rate>
        <ray>
          <scan>
            <horizontal>
              <samples>360</samples>
              <resolution>1</resolution>
              <min_angle>0.0</min_angle>
              <max_angle>6.28319</max_angle>
            </horizontal>
          </scan>
          <range>
            <min>0.120</min>
            <max>3.5</max>
            <resolution>0.015</resolution>
          </range>
          <noise>
            <type>gaussian</type>
            <mean>0.0</mean>
            <stddev>0.01</stddev>
          </noise>
        </ray>
        <plugin name="gazebo_ros_lds_lfcd_controller" filename="libgazebo_ros_laser.so">
          <topicName>scan</topicName>
          <frameName>base_scan</frameName>
        </plugin>
      </sensor>
    </gazebo>

  <!--link : https://www.raspberrypi.org/documentation/hardware/camera/-->
    <gazebo reference="camera_rgb_frame">
      <sensor type="camera" name="Pi Camera">
        <always_on>true</always_on>
        <visualize>$(arg camera_visual)</visualize>
        <camera>
            <horizontal_fov>2.085595</horizontal_fov>
            <image>
                <width>1200</width>
                <height>480</height>
                <format>R8G8B8</format>
            </image>
            <clip>
                <near>0.03</near>
                <far>100</far>
            </clip>
        </camera>
        <plugin name="camera_controller" filename="libgazebo_ros_camera.so">
          <alwaysOn>true</alwaysOn>
          <updateRate>30.0</updateRate>
          <cameraName>camera</cameraName>
          <frameName>camera_rgb_optical_frame</frameName>
          <imageTopicName>rgb/image_raw</imageTopicName>
          <cameraInfoTopicName>rgb/camera_info</cameraInfoTopicName>
          <hackBaseline>0.07</hackBaseline>
          <distortionK1>0.0</distortionK1>
          <distortionK2>0.0</distortionK2>
          <distortionK3>0.0</distortionK3>
          <distortionT1>0.0</distortionT1>
          <distortionT2>0.0</distortionT2>
        </plugin>
      </sensor>
    </gazebo>
<!-- </xacro:macro>-->
</robot>

and thats my : bringup_player.launch

<launch>
  <arg name="model" default="$(env TURTLEBOT3_MODEL)" doc="model type [burger, waffle, waffle_pi]"/>
  <arg name="player_name" default = "p_amartinho"/>
  <arg name="x_pos" default="0.0"/>
  <arg name="y_pos" default="-1.5"/>
  <arg name="z_pos" default="0.0"/>

  <group ns= "$(arg player_name)">
      <param name="tf_prefix" value="$(arg player_name)"></param>
      <param name="robot_description" command="$(find xacro)/xacro --inorder $(find p_amartinho_description)/urdf/player.urdf.xacro" />

      <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher"/>
  </group>
<!--   include do spawn.launch -->
  <include file="$(find p_amartinho_bringup)/launch/spawn.launch">
    <arg name="player_name" value="$(arg player_name)"/>
    <arg name="x_pos" value="$(arg x_pos)"/>
    <arg name="y_pos" value="$(arg y_pos)"/>
    <arg name="z_pos" value="$(arg z_pos)"/>
  </include>

<!--       include do visualize.launch -->
    <include file="$(find p_amartinho_bringup)/launch/visualize.launch">
    </include>

    <!--     include do teleop.launch -->
<!--     <group ns= "$(arg player_name)"> -->
<!--         <node pkg="rqt_robot_steering" type="rqt_robot_steering" name="teleop_rqt" output="screem"> -->
<!--             <param name="default_topic" value="/$(arg player_name)/cmd.vel"></param> -->
<!--         </node> -->

<!--     </group> -->
</launch>

and I'm launching that way:

roslaunch p_amartinho_bringup bringup_player.launch player_color:=red

the result is:

Captura de ecrã de 2022-01-21 09-25-39

@danifpdra
Copy link
Collaborator

Hi @Analtino2021 ,

Did you try it with
roslaunch p_amartinho_bringup bringup_player.launch player_color:="Red"

@Analtino2021
Copy link
Author

Hi @danifpdra
No.
Let me try

@Analtino2021
Copy link
Author

The result was the same

@danifpdra
Copy link
Collaborator

You don't have the player_color in the bringup.launch, that's the problem. It must be an argument in the robot_description

@Analtino2021
Copy link
Author

Thanks @danifpdra,
I did
but it still dont work.

<launch>
  <arg name="model" default="$(env TURTLEBOT3_MODEL)" doc="model type [burger, waffle, waffle_pi]"/>
  <arg name="player_name" default = "p_amartinho"/>
  <arg name="player_color" default="Yellow" />
  <arg name="x_pos" default="0.0"/>
  <arg name="y_pos" default="-1.5"/>
  <arg name="z_pos" default="0.0"/>

  <group ns= "$(arg player_name)">
      <param name="tf_prefix" value="$(arg player_name)"></param>
      <param name="robot_description" command="$(find xacro)/xacro --inorder $(find p_amartinho_description)/urdf/player.urdf.xacro" />

      <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher"/>
  </group>
<!--   include do spawn.launch -->
  <include file="$(find p_amartinho_bringup)/launch/spawn.launch">
    <arg name="player_name" value="$(arg player_name)"/>
    <arg name="player_color" value="$(arg player_color)"/>
    <arg name="x_pos" value="$(arg x_pos)"/>
    <arg name="y_pos" value="$(arg y_pos)"/>
    <arg name="z_pos" value="$(arg z_pos)"/>
  </include>

<!--       include do visualize.launch -->
    <include file="$(find p_amartinho_bringup)/launch/visualize.launch">
    </include>

    <!--     include do teleop.launch -->
<!--     <group ns= "$(arg player_name)"> -->
<!--         <node pkg="rqt_robot_steering" type="rqt_robot_steering" name="teleop_rqt" output="screem"> -->
<!--             <param name="default_topic" value="/$(arg player_name)/cmd.vel"></param> -->
<!--         </node> -->

<!--     </group> -->
</launch>

do I have do do a remap on my bringup??

@danifpdra
Copy link
Collaborator

No, you have to add it to the robot description:

<param name="robot_description" command="$(find xacro)/xacro --inorder $(find p_amartinho_description)/urdf/player.urdf.xacro" player_color:=$(arg player_color)"/

@Analtino2021
Copy link
Author

Gives me an error of sintax
Captura de ecrã de 2022-01-21 10-37-57

but here its al fine:

<launch>
  <arg name="model" default="$(env TURTLEBOT3_MODEL)" doc="model type [burger, waffle, waffle_pi]"/>
  <arg name="player_name" default = "p_amartinho"/>
  <arg name="player_color" default="Yellow" />
  <arg name="x_pos" default="0.0"/>
  <arg name="y_pos" default="-1.5"/>
  <arg name="z_pos" default="0.0"/>

  <group ns= "$(arg player_name)">
      <param name="tf_prefix" value="$(arg player_name)"></param>
      <param name="robot_description" command="$(find xacro)/xacro --inorder $(find p_amartinho_description)/urdf/player.urdf.xacro" player_color:="$(arg player_color)" />

      <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher"/>
  </group>
<!--   include do spawn.launch -->
  <include file="$(find p_amartinho_bringup)/launch/spawn.launch">
    <arg name="player_name" value="$(arg player_name)"/>
    <arg name="x_pos" value="$(arg x_pos)"/>
    <arg name="y_pos" value="$(arg y_pos)"/>
    <arg name="z_pos" value="$(arg z_pos)"/>
  </include>

<!--       include do visualize.launch -->
    <include file="$(find p_amartinho_bringup)/launch/visualize.launch">
    </include>

    <!--     include do teleop.launch -->
<!--     <group ns= "$(arg player_name)"> -->
<!--         <node pkg="rqt_robot_steering" type="rqt_robot_steering" name="teleop_rqt" output="screem"> -->
<!--             <param name="default_topic" value="/$(arg player_name)/cmd.vel"></param> -->
<!--         </node> -->

<!--     </group> -->
</launch>

@danifpdra
Copy link
Collaborator

sorry, it's

<param name="robot_description" command="$(find xacro)/xacro --inorder '$(find p_amartinho_description)/urdf/player.urdf.xacro' player_color:=$(arg player_color)"/>

@Analtino2021
Copy link
Author

Thanks @danifpdra
it workd

Captura de ecrã de 2022-01-21 10-45-28

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants