<!--******************************************************************************
Twil 2D Navigation
Gazebo Launch File
- Copyright (C) 2019, 2022 Walter Fetter Lages <w.fetter@ieee.org>
+ Copyright (C) 2019..2024 Walter Fetter Lages <w.fetter@ieee.org>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
*******************************************************************************-->
<launch>
- <arg name="pause" default="true"/>
+ <arg name="pause" default="false"/>
<arg name="gui" default="true"/>
<arg name="use_sim_time" default="true"/>
<arg name="wam" default="false"/>
joint_state_broadcaster:
ros__parameters:
+ type: joint_state_broadcaster/JointStateBroadcaster
extra_joints:
- caster_wheel_joint
- caster_base_joint
dynamics_linearizing_controller:
ros__parameters:
+ type: effort_controllers/DynamicsLinearizingController
joints:
- left_wheel_joint
- right_wheel_joint
joint_state_broadcaster:
ros__parameters:
+ type: joint_state_broadcaster/JointStateBroadcaster
extra_joints:
- caster_wheel_joint
- caster_base_joint
left_wheel_joint_effort_controller:
ros__parameters:
+ type: forward_command_controller/ForwardCommandController
joints: [left_wheel_joint]
interface_name: effort
right_wheel_joint_effort_controller:
ros__parameters:
+ type: forward_command_controller/ForwardCommandController
joints: [right_wheel_joint]
interface_name: effort
joint_state_broadcaster:
ros__parameters:
+ type: joint_state_broadcaster/JointStateBroadcaster
extra_joints:
- caster_wheel_joint
- caster_base_joint
left_wheel_joint_velocity_controller:
ros__parameters:
+ type: effort_controllers/JointVelocityController
joint: left_wheel_joint
pid: {p: 0.0, i: 0.0, d: 0.0}
interface_name: effort
right_wheel_joint_velocity_controller:
ros__parameters:
+ type: effort_controllers/JointVelocityController
joint: right_wheel_joint
pid: {p: 0.0, i: 0.0, d: 0.0}
interface_name: effort
joint_state_broadcaster:
ros__parameters:
+ type: joint_state_broadcaster/JointStateBroadcaster
extra_joints:
- caster_wheel_joint
- caster_base_joint
nonsmooth_backstep_controller:
ros__parameters:
+ type: effort_controllers/NonSmoothBackstepController
joints:
- left_wheel_joint
- right_wheel_joint
joint_state_broadcaster:
ros__parameters:
+ type: joint_state_broadcaster/JointStateBroadcaster
extra_joints:
- caster_wheel_joint
- caster_base_joint
nonsmooth_backstep_controller:
ros__parameters:
+ type: effort_controllers/NonSmoothBackstepController
joints:
- left_wheel_joint
- right_wheel_joint
joint_state_broadcaster:
ros__parameters:
+ type: joint_state_broadcaster/JointStateBroadcaster
extra_joints:
- caster_wheel_joint
- caster_base_joint
twist_mrac_linearizing_controller:
ros__parameters:
+ type: effort_controllers/TwistMracLinearizingController
joints:
- left_wheel_joint
- right_wheel_joint
<arg name="config" default="$(find-pkg-share twil_bringup)/config/dynamics_linearizing_controller.yaml"/>
<node name="controller_spawner" pkg="controller_manager" exec="spawner"
- args="-t effort_controllers/DynamicsLinearizingController -p $(var config) dynamics_linearizing_controller"/>
+ args="-p $(var config) dynamics_linearizing_controller"/>
<node name="joint_state_broadcaster_spawner" pkg="controller_manager" exec="spawner"
- args="-t joint_state_broadcaster/JointStateBroadcaster -p $(var config) joint_state_broadcaster"/>
+ args="-p $(var config) joint_state_broadcaster"/>
</launch>
<arg name="use_sim_time" default="true"/>
<arg name="wam" default="false"/>
<arg name="gps" default="false"/>
- <arg name="world" default ="worlds/empty_sky.world"/>
+ <arg name="imu" default="false"/>
+ <arg name="world" default ="$(find-pkg-share ufrgs_gazebo)/worlds/empty_sky_porto_alegre.world"/>
<arg name="controller" default="joint_effort_controller"/>
<arg name="config" default="$(find-pkg-share twil_bringup)/config/$(var controller).yaml"/>
<arg name="use_sim_time" value="$(var use_sim_time)"/>
<arg name="wam" value="$(var wam)"/>
<arg name="gps" value="$(var gps)"/>
+ <arg name="imu" value="$(var imu)"/>
<arg name="world" value="$(var world)"/>
</include>
<arg name="use_sim_time" default="true"/>
<arg name="wam" default="false"/>
<arg name="gps" default="false"/>
+ <arg name="imu" default="false"/>
<arg name="world" default ="worlds/empty_sky.world"/>
<arg name="controller" default="nonsmooth_backstep_controller"/>
<arg name="use_sim_time" value="$(var use_sim_time)"/>
<arg name="wam" value="$(var wam)"/>
<arg name="gps" value="$(var gps)"/>
+ <arg name="imu" value="$(var imu)"/>
<arg name="world" value="$(var world)"/>
<arg name="controller" value="$(var controller)"/>
<arg name="config" value="$(var config)"/>
<arg name="config" default="$(find-pkg-share twil_bringup)/config/joint_effort_controller.yaml"/>
<node name="left_wheel_controller_spawner" pkg="controller_manager" exec="spawner"
- args="-t forward_command_controller/ForwardCommandController -p $(var config) left_wheel_joint_effort_controller"/>
+ args="-p $(var config) left_wheel_joint_effort_controller"/>
<node name="right_wheel_controller_spawner" pkg="controller_manager" exec="spawner"
- args="-t forward_command_controller/ForwardCommandController -p $(var config) right_wheel_joint_effort_controller"/>
+ args="-p $(var config) right_wheel_joint_effort_controller"/>
<node name="joint_state_broadcaster_spawner" pkg="controller_manager" exec="spawner"
- args="-t joint_state_broadcaster/JointStateBroadcaster -p $(var config) joint_state_broadcaster"/>
+ args="-p $(var config) joint_state_broadcaster"/>
</launch>
<arg name="config" default="$(find-pkg-share twil_bringup)/config/joint_velocity_controller.yaml"/>
<node name="left_wheel_controller_spawner" pkg="controller_manager" exec="spawner"
- args="-t effort_controllers/JointVelocityController -p $(var config) left_wheel_velocity_controller"/>
+ args="-p $(var config) left_wheel_velocity_controller"/>
<node name="right_wheel_controller_spawner" pkg="controller_manager" exec="spawner"
- args="-t effort_controllers/JointVelocityController -p $(var config) right_wheel_velocity_controller"/>
+ args="-p $(var config) right_wheel_velocity_controller"/>
<node name="joint_state_broadcaster_spawner" pkg="controller_manager" exec="spawner"
- args="-t joint_state_broadcaster/JointStateBroadcaster -p $(var config) joint_state_broadcaster"/>
+ args="-p $(var config) joint_state_broadcaster"/>
</launch>
<arg name="config" default="$(find-pkg-share twil_bringup)/config/nonsmooth_backstep_controller.yaml"/>
<node name="controller_spawner" pkg="controller_manager" exec="spawner"
- args="-t effort_controllers/NonSmoothBackstepController -p $(var config) nonsmooth_backstep_controller"/>
+ args="-p $(var config) nonsmooth_backstep_controller"/>
<node name="joint_state_broadcaster_spawner" pkg="controller_manager" exec="spawner"
- args="-t joint_state_broadcaster/JointStateBroadcaster -p $(var config) joint_state_broadcaster"/>
+ args="-p $(var config) joint_state_broadcaster"/>
</launch>
<arg name="config" default="$(find-pkg-share twil_bringup)/config/twist_mrac_linearizing_controller.yaml"/>
<node name="controller_spawner" pkg="controller_manager" exec="spawner"
- args="-t effort_controllers/TwistMracLinearizingController -p $(var config) twist_mrac_linearizing_controller"/>
+ args="-p $(var config) twist_mrac_linearizing_controller"/>
<node name="joint_state_broadcaster_spawner" pkg="controller_manager" exec="spawner"
- args="-t joint_state_broadcaster/JointStateBroadcaster -p $(var config) joint_state_broadcaster"/>
+ args="-p $(var config) joint_state_broadcaster"/>
</launch>
--- /dev/null
+- ros_topic_name: "/clock"
+ gz_topic_name: "/clock"
+ ros_type_name: "rosgraph_msgs/msg/Clock"
+ gz_type_name: "gz.msgs.Clock"
+# subscriber_queue: 5 # Default 10
+# publisher_queue: 6 # Default 10
+# lazy: true # Default "false"
+ direction: GZ_TO_ROS # Default "BIDIRECTIONAL" - Bridge both directions
+ # "GZ_TO_ROS" - Bridge Ignition topic to ROS
+ # "ROS_TO_GZ" - Bridge ROS topic to Ignition
+
+# nav_msgs/msg/Odometry has a covariance field. There is no motive to take
+# the version without covariance from Gazebo
+#- ros_topic_name: "/ground_truth"
+# gz_topic_name: "/model/twil/odometry"
+# ros_type_name: "nav_msgs/msg/Odometry"
+# gz_type_name: "gz.msgs.Odometry"
+# direction: GZ_TO_ROS
+
+- ros_topic_name: "/ground_truth"
+ gz_topic_name: "/model/twil/odometry_with_covariance"
+ ros_type_name: "nav_msgs/msg/Odometry"
+ gz_type_name: "gz.msgs.OdometryWithCovariance"
+ direction: GZ_TO_ROS
+
+- ros_topic_name: "/pose"
+ gz_topic_name: "/model/twil/pose"
+ ros_type_name: "geometry_msgs/msg/PoseArray"
+ gz_type_name: "gz.msgs.Pose_V"
+ direction: GZ_TO_ROS
+
+- ros_topic_name: "/gnss/fix"
+ gz_topic_name: "/gnss/fix"
+ ros_type_name: "sensor_msgs/msg/NavSatFix"
+ gz_type_name: "gz.msgs.NavSat"
+ direction: GZ_TO_ROS
+
+- ros_topic_name: "/imu/data"
+ gz_topic_name: "/imu/data"
+ ros_type_name: "sensor_msgs/msg/Imu"
+ gz_type_name: "gz.msgs.IMU"
+ direction: GZ_TO_ROS
+
+- ros_topic_name: "/imu/mag"
+ gz_topic_name: "/imu/mag"
+ ros_type_name: "sensor_msgs/msg/MagneticField"
+ gz_type_name: "gz.msgs.Magnetometer"
+ direction: GZ_TO_ROS
+
+- ros_topic_name: "/depth_camera/camera_info"
+ gz_topic_name: "/depth_camera/camera_info"
+ ros_type_name: "sensor_msgs/msg/CameraInfo"
+ gz_type_name: "gz.msgs.CameraInfo"
+ direction: GZ_TO_ROS
+
+- ros_topic_name: "/depth_camera/image_raw"
+ gz_topic_name: "/depth_camera/image_raw"
+ ros_type_name: "sensor_msgs/msg/Image"
+ gz_type_name: "gz.msgs.Image"
+ direction: GZ_TO_ROS
+
\ No newline at end of file
<!--******************************************************************************
Twil Description
- Gazebo Launch File
- Copyright (C) 2014..2022 Walter Fetter Lages <w.fetter@ieee.org>
+ Gazebo Sim Launch File
+ Copyright (C) 2014..2025 Walter Fetter Lages <w.fetter@ieee.org>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
*******************************************************************************-->
<launch>
- <arg name="pause" default="true"/>
+ <arg name="pause" default="false"/>
<arg name="gui" default="true"/>
<arg name="use_sim_time" default="true"/>
<arg name="wam" default="false"/>
<arg name="d435" default="false"/>
<arg name="gps" default="false"/>
- <arg name="world" default ="worlds/empty_sky.world"/>
+ <arg name="imu" default="false"/>
+ <arg name="world" default ="empty.sdf"/>
- <include file="$(find-pkg-share gazebo_ros)/launch/gazebo.launch.py">
- <arg name="pause" value="$(var pause)"/>
- <arg name="gui" value="$(var gui)"/>
+ <arg unless="$(var pause)" name="gz_pause" default="-r"/>
+ <arg if="$(var pause)" name="gz_pause" default=""/>
+
+ <arg unless="$(var gui)" name="gz_gui" default="-s"/>
+ <arg if="$(var gui)" name="gz_gui" default=""/>
+
+ <include file="$(find-pkg-share ros_gz_sim)/launch/gz_sim.launch.py">
+ <arg name="gz_args" value="$(var gz_pause) $(var gz_gui) $(var world)"/>
<arg name="use_sim_time" value="$(var use_sim_time)"/>
- <arg name="world" value="$(var world)"/>
- <arg name="extra_gazebo_args" value="--ros-args --params-file $(find-pkg-share twil_description)/config/gazebo.yaml"/>
</include>
<include file="$(find-pkg-share twil_description)/launch/twil.launch.xml" >
<arg name="wam" value="$(var wam)"/>
<arg name="d435" value="$(var d435)"/>
<arg name="gps" value="$(var gps)"/>
+ <arg name="imu" value="$(var imu)"/>
</include>
- <node name="twil_spawner" pkg="gazebo_ros" exec="spawn_entity.py" args="-topic robot_description -entity twil"/>
+ <node name="twil_spawner" pkg="ros_gz_sim" exec="create" args="-topic robot_description -name twil"/>
+
+ <node name="ros_gz_bridge" pkg="ros_gz_bridge" exec="parameter_bridge">
+ <param name="config_file" value="$(find-pkg-share twil_description)/config/ros_gz_bridge.yaml"/>
+ <param name="use_sim_time" value="$(var use_sim_time)"/>
+ </node>
</launch>
<!--******************************************************************************
Twil Description
- Gazebo Launch File
+ Twil Launch File
Copyright (C) 2014..2022 Walter Fetter Lages <w.fetter@ieee.org>
This program is free software: you can redistribute it and/or modify
<arg name="wam" default="false"/>
<arg name="d435" default="false"/>
<arg name="gps" default="false"/>
+ <arg name="imu" default="false"/>
<node name="robot_state_publisher" pkg="robot_state_publisher" exec="robot_state_publisher">
- <param name="robot_description" value="$(command 'xacro $(find-pkg-share twil_description)/xacro/twil.urdf.xacro wam:=$(var wam) d435:=$(var d435) add_plug:=true gps:=$(var gps)')" type="str"/>
+ <param name="robot_description" value="$(command 'xacro $(find-pkg-share twil_description)/xacro/twil.urdf.xacro wam:=$(var wam) d435:=$(var d435) add_plug:=true gps:=$(var gps) imu:=$(var imu)')" type="str"/>
<param name="use_sim_time" value="$(var use_sim_time)"/>
</node>
</launch>
<export>
<build_type>ament_cmake</build_type>
<gazebo_ros gazebo_model_path="${prefix}/.."/>
- <gazebo_ros gazebo_model_path="/opt/ros/humble/share/realsense2_description//.."/>
+ <gazebo_ros gazebo_model_path="/opt/ros/jazzy/share/realsense2_description/.."/>
</export>
</package>
</collision>
</link>
- <joint name="${name}" type="fixed">
+ <joint name="${name}_joint" type="fixed">
<xacro:insert_block name="origin" />
<parent link="${parent}"/>
<child link="${name}" />
</collision>
</link>
- <joint name="${name}" type="fixed">
+ <joint name="${name}_joint" type="fixed">
<xacro:insert_block name="origin" />
<parent link="${parent}"/>
<child link="${name}" />
</collision>
</link>
- <joint name="${name}" type="fixed">
+ <joint name="${name}_joint" type="fixed">
<xacro:insert_block name="origin" />
<parent link="${parent}"/>
<child link="${name}" />
<robot xmlns:xacro="http://www.ros.org/wiki/xacro">
- <xacro:property name="M_PI" value="3.1415926535897931" />
-
<xacro:macro name="fixed_wheel" params="name parent *origin">
<link name="${name}">
<parent link="${parent}" />
<child link="${name}" />
<axis xyz="0 1 0" />
- <limit effort="100.0" velocity="${2*M_PI}" />
+ <limit effort="100.0" velocity="${2*pi}" />
</joint>
<transmission name="${name}_transmission">
</collision>
</link>
- <joint name="${name}" type="fixed">
+ <joint name="${name}_joint" type="fixed">
<xacro:insert_block name="origin" />
<parent link="${parent}"/>
<child link="${name}" />
<xacro:macro name="sensor_gps" params="name parent *origin">
- <link name="${name}_link" />
+ <link name="${name}_link">
+ <visual>
+ <origin xyz="0 0 0.0" rpy="0 0 0"/>
+ <geometry>
+ <cylinder radius="${0.061/2}" length="0.0195"/>
+ </geometry>
+ <material name="black">
+ <color rgba="0 0 0 1" />
+ </material>
+ </visual>
+ <colision>
+ <origin xyz="0 0 0.0" rpy="0 0 0"/>
+ <geometry>
+ <cylinder radius="${0.061/2}" length="0.0195"/>
+ </geometry>
+ </colision>
+ <inertial>
+ <origin xyz="0 0 0" rpy="0 0 ${pi/2}"/>
+ <mass value="0.0539"/>
+ <inertia ixx="${(1/12) * 0.0539 * (3*(0.0613/2)*(0.0613/2) + 0.0195*0.0195)}" ixy="0.0" ixz="0.0"
+ iyy="${(1/12) * 0.0539 * (3*(0.0613/2)*(0.0613/2) + 0.0195*0.0195)}" iyz="0.0"
+ izz="${(1/2) * 0.0539 * ((0.0613/2)*(0.0613/2))}"/>
+ </inertial>
+ </link>
<joint name="${name}_joint" type="fixed">
<parent link="${parent}"/>
<child link="${name}_link" />
- <xacro:insert_block name="origin" />
+ <xacro:insert_block name="origin"/>
</joint>
<gazebo reference="${name}_link">
- <sensor name="${name}_sensor" type="gps">
+ <sensor name="${name}_sensor" type="navsat">
<always_on>true</always_on>
<update_rate>5.0</update_rate>
- <gps>
+ <topic>gnss/fix</topic>
+ <gz_frame_id>${name}_link</gz_frame_id>
+ <navsat>
<position_sensing>
<horizontal>
<noise type="gaussian">
+ <!-- They should be in meters, but appears to be in degrees, SDF bug? -->
<mean>0.0</mean>
- <stddev>2e-4</stddev>
+ <stddev>1.5e-5</stddev>
</noise>
</horizontal>
<vertical>
<noise type="gaussian">
<mean>0.0</mean>
- <stddev>2e-4</stddev>
+ <stddev>1.5</stddev>
</noise>
</vertical>
</position_sensing>
- </gps>
-
- <plugin name="${name}_controller" filename="libgazebo_ros_gps_sensor.so">
- <ros>
- <!-- <namespace>/namespace</namespace> -->
- <remapping>${name}_controller/out:=${name}/fix</remapping>
- </ros>
- <frame_name>${name}_link</frame_name>
- </plugin>
+ <velocity_sensing>
+ <horizontal>
+ <noise type="gaussian">
+ <mean>0.0</mean>
+ <stddev>0.0514444</stddev>
+ </noise>
+ </horizontal>
+ <vertical>
+ <noise type="gaussian">
+ <mean>0.0</mean>
+ <stddev>0.0514444</stddev>
+ </noise>
+ </vertical>
+ </velocity_sensing>
+ </navsat>
</sensor>
- <material>Gazebo/Grey</material>
+ <material>Gazebo/Black</material>
+ </gazebo>
+
+ <gazebo>
+ <plugin filename="gz-sim-navsat-system" name="gz::sim::systems::NavSat"/>
</gazebo>
</xacro:macro>
--- /dev/null
+<?xml version="1.0"?>
+<robot xmlns:xacro="http://www.ros.org/wiki/xacro">
+
+ <gazebo>
+ <!-- Publish Ignition (not ROS!) topics -->
+ <plugin filename="gz-sim-odometry-publisher-system" name="gz::sim::systems::OdometryPublisher">
+ <dimensions>3</dimensions>
+ <odom_frame>map</odom_frame>
+ <xyz_offset>0.0 0.0 0.0</xyz_offset>
+ <rpy_offset>0.0 0.0 0.0</rpy_offset>
+ <gaussian_noise>0.0</gaussian_noise>
+ <robot_base_frame>twil_origin</robot_base_frame>
+ </plugin>
+ </gazebo>
+</robot>
--- /dev/null
+<?xml version="1.0"?>
+<robot xmlns:xacro="http://www.ros.org/wiki/xacro">
+
+ <gazebo>
+ <plugin filename="gz_ros2_control-system" name="gz_ros2_control::GazeboSimROS2ControlPlugin">
+ <parameters>$(find twil_description)/config/controller_manager.yaml</parameters>
+ </plugin>
+ </gazebo>
+</robot>
--- /dev/null
+<?xml version="1.0"?>
+<robot xmlns:xacro="http://www.ros.org/wiki/xacro">
+
+ <ros2_control name="TwilSystem" type="system">
+ <hardware>
+ <plugin>gz_ros2_control/GazeboSimSystem</plugin>
+ </hardware>
+
+ <joint name="right_wheel_joint">
+ <command_interface name="effort">
+ <param name="min">-100</param>
+ <param name="max">100</param>
+ </command_interface>
+ <state_interface name="position"/>
+ <state_interface name="velocity"/>
+ <state_interface name="effort"/>
+ </joint>
+
+ <joint name="left_wheel_joint">
+ <command_interface name="effort">
+ <param name="min">-100</param>
+ <param name="max">100</param>
+ </command_interface>
+ <state_interface name="position"/>
+ <state_interface name="velocity"/>
+ <state_interface name="effort"/>
+ </joint>
+ </ros2_control>
+</robot>
<robot xmlns:xacro="http://www.ros.org/wiki/xacro">
- <xacro:property name="M_PI" value="3.1415926535897931" />
<xacro:property name="ABS_DENSITY" value="1200" />
<xacro:macro name="sonar" params="name parent *origin">
<robot xmlns:xacro="http://www.ros.org/wiki/xacro">
- <xacro:property name="M_PI" value="3.1415926535897931" />
-
<xacro:macro name="step_motor" params="name parent *origin">
<link name="${name}">
<robot xmlns:xacro="http://www.ros.org/wiki/xacro">
- <xacro:property name="M_PI" value="3.1415926535897931" />
-
<xacro:macro name="tower" params="name parent *origin">
<link name="${name}">
<parent link="${parent}" />
<child link="${name}" />
<axis xyz="0 0 1" />
- <limit effort="100.0" velocity="${1.8*M_PI/180*1000}" />
+ <limit effort="100.0" velocity="${1.8*pi/180*1000}" />
<dynamics friction="1.0"/>
</joint>
<?xml version="1.0"?>
<robot name="twil" xmlns:xacro="http://www.ros.org/wiki/xacro">
+ <xacro:arg name="wam" default="false" />
+ <xacro:arg name="gps" default="false" />
+ <xacro:arg name="imu" default="false" />
<xacro:arg name="d435" default="false" />
- <xacro:property name="M_PI" value="3.1415926535897931" />
-
- <xacro:include filename="$(find twil_description)/xacro/chassis.urdf.xacro" />
- <xacro:include filename="$(find twil_description)/xacro/fixed_wheel_support.urdf.xacro" />
- <xacro:include filename="$(find twil_description)/xacro/fixed_wheel.urdf.xacro" />
- <xacro:include filename="$(find twil_description)/xacro/caster_support.urdf.xacro" />
- <xacro:include filename="$(find twil_description)/xacro/caster_base.urdf.xacro" />
- <xacro:include filename="$(find twil_description)/xacro/caster_wheel.urdf.xacro" />
- <xacro:include filename="$(find twil_description)/xacro/battery_bosch_12v.urdf.xacro" />
- <xacro:include filename="$(find twil_description)/xacro/cpu.urdf.xacro" />
- <xacro:include filename="$(find twil_description)/xacro/eurocard.urdf.xacro" />
- <xacro:include filename="$(find twil_description)/xacro/tower.urdf.xacro" />
- <xacro:include filename="$(find twil_description)/xacro/step_motor.urdf.xacro" />
- <xacro:include filename="$(find twil_description)/xacro/sonar.urdf.xacro" />
-
- <link name="twil_origin" />
+ <xacro:include filename="chassis.urdf.xacro" />
+ <xacro:include filename="fixed_wheel_support.urdf.xacro" />
+ <xacro:include filename="fixed_wheel.urdf.xacro" />
+ <xacro:include filename="caster_support.urdf.xacro" />
+ <xacro:include filename="caster_base.urdf.xacro" />
+ <xacro:include filename="caster_wheel.urdf.xacro" />
+ <xacro:include filename="battery_bosch_12v.urdf.xacro" />
+ <xacro:include filename="cpu.urdf.xacro" />
+ <xacro:include filename="eurocard.urdf.xacro" />
+ <xacro:include filename="tower.urdf.xacro" />
+ <xacro:include filename="step_motor.urdf.xacro" />
+ <xacro:include filename="sonar.urdf.xacro" />
+
+ <link name="twil_origin"/>
<xacro:chassis name="chassis" parent="twil_origin">
<origin xyz="0 0 0.172" rpy="0 0 0"/>
</xacro:chassis>
<xacro:fixed_wheel_support name="right_wheel_support" parent="chassis">
- <origin xyz="0 -0.161 -0.002" rpy="0 0 ${M_PI}" />
+ <origin xyz="0 -0.161 -0.002" rpy="0 0 ${pi}" />
</xacro:fixed_wheel_support>
<xacro:fixed_wheel name="right_wheel" parent="right_wheel_support">
- <origin xyz="0 0 -0.095" rpy="0 0 ${-M_PI}" />
+ <origin xyz="0 0 -0.095" rpy="0 0 ${-pi}" />
</xacro:fixed_wheel>
<xacro:fixed_wheel_support name="left_wheel_support" parent="chassis">
</xacro:sonar>
<!--xacro:battery_bosch_12v name="battery" parent="chassis">
- <origin xyz="-0.15 0.0 ${0.0015+0.0875}" rpy="0.0 0.0 ${M_PI/2}" />
+ <origin xyz="-0.15 0.0 ${0.0015+0.0875}" rpy="0.0 0.0 ${pi/2}" />
</xacro:battery_bosch_12v-->
<xacro:battery_bosch_12v name="battery" parent="chassis">
- <origin xyz="0.0 0.0 ${0.0015+0.0875}" rpy="0.0 0.0 ${M_PI/2}" />
+ <origin xyz="0.0 0.0 ${0.0015+0.0875}" rpy="0.0 0.0 ${pi/2}" />
</xacro:battery_bosch_12v>
<xacro:eurocard name="fan" parent="chassis">
</xacro:eurocard>
<xacro:cpu name="cpu" parent="chassis">
- <origin xyz="0 0.0 ${0.0015+0.3+0.003+0.127+0.003+0.17}" rpy="0.0 0.0 ${M_PI/2}" />
+ <origin xyz="0 0.0 ${0.0015+0.3+0.003+0.127+0.003+0.17}" rpy="0.0 0.0 ${pi/2}" />
</xacro:cpu>
<link name="chassis_top" />
<joint name="chassis_top_joint" type="fixed">
<parent link="chassis"/>
<child link="chassis_top" />
- <origin xyz="0.0 0.0 0.787" rpy="0.0 0.0 0.0" />
+ <origin xyz="0.0 0.0 0.787" rpy="0.0 0.0 0.0"/>
</joint>
<xacro:if value="$(arg wam)">
<xacro:arg name="bhand" default="true"/>
- <xacro:include filename="$(find wam_description)/xacro/wam.urdf.xacro" />
+ <xacro:include filename="$(find wam_description)/xacro/wam.urdf.xacro"/>
<joint name="twil_wam" type="fixed">
<parent link="chassis_top"/>
- <child link="wam_origin" />
- <origin xyz="-0.220 -0.140 0.0" rpy="0.0 0.0 0.0" />
+ <child link="wam_origin"/>
+ <origin xyz="-0.220 -0.140 0.0" rpy="0.0 0.0 0.0"/>
</joint>
</xacro:if>
- <ros2_control name="GazeboSystem" type="system">
- <hardware>
- <plugin>gazebo_ros2_control/GazeboSystem</plugin>
- </hardware>
-
- <joint name="right_wheel_joint">
- <command_interface name="effort">
- <param name="min">-100</param>
- <param name="max">100</param>
- </command_interface>
- <state_interface name="position"/>
- <state_interface name="velocity"/>
- <state_interface name="effort"/>
- </joint>
+ <xacro:include filename="ros2_control.urdf.xacro"/>
- <joint name="left_wheel_joint">
- <command_interface name="effort">
- <param name="min">-100</param>
- <param name="max">100</param>
- </command_interface>
- <state_interface name="position"/>
- <state_interface name="velocity"/>
- <state_interface name="effort"/>
- </joint>
- </ros2_control>
+ <xacro:include filename="gz_ros2_control.urdf.xacro"/>
+
+ <xacro:include filename="ground_truth.urdf.xacro"/>
- <gazebo>
- <plugin filename="libgazebo_ros2_control.so" name="gazebo_ros2_control">
- <robot_param>robot_description</robot_param>
- <robot_param_node>robot_state_publisher</robot_param_node>
- <parameters>$(find twil_description)/config/controller_manager.yaml</parameters>
- </plugin>
-
- <plugin name="ground_truth" filename="libgazebo_ros_p3d.so">
- <frame_name>map</frame_name>
- <body_name>twil_origin</body_name>
- <ros>
- <remapping>odom:=ground_truth</remapping>
- </ros>
- <!--update_rate>100</update_rate-->
- </plugin>
-
- </gazebo>
<xacro:if value="$(arg gps)">
- <xacro:include filename="$(find twil_description)/xacro/gps.urdf.xacro"/>
- <xacro:sensor_gps name="gps" parent="twil_origin">
- <origin xyz="0 0 0" rpy="0.0 0.0 0.0" />
+ <xacro:include filename="gps.urdf.xacro"/>
+ <xacro:sensor_gps name="gps" parent="chassis_top">
+ <origin xyz="0 0 0" rpy="0.0 0.0 0.0"/>
</xacro:sensor_gps>
</xacro:if>
- <xacro:if value="$(arg d435)">
- <xacro:include filename="$(find twil_description)/xacro/d435.urdf.xacro"/>
+ <xacro:if value="$(arg imu)">
+ <xacro:include filename="$(find bno055_shuttle_description)/urdf/bno055_shuttle.xacro"/>
+ <xacro:bno055_shuttle name="imu"/>
+ <joint name="chassis_imu_joint" type="fixed">
+ <parent link="chassis_top"/>
+ <child link="imu_origin"/>
+ <origin xyz="0.1 0 0" rpy="0.0 0.0 0.0"/>
+ </joint>
</xacro:if>
+<!-- <xacro:if value="$(arg d435)">
+ <xacro:include filename="d435.urdf.xacro"/>
+ </xacro:if>
+ -->
</robot>