Simple ros2-controll mock setup
This commit is contained in:
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
.vscode/
|
||||
build/
|
||||
install/
|
||||
log/
|
||||
31
mg_wheel_interface/CMakeLists.txt
Normal file
31
mg_wheel_interface/CMakeLists.txt
Normal file
@ -0,0 +1,31 @@
|
||||
cmake_minimum_required(VERSION 3.8)
|
||||
project(mg_wheel_interface)
|
||||
|
||||
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)
|
||||
# uncomment the following section in order to fill in
|
||||
# further dependencies manually.
|
||||
# find_package(<dependency> REQUIRED)
|
||||
|
||||
if(BUILD_TESTING)
|
||||
find_package(ament_lint_auto REQUIRED)
|
||||
# the following line skips the linter which checks for copyrights
|
||||
# comment the line when a copyright and license is added to all source files
|
||||
set(ament_cmake_copyright_FOUND TRUE)
|
||||
# the following line skips cpplint (only works in a git repo)
|
||||
# comment the line when this package is in a git repo and when
|
||||
# a copyright and license is added to all source files
|
||||
set(ament_cmake_cpplint_FOUND TRUE)
|
||||
ament_lint_auto_find_test_dependencies()
|
||||
endif()
|
||||
|
||||
install(DIRECTORY
|
||||
launch assets
|
||||
DESTINATION share/${PROJECT_NAME}/
|
||||
)
|
||||
|
||||
ament_package()
|
||||
70
mg_wheel_interface/assets/mg_base.urdf
Normal file
70
mg_wheel_interface/assets/mg_base.urdf
Normal file
@ -0,0 +1,70 @@
|
||||
<?xml version="1.0"?>
|
||||
<robot name="mg-robot">
|
||||
|
||||
|
||||
<material name="red">
|
||||
<color rgba="1 0 0 1" />
|
||||
</material>
|
||||
|
||||
<material name="gray">
|
||||
<color rgba="0.5 0.5 0.5 1" />
|
||||
</material>
|
||||
|
||||
<link name="base-link">
|
||||
<visual>
|
||||
<geometry>
|
||||
<box size="0.5 0.5 0.2" color="yellow"/>
|
||||
</geometry>
|
||||
<origin xyz="0 0 0.12" rpy="0 0 0" />
|
||||
<material name="red" />
|
||||
</visual>
|
||||
</link>
|
||||
|
||||
<link name="left-wheel">
|
||||
<visual>
|
||||
<geometry>
|
||||
<cylinder radius="0.1" length="0.05"/>
|
||||
</geometry>
|
||||
<origin xyz="0 0 0" rpy="1.57 0 0" />
|
||||
<material name="gray" />
|
||||
</visual>
|
||||
</link>
|
||||
|
||||
<link name="right-wheel">
|
||||
<visual>
|
||||
<geometry>
|
||||
<cylinder radius="0.1" length="0.05"/>
|
||||
</geometry>
|
||||
<origin xyz="0 0 0" rpy="1.57 0 0" />
|
||||
<material name="gray" />
|
||||
</visual>
|
||||
</link>
|
||||
|
||||
<joint name="right_motor" type="continuous">
|
||||
<parent link="base-link"/>
|
||||
<child link="right-wheel"/>
|
||||
<origin xyz="0 -0.25 0.1" rpy="0 0 3.141592" />
|
||||
</joint>
|
||||
|
||||
<joint name="left_motor" type="continuous">
|
||||
<parent link="base-link"/>
|
||||
<child link="left-wheel"/>
|
||||
<origin xyz="0 0.25 0.1" rpy="0 0 0" />
|
||||
</joint>
|
||||
|
||||
|
||||
<ros2_control name="mg-base" type="system">
|
||||
<hardware>
|
||||
<plugin>mock_components/GenericSystem</plugin>
|
||||
<param name="calculate_dynamics">true</param>
|
||||
</hardware>
|
||||
<joint name="left_motor">
|
||||
<command_interface name="velocity"/>
|
||||
<state_interface name="position"/>
|
||||
</joint>
|
||||
<joint name="right_motor">
|
||||
<command_interface name="velocity"/>
|
||||
<state_interface name="position"/>
|
||||
</joint>
|
||||
</ros2_control>
|
||||
</robot>
|
||||
20
mg_wheel_interface/assets/mg_base_controllers.yaml
Normal file
20
mg_wheel_interface/assets/mg_base_controllers.yaml
Normal file
@ -0,0 +1,20 @@
|
||||
controller_manager:
|
||||
ros__parameters:
|
||||
update_rate: 100
|
||||
|
||||
diffdrive_controller:
|
||||
type: diff_drive_controller/DiffDriveController
|
||||
joint_state_publisher:
|
||||
type: joint_state_broadcaster/JointStateBroadcaster
|
||||
|
||||
diffdrive_controller:
|
||||
ros__parameters:
|
||||
left_wheel_names: ["left_motor"]
|
||||
right_wheel_names: ["right_motor"]
|
||||
|
||||
enable_odom_tf: true
|
||||
odom_frame_id: odom
|
||||
base_frame_id: base-link
|
||||
|
||||
wheel_separation: 0.5
|
||||
wheel_radius: 0.1
|
||||
47
mg_wheel_interface/launch/launch.py
Normal file
47
mg_wheel_interface/launch/launch.py
Normal file
@ -0,0 +1,47 @@
|
||||
from launch import LaunchDescription
|
||||
from launch.actions import DeclareLaunchArgument, RegisterEventHandler, TimerAction
|
||||
from launch.event_handlers import OnProcessStart
|
||||
from launch.substitutions import Command, FindExecutable, LaunchConfiguration, PathJoinSubstitution
|
||||
from launch_ros.actions import Node
|
||||
from launch_ros.substitutions import FindPackageShare
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
def generate_launch_description():
|
||||
|
||||
basedir = FindPackageShare("mg_wheel_interface")
|
||||
|
||||
urdfDescription = PathJoinSubstitution([basedir, "assets/mg_base.urdf"])
|
||||
yamlControllers = PathJoinSubstitution([basedir, "assets/mg_base_controllers.yaml"])
|
||||
|
||||
urdfDescription = Command([
|
||||
"cat ",
|
||||
urdfDescription
|
||||
])
|
||||
|
||||
return LaunchDescription([
|
||||
Node(
|
||||
package='robot_state_publisher',
|
||||
executable='robot_state_publisher',
|
||||
output="screen",
|
||||
parameters=[{"robot_description": urdfDescription}]
|
||||
),
|
||||
Node(
|
||||
package="controller_manager",
|
||||
executable="ros2_control_node",
|
||||
parameters=[yamlControllers],
|
||||
output="screen"
|
||||
),
|
||||
Node(
|
||||
package='controller_manager',
|
||||
executable='spawner',
|
||||
output="screen",
|
||||
arguments=["joint_state_publisher"]
|
||||
),
|
||||
Node(
|
||||
package="controller_manager",
|
||||
executable="spawner",
|
||||
arguments=["diffdrive_controller", "--param-file", yamlControllers],
|
||||
)
|
||||
])
|
||||
|
||||
28
mg_wheel_interface/package.xml
Normal file
28
mg_wheel_interface/package.xml
Normal file
@ -0,0 +1,28 @@
|
||||
<?xml version="1.0"?>
|
||||
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
|
||||
<package format="3">
|
||||
<name>mg_wheel_interface</name>
|
||||
<version>0.0.1</version>
|
||||
<description>Interacts with the wheels</description>
|
||||
<maintainer email="pimpest@pimpest.com">pimpest</maintainer>
|
||||
<license>Apache-2.0</license>
|
||||
|
||||
<buildtool_depend>ament_cmake</buildtool_depend>
|
||||
|
||||
<depend>pluginlib </depend>
|
||||
<depend>hardware_interface</depend>
|
||||
<depend>ros2launch</depend>
|
||||
<depend>controller_manager</depend>
|
||||
<depend>ros2_control</depend>
|
||||
<depend>diff_drive_controller</depend>
|
||||
<depend>robot_state_publisher</depend>
|
||||
<depend>joint_state_broadcaster</depend>
|
||||
<depend>rsl</depend>
|
||||
|
||||
<test_depend>ament_lint_auto</test_depend>
|
||||
<test_depend>ament_lint_common</test_depend>
|
||||
|
||||
<export>
|
||||
<build_type>ament_cmake</build_type>
|
||||
</export>
|
||||
</package>
|
||||
Reference in New Issue
Block a user