diff --git a/agv_pro_gazebo/CMakeLists.txt b/agv_pro_gazebo/CMakeLists.txt new file mode 100644 index 0000000..683db1c --- /dev/null +++ b/agv_pro_gazebo/CMakeLists.txt @@ -0,0 +1,21 @@ +cmake_minimum_required(VERSION 3.8) +project(agv_pro_description) + +if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") + add_compile_options(-Wall -Wextra -Wpedantic) +endif() + +# find dependencies +find_package(ament_cmake REQUIRED) +find_package(urdf REQUIRED) + +if(BUILD_TESTING) + find_package(ament_lint_auto REQUIRED) + ament_lint_auto_find_test_dependencies() +endif() + +install(DIRECTORY meshes urdf launch rviz config + DESTINATION share/${PROJECT_NAME} +) + +ament_package() diff --git a/agv_pro_gazebo/config/agv_control copy.yaml b/agv_pro_gazebo/config/agv_control copy.yaml new file mode 100644 index 0000000..5cd5e9b --- /dev/null +++ b/agv_pro_gazebo/config/agv_control copy.yaml @@ -0,0 +1,23 @@ +controller_manager: + ros__parameters: + update_rate: 100 + + joint_state_broadcaster: + type: joint_state_broadcaster/JointStateBroadcaster + + diff_drive_controller: + type: diff_drive_controller/DiffDriveController + left_wheel_names: ["left_front_wheel_joint", "left_rear_wheel_joint"] + right_wheel_names: ["right_front_wheel_joint", "right_rear_wheel_joint"] + + wheel_separation: 0.36 + wheel_radius: 0.05 + + base_frame_id: base_link + use_stamped_vel: false + publish_rate: 50 + + enable_odom_tf: true + odom_frame_id: odom + pose_covariance_diagonal: [0.001, 0.001, 99999.0, 99999.0, 99999.0, 0.03] + twist_covariance_diagonal: [0.001, 0.001, 99999.0, 99999.0, 99999.0, 0.03] \ No newline at end of file diff --git a/agv_pro_gazebo/config/agv_control.yaml b/agv_pro_gazebo/config/agv_control.yaml new file mode 100644 index 0000000..41c0814 --- /dev/null +++ b/agv_pro_gazebo/config/agv_control.yaml @@ -0,0 +1,28 @@ +controller_manager: + ros__parameters: + update_rate: 100 # 控制器更新频率 (Hz) + use_sim_time: true # 使用仿真时间 + + # 定义关节状态广播器 + fishbot_joint_state_broadcaster: + type: joint_state_broadcaster/JointStateBroadcaster + use_sim_time: true + + # 定义全向驱动控制器 + fishbot_omni_drive_controller: + type: omni_drive_controller/OmniDriveController + +# 四轮全向控制器配置 +fishbot_omni_drive_controller: + ros__parameters: + front_left_wheel_joint: front_left_wheel_joint + front_right_wheel_joint: front_right_wheel_joint + rear_left_wheel_joint: rear_left_wheel_joint + rear_right_wheel_joint: rear_right_wheel_joint + wheel_separation: 0.36 # 轮距 + wheel_diameter: 0.1 # 轮子直径 + publish_rate: 50.0 # 发布频率 + odom_frame_id: odom + base_frame_id: base_link + pose_covariance_diagonal: [0.001, 0.001, 99999.0, 99999.0, 99999.0, 0.03] + twist_covariance_diagonal: [0.001, 0.001, 99999.0, 99999.0, 99999.0, 0.03] diff --git a/agv_pro_gazebo/launch/agv_pro.launch.py b/agv_pro_gazebo/launch/agv_pro.launch.py new file mode 100644 index 0000000..7c3c375 --- /dev/null +++ b/agv_pro_gazebo/launch/agv_pro.launch.py @@ -0,0 +1,41 @@ +import os + +from ament_index_python.packages import get_package_share_directory + +from launch import LaunchDescription +from launch.substitutions import LaunchConfiguration +from launch.actions import DeclareLaunchArgument +from launch_ros.actions import Node + +import xacro + + +def generate_launch_description(): + + # Check if we're told to use sim time + use_sim_time = LaunchConfiguration('use_sim_time') + + # Process the URDF file + pkg_path = os.path.join(get_package_share_directory('agv_pro_description')) + xacro_file = os.path.join(pkg_path,'urdf','agv_pro.xacro') + robot_description_config = xacro.process_file(xacro_file) + + # Create a robot_state_publisher node + params = {'robot_description': robot_description_config.toxml(), 'use_sim_time': use_sim_time} + node_robot_state_publisher = Node( + package='robot_state_publisher', + executable='robot_state_publisher', + output='screen', + parameters=[params] + ) + + + # Launch! + return LaunchDescription([ + DeclareLaunchArgument( + 'use_sim_time', + default_value='false', + description='Use sim time if true'), + + node_robot_state_publisher + ]) \ No newline at end of file diff --git a/agv_pro_gazebo/launch/agv_pro_display.launch.py b/agv_pro_gazebo/launch/agv_pro_display.launch.py new file mode 100644 index 0000000..9218e09 --- /dev/null +++ b/agv_pro_gazebo/launch/agv_pro_display.launch.py @@ -0,0 +1,49 @@ +import os +from launch import LaunchDescription +from launch_ros.actions import Node +from launch.conditions import IfCondition +from launch.substitutions import LaunchConfiguration +from ament_index_python.packages import get_package_share_directory + +def generate_launch_description(): + + use_rviz = LaunchConfiguration('use_rviz', default='true') + + rviz_config_dir = os.path.join( + get_package_share_directory('agv_pro_description'), + 'rviz', + 'agvpro_display.rviz') + + urdf_file = os.path.join( + get_package_share_directory('agv_pro_description'), + 'urdf', + 'agv_pro.urdf' + ) + + with open(urdf_file, 'r') as file: + robot_description_content = file.read() + + return LaunchDescription([ + + Node( + package='joint_state_publisher', + executable='joint_state_publisher', + name='joint_state_publisher' + ), + + Node( + package='robot_state_publisher', + executable='robot_state_publisher', + name='robot_state_publisher', + parameters=[{'robot_description': robot_description_content}] + ), + + Node( + package='rviz2', + executable='rviz2', + name='rviz2', + arguments=['-d', rviz_config_dir], + condition=IfCondition(use_rviz), + output='screen') + + ]) diff --git a/agv_pro_gazebo/launch/agv_pro_gazebo.launch.py b/agv_pro_gazebo/launch/agv_pro_gazebo.launch.py new file mode 100644 index 0000000..5a87c2c --- /dev/null +++ b/agv_pro_gazebo/launch/agv_pro_gazebo.launch.py @@ -0,0 +1,66 @@ +import os +from launch import LaunchDescription +from launch.actions import IncludeLaunchDescription +from launch.launch_description_sources import PythonLaunchDescriptionSource +from launch.substitutions import Command +from launch_ros.actions import Node +from launch_ros.parameter_descriptions import ParameterValue +from ament_index_python.packages import get_package_share_directory + +def generate_launch_description(): + pkg_name = 'agv_pro_description' + pkg_dir = get_package_share_directory(pkg_name) + + xacro_file = os.path.join(pkg_dir, 'urdf', 'agv_pro.xacro') + world_file = os.path.join(pkg_dir, 'worlds', 'empty.world') + rviz_config = os.path.join(pkg_dir, 'rviz', 'agvpro_display.rviz') + + robot_description_content = ParameterValue( + Command(['xacro ', xacro_file]), + value_type=str + ) + robot_description = {'robot_description': robot_description_content} + + return LaunchDescription([ + # Launch Gazebo + IncludeLaunchDescription( + PythonLaunchDescriptionSource( + os.path.join(get_package_share_directory('gazebo_ros'), 'launch', 'gazebo.launch.py') + ), + launch_arguments={'world': world_file}.items() + ), + + # Spawn robot into Gazebo + Node( + package='gazebo_ros', + executable='spawn_entity.py', + arguments=['-topic', 'robot_description', + '-entity', 'agv_pro'], + output='screen' + ), + + # State publisher + Node( + package='robot_state_publisher', + executable='robot_state_publisher', + name='robot_state_publisher', + output='screen', + parameters=[robot_description] + ), + + Node( + package='joint_state_publisher', + executable='joint_state_publisher', + name='joint_state_publisher', + output='screen', + ), + + # Optional: RViz + Node( + package='rviz2', + executable='rviz2', + name='rviz2', + output='screen', + arguments=['-d', rviz_config], + ), + ]) diff --git a/agv_pro_gazebo/launch/agv_pro_gazebo.launchcopy.py b/agv_pro_gazebo/launch/agv_pro_gazebo.launchcopy.py new file mode 100644 index 0000000..8d85560 --- /dev/null +++ b/agv_pro_gazebo/launch/agv_pro_gazebo.launchcopy.py @@ -0,0 +1,71 @@ +import os +from launch import LaunchDescription +from launch.actions import IncludeLaunchDescription, ExecuteProcess +from launch.launch_description_sources import PythonLaunchDescriptionSource +from launch.substitutions import Command, LaunchConfiguration, PathJoinSubstitution +from launch_ros.actions import Node +from ament_index_python.packages import get_package_share_directory + +def generate_launch_description(): + pkg_name = 'agv_pro_description' + + # Paths + pkg_dir = get_package_share_directory(pkg_name) + xacro_file = os.path.join(pkg_dir, 'urdf', 'agv_pro.xacro') + world_file = os.path.join(pkg_dir, 'worlds', 'empty.world') # 创建一个空 world 即可 + rviz_config = os.path.join(pkg_dir, 'rviz', 'agvpro_display.rviz') + + robot_description_content = Command(['xacro ', xacro_file]) + robot_description = {'robot_description': robot_description_content} + + return LaunchDescription([ + + # Start Gazebo with empty world + IncludeLaunchDescription( + PythonLaunchDescriptionSource( + [os.path.join(get_package_share_directory('gazebo_ros'), 'launch', 'gazebo.launch.py')] + ), + launch_arguments={'world': world_file}.items() + ), + + # Spawn robot into Gazebo + Node( + package='gazebo_ros', + executable='spawn_entity.py', + arguments=['-topic', 'robot_description', + '-entity', 'agv_pro'], + output='screen' + ), + + # Robot state publisher + Node( + package='robot_state_publisher', + executable='robot_state_publisher', + name='robot_state_publisher', + output='screen', + parameters=[robot_description] + ), + + # Optionally publish joint states if not using controllers + Node( + package='joint_state_publisher', + executable='joint_state_publisher', + name='joint_state_publisher', + output='screen', + ), + Node( + package='controller_manager', + executable='spawner', + arguments=['joint_state_broadcaster'], + output='screen', + ), + + # RViz (optional, visualize TF & model) + Node( + package='rviz2', + executable='rviz2', + name='rviz2', + output='screen', + arguments=['-d', rviz_config], + ), + ]) \ No newline at end of file diff --git a/agv_pro_gazebo/launch/teleop_launch.py b/agv_pro_gazebo/launch/teleop_launch.py new file mode 100644 index 0000000..e18c7c5 --- /dev/null +++ b/agv_pro_gazebo/launch/teleop_launch.py @@ -0,0 +1,17 @@ +import os +from launch import LaunchDescription +from launch_ros.actions import Node + +def generate_launch_description(): + return LaunchDescription([ + Node( + package='teleop_twist_keyboard', + executable='teleop_twist_keyboard', + name='teleop_keyboard', + output='screen', + prefix='xterm -e', # 或 'gnome-terminal --' 替换为你的终端命令 + remappings=[ + ('/cmd_vel', '/diff_drive_controller/cmd_vel_unstamped') + ] + ) + ]) diff --git a/agv_pro_gazebo/launch/test.launch.py b/agv_pro_gazebo/launch/test.launch.py new file mode 100644 index 0000000..3c417e5 --- /dev/null +++ b/agv_pro_gazebo/launch/test.launch.py @@ -0,0 +1,35 @@ +import os +from launch import LaunchDescription +from launch.actions import IncludeLaunchDescription +from launch.launch_description_sources import PythonLaunchDescriptionSource +from launch_ros.actions import Node +from launch.substitutions import Command +from ament_index_python.packages import get_package_share_directory + +def generate_launch_description(): + pkg_dir = get_package_share_directory('agv_pro_description') + xacro_file = os.path.join(pkg_dir, 'urdf', 'minimal_robot.xacro') + world_file = os.path.join(pkg_dir, 'worlds', 'empty.world') + + robot_description = {'robot_description': Command(['xacro ', xacro_file])} + + return LaunchDescription([ + IncludeLaunchDescription( + PythonLaunchDescriptionSource( + os.path.join(get_package_share_directory('gazebo_ros'), 'launch', 'gazebo.launch.py') + ), + launch_arguments={'world': world_file}.items() + ), + Node( + package='robot_state_publisher', + executable='robot_state_publisher', + parameters=[robot_description], + output='screen' + ), + Node( + package='gazebo_ros', + executable='spawn_entity.py', + arguments=['-topic', 'robot_description', '-entity', 'minimal_bot'], + output='screen' + ) + ]) diff --git a/agv_pro_gazebo/meshes/base_link.stl b/agv_pro_gazebo/meshes/base_link.stl new file mode 100644 index 0000000..88caa0a Binary files /dev/null and b/agv_pro_gazebo/meshes/base_link.stl differ diff --git a/agv_pro_gazebo/meshes/laser_link.stl b/agv_pro_gazebo/meshes/laser_link.stl new file mode 100644 index 0000000..70da241 Binary files /dev/null and b/agv_pro_gazebo/meshes/laser_link.stl differ diff --git a/agv_pro_gazebo/meshes/wheel_lb_link.stl b/agv_pro_gazebo/meshes/wheel_lb_link.stl new file mode 100644 index 0000000..cd2c057 Binary files /dev/null and b/agv_pro_gazebo/meshes/wheel_lb_link.stl differ diff --git a/agv_pro_gazebo/meshes/wheel_lf_link.stl b/agv_pro_gazebo/meshes/wheel_lf_link.stl new file mode 100644 index 0000000..0b6cf54 Binary files /dev/null and b/agv_pro_gazebo/meshes/wheel_lf_link.stl differ diff --git a/agv_pro_gazebo/meshes/wheel_rb_link.stl b/agv_pro_gazebo/meshes/wheel_rb_link.stl new file mode 100644 index 0000000..1cd2647 Binary files /dev/null and b/agv_pro_gazebo/meshes/wheel_rb_link.stl differ diff --git a/agv_pro_gazebo/meshes/wheel_rf_link.stl b/agv_pro_gazebo/meshes/wheel_rf_link.stl new file mode 100644 index 0000000..95cbec8 Binary files /dev/null and b/agv_pro_gazebo/meshes/wheel_rf_link.stl differ diff --git a/agv_pro_gazebo/package.xml b/agv_pro_gazebo/package.xml new file mode 100644 index 0000000..4bd928b --- /dev/null +++ b/agv_pro_gazebo/package.xml @@ -0,0 +1,20 @@ + + + + agv_pro_description + 1.0.0 + + URDF Description package for AGV pro + + weijun.xie + BSD-3-Clause license + + ament_cmake + + ament_lint_auto + ament_lint_common + + + ament_cmake + + diff --git a/agv_pro_gazebo/rviz/agvpro_display.rviz b/agv_pro_gazebo/rviz/agvpro_display.rviz new file mode 100644 index 0000000..ecd17f3 --- /dev/null +++ b/agv_pro_gazebo/rviz/agvpro_display.rviz @@ -0,0 +1,234 @@ +Panels: + - Class: rviz_common/Displays + Help Height: 78 + Name: Displays + Property Tree Widget: + Expanded: + - /Global Options1 + - /Status1 + - /RobotModel1 + - /TF1 + Splitter Ratio: 0.5 + Tree Height: 549 + - Class: rviz_common/Selection + Name: Selection + - Class: rviz_common/Tool Properties + Expanded: + - /2D Goal Pose1 + - /Publish Point1 + Name: Tool Properties + Splitter Ratio: 0.5886790156364441 + - Class: rviz_common/Views + Expanded: + - /Current View1 + Name: Views + Splitter Ratio: 0.5 + - Class: rviz_common/Time + Experimental: false + Name: Time + SyncMode: 0 + SyncSource: "" +Visualization Manager: + Class: "" + Displays: + - Alpha: 0.5 + Cell Size: 1 + Class: rviz_default_plugins/Grid + Color: 160; 160; 164 + Enabled: true + Line Style: + Line Width: 0.029999999329447746 + Value: Lines + Name: Grid + Normal Cell Count: 0 + Offset: + X: 0 + Y: 0 + Z: 0 + Plane: XY + Plane Cell Count: 10 + Reference Frame: + Value: true + - Alpha: 1 + Class: rviz_default_plugins/RobotModel + Collision Enabled: false + Description File: "" + Description Source: Topic + Description Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Reliable + Value: /robot_description + Enabled: true + Links: + All Links Enabled: true + Expand Joint Details: false + Expand Link Details: false + Expand Tree: false + Link Tree Style: Links in Alphabetic Order + base_footprint: + Alpha: 1 + Show Axes: false + Show Trail: false + base_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + laser_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + left_front_wheel_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + left_rear_wheel_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + right_front_wheel_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + right_rear_wheel_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + Mass Properties: + Inertia: false + Mass: false + Name: RobotModel + TF Prefix: "" + Update Interval: 0 + Value: true + Visual Enabled: true + - Class: rviz_default_plugins/TF + Enabled: true + Frame Timeout: 15 + Frames: + All Enabled: true + base_footprint: + Value: true + base_link: + Value: true + laser_link: + Value: true + left_front_wheel_link: + Value: true + left_rear_wheel_link: + Value: true + right_front_wheel_link: + Value: true + right_rear_wheel_link: + Value: true + Marker Scale: 1 + Name: TF + Show Arrows: true + Show Axes: true + Show Names: false + Tree: + base_footprint: + base_link: + laser_link: + {} + left_front_wheel_link: + {} + left_rear_wheel_link: + {} + right_front_wheel_link: + {} + right_rear_wheel_link: + {} + Update Interval: 0 + Value: true + Enabled: true + Global Options: + Background Color: 48; 48; 48 + Fixed Frame: base_footprint + Frame Rate: 30 + Name: root + Tools: + - Class: rviz_default_plugins/Interact + Hide Inactive Objects: true + - Class: rviz_default_plugins/MoveCamera + - Class: rviz_default_plugins/Select + - Class: rviz_default_plugins/FocusCamera + - Class: rviz_default_plugins/Measure + Line color: 128; 128; 0 + - Class: rviz_default_plugins/SetInitialPose + Covariance x: 0.25 + Covariance y: 0.25 + Covariance yaw: 0.06853891909122467 + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Reliable + Value: /initialpose + - Class: rviz_default_plugins/SetGoal + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Reliable + Value: /goal_pose + - Class: rviz_default_plugins/PublishPoint + Single click: true + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Reliable + Value: /clicked_point + Transformation: + Current: + Class: rviz_default_plugins/TF + Value: true + Views: + Current: + Class: rviz_default_plugins/Orbit + Distance: 1.6701574325561523 + Enable Stereo Rendering: + Stereo Eye Separation: 0.05999999865889549 + Stereo Focal Distance: 1 + Swap Stereo Eyes: false + Value: false + Focal Point: + X: 0 + Y: 0 + Z: 0 + Focal Shape Fixed Size: true + Focal Shape Size: 0.05000000074505806 + Invert Z Axis: false + Name: Current View + Near Clip Distance: 0.009999999776482582 + Pitch: 0.785398006439209 + Target Frame: + Value: Orbit (rviz) + Yaw: 0.785398006439209 + Saved: ~ +Window Geometry: + Displays: + collapsed: false + Height: 846 + Hide Left Dock: false + Hide Right Dock: true + QMainWindow State: 000000ff00000000fd000000040000000000000156000002b0fc0200000008fb0000001200530065006c0065006300740069006f006e00000001e10000009b0000005c00fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c006100790073010000003d000002b0000000c900fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261000000010000010f000002b0fc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073000000003d000002b0000000a400fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e10000019700000003000004b00000003efc0100000002fb0000000800540069006d00650100000000000004b0000002fb00fffffffb0000000800540069006d0065010000000000000450000000000000000000000354000002b000000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000 + Selection: + collapsed: false + Time: + collapsed: false + Tool Properties: + collapsed: false + Views: + collapsed: true + Width: 1200 + X: 720 + Y: 343 diff --git a/agv_pro_gazebo/urdf/agv_pro copy.xacro b/agv_pro_gazebo/urdf/agv_pro copy.xacro new file mode 100644 index 0000000..399d262 --- /dev/null +++ b/agv_pro_gazebo/urdf/agv_pro copy.xacro @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gazebo/White + 1.0 + 1.0 + 100000.0 + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + gazebo_ros2_control/GazeboSystem + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/agv_pro_gazebo/urdf/agv_pro.xacro b/agv_pro_gazebo/urdf/agv_pro.xacro new file mode 100644 index 0000000..4935801 --- /dev/null +++ b/agv_pro_gazebo/urdf/agv_pro.xacro @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/agv_pro_gazebo/urdf/agv_pro1.xacro b/agv_pro_gazebo/urdf/agv_pro1.xacro new file mode 100644 index 0000000..eac1eed --- /dev/null +++ b/agv_pro_gazebo/urdf/agv_pro1.xacro @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + transmission_interface/SimpleTransmission + + 1 + + + hardware_interface/VelocityJointInterface + + + + + 0.8 + 0.8 + 100000.0 + 1.0 + Gazebo/Grey + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/agv_pro_gazebo/urdf/minimal_robot.xacro b/agv_pro_gazebo/urdf/minimal_robot.xacro new file mode 100644 index 0000000..87be2db --- /dev/null +++ b/agv_pro_gazebo/urdf/minimal_robot.xacro @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gazebo/White + 1.0 + 1.0 + 100000.0 + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/agv_pro_gazebo/urdf/parts/gazebo_control_plugin.xacro b/agv_pro_gazebo/urdf/parts/gazebo_control_plugin.xacro new file mode 100644 index 0000000..32729a1 --- /dev/null +++ b/agv_pro_gazebo/urdf/parts/gazebo_control_plugin.xacro @@ -0,0 +1,30 @@ + + + + + + + + cmd_vel:=/cmd_vel + odom:=/odom + + + + front_left_wheel_joint + front_right_wheel_joint + rear_left_wheel_joint + rear_right_wheel_joint + + 0.1 + 0.36 + + 20 + cmd_vel + odom + odom + base_footprint + true + + + + \ No newline at end of file diff --git a/agv_pro_gazebo/urdf/parts/wheel_macro.xacro b/agv_pro_gazebo/urdf/parts/wheel_macro.xacro new file mode 100644 index 0000000..2343129 --- /dev/null +++ b/agv_pro_gazebo/urdf/parts/wheel_macro.xacro @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + transmission_interface/SimpleTransmission + + hardware_interface/velocity + + + 1 + hardware_interface/velocity + + + + + 0.8 + 0.8 + 100000.0 + 1.0 + Gazebo/Black + + + + diff --git a/agv_pro_gazebo/urdf/ros2_controller.xacro b/agv_pro_gazebo/urdf/ros2_controller.xacro new file mode 100644 index 0000000..73b7cd7 --- /dev/null +++ b/agv_pro_gazebo/urdf/ros2_controller.xacro @@ -0,0 +1,57 @@ + + + + + + gazebo_ros2_control/GazeboSystem + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $(find agv_pro_description)/config/agv_control.yaml + + /omni_drive_controller/cmd_vel:=/cmd_vel + /omni_drive_controller/odom:=/odom + + + + + diff --git a/agv_pro_gazebo/worlds/empty.world b/agv_pro_gazebo/worlds/empty.world new file mode 100644 index 0000000..a36bb5e --- /dev/null +++ b/agv_pro_gazebo/worlds/empty.world @@ -0,0 +1,11 @@ + + + + + model://ground_plane + + + model://sun + + + \ No newline at end of file
URDF Description package for AGV pro