update
This commit is contained in:
parent
efbd53c535
commit
3e0161d016
87
config/diffbot_controllers.yaml
Normal file
87
config/diffbot_controllers.yaml
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
controller_manager:
|
||||||
|
ros__parameters:
|
||||||
|
update_rate: 100 # Hz
|
||||||
|
|
||||||
|
joint_state_broadcaster:
|
||||||
|
type: joint_state_broadcaster/JointStateBroadcaster
|
||||||
|
|
||||||
|
diffbot_base_controller:
|
||||||
|
type: diff_drive_controller/DiffDriveController
|
||||||
|
|
||||||
|
diffbot_base_controller:
|
||||||
|
ros__parameters:
|
||||||
|
# left_wheel_names: ["left_wheel_joint"]
|
||||||
|
# right_wheel_names: ["right_wheel_joint"]
|
||||||
|
|
||||||
|
right_wheel_names: ["left_wheel_joint"] # needed to switch names because motors are connected to the wrong slots
|
||||||
|
left_wheel_names: ["right_wheel_joint"]
|
||||||
|
|
||||||
|
wheel_separation: 0.28
|
||||||
|
#wheels_per_side: 1 # actually 2, but both are controlled by 1 signal
|
||||||
|
wheel_radius: 0.065
|
||||||
|
|
||||||
|
wheel_separation_multiplier: 1.0
|
||||||
|
left_wheel_radius_multiplier: -1.0
|
||||||
|
right_wheel_radius_multiplier: 1.0
|
||||||
|
|
||||||
|
publish_rate: 100.0
|
||||||
|
odom_frame_id: odom
|
||||||
|
base_frame_id: base_link
|
||||||
|
# pose_covariance_diagonal : [0.001, 0.001, 0.001, 0.001, 0.001, 0.01]
|
||||||
|
# twist_covariance_diagonal: [0.001, 0.001, 0.001, 0.001, 0.001, 0.01]
|
||||||
|
pose_covariance_diagonal:
|
||||||
|
[0.001, 0.001, 1000000.0, 1000000.0, 1000000.0, 1000.0]
|
||||||
|
twist_covariance_diagonal:
|
||||||
|
[0.001, 0.001, 1000000.0, 1000000.0, 1000000.0, 1000.0] # changed from https://github.com/kallaspriit/rosbot/blob/main/ros/src/rosbot_description/config/diff_drive_controller.yaml
|
||||||
|
|
||||||
|
open_loop: false
|
||||||
|
enable_odom_tf: true
|
||||||
|
|
||||||
|
cmd_vel_timeout: 0.5
|
||||||
|
#publish_limited_velocity: true
|
||||||
|
use_stamped_vel: false
|
||||||
|
velocity_rolling_window_size: 10 # changed from https://github.com/kallaspriit/rosbot/blob/main/ros/src/rosbot_description/config/diff_drive_controller.yaml
|
||||||
|
|
||||||
|
# preserve turning radius when limiting speed/acceleration/jerk
|
||||||
|
preserve_turning_radius: false # changed from https://github.com/kallaspriit/rosbot/blob/main/ros/src/rosbot_description/config/diff_drive_controller.yaml
|
||||||
|
|
||||||
|
# Velocity and acceleration limits
|
||||||
|
# Whenever a min_* is unspecified, default to -max_*
|
||||||
|
# linear.x.has_velocity_limits: false
|
||||||
|
# linear.x.has_acceleration_limits: false
|
||||||
|
# linear.x.has_jerk_limits: false
|
||||||
|
# linear.x.max_velocity: 2.0
|
||||||
|
# linear.x.min_velocity: -2.0
|
||||||
|
# linear.x.max_acceleration: 5.0
|
||||||
|
# linear.x.max_jerk: 0.0
|
||||||
|
# linear.x.min_jerk: 0.0
|
||||||
|
|
||||||
|
# angular.z.has_velocity_limits: false
|
||||||
|
# angular.z.has_acceleration_limits: false
|
||||||
|
# angular.z.has_jerk_limits: false
|
||||||
|
# angular.z.max_velocity: 5.0
|
||||||
|
# angular.z.min_velocity: -5.0
|
||||||
|
# angular.z.max_acceleration: 10.0
|
||||||
|
# angular.z.min_acceleration: -10.0
|
||||||
|
# angular.z.max_jerk: 0.0
|
||||||
|
# angular.z.min_jerk: 0.0
|
||||||
|
|
||||||
|
linear.x.has_velocity_limits: true
|
||||||
|
linear.x.has_acceleration_limits: false
|
||||||
|
linear.x.has_jerk_limits: false
|
||||||
|
linear.x.max_velocity: 2.0
|
||||||
|
linear.x.min_velocity: -2.0
|
||||||
|
linear.x.min_acceleration: -5.0
|
||||||
|
linear.x.max_acceleration: 5.0
|
||||||
|
linear.x.max_jerk: 0.0
|
||||||
|
linear.x.min_jerk: 0.0
|
||||||
|
|
||||||
|
angular.z.has_velocity_limits: true
|
||||||
|
angular.z.has_acceleration_limits: true
|
||||||
|
angular.z.has_jerk_limits: false
|
||||||
|
angular.z.max_velocity: 6.28
|
||||||
|
angular.z.min_velocity: -6.28
|
||||||
|
angular.z.max_acceleration: 25.0
|
||||||
|
angular.z.min_acceleration: -25.0
|
||||||
|
angular.z.max_jerk: 0.0
|
||||||
|
angular.z.min_jerk: 0.0
|
73
config/mapper_params_online_async.yaml
Normal file
73
config/mapper_params_online_async.yaml
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
slam_toolbox:
|
||||||
|
ros__parameters:
|
||||||
|
|
||||||
|
# Plugin params
|
||||||
|
solver_plugin: solver_plugins::CeresSolver
|
||||||
|
ceres_linear_solver: SPARSE_NORMAL_CHOLESKY
|
||||||
|
ceres_preconditioner: SCHUR_JACOBI
|
||||||
|
ceres_trust_strategy: LEVENBERG_MARQUARDT
|
||||||
|
ceres_dogleg_type: TRADITIONAL_DOGLEG
|
||||||
|
ceres_loss_function: None
|
||||||
|
|
||||||
|
# ROS Parameters
|
||||||
|
odom_frame: odom
|
||||||
|
map_frame: map
|
||||||
|
base_frame: base_footprint
|
||||||
|
scan_topic: /scan
|
||||||
|
mode: localization
|
||||||
|
|
||||||
|
# if you'd like to immediately start continuing a map at a given pose
|
||||||
|
# or at the dock, but they are mutually exclusive, if pose is given
|
||||||
|
# will use pose
|
||||||
|
map_file_name: /home/bjorn/Documents/ros-projects/cps_bot_mini_ws/my_map_serial
|
||||||
|
# map_start_pose: [0.0, 0.0, 0.0]
|
||||||
|
map_start_at_dock: true
|
||||||
|
|
||||||
|
debug_logging: false
|
||||||
|
throttle_scans: 1
|
||||||
|
transform_publish_period: 0.02 #if 0 never publishes odometry
|
||||||
|
map_update_interval: 5.0
|
||||||
|
resolution: 0.05
|
||||||
|
max_laser_range: 200.0 #for rastering images, standard was 20
|
||||||
|
minimum_time_interval: 0.5
|
||||||
|
transform_timeout: 0.2
|
||||||
|
tf_buffer_duration: 30.
|
||||||
|
stack_size_to_use: 40000000 #// program needs a larger stack size to serialize large maps
|
||||||
|
enable_interactive_mode: true
|
||||||
|
|
||||||
|
# General Parameters
|
||||||
|
use_scan_matching: true
|
||||||
|
use_scan_barycenter: true
|
||||||
|
minimum_travel_distance: 0.5
|
||||||
|
minimum_travel_heading: 0.5
|
||||||
|
scan_buffer_size: 10
|
||||||
|
scan_buffer_maximum_scan_distance: 10.0
|
||||||
|
link_match_minimum_response_fine: 0.1
|
||||||
|
link_scan_maximum_distance: 1.5
|
||||||
|
loop_search_maximum_distance: 3.0
|
||||||
|
do_loop_closing: true
|
||||||
|
loop_match_minimum_chain_size: 10
|
||||||
|
loop_match_maximum_variance_coarse: 3.0
|
||||||
|
loop_match_minimum_response_coarse: 0.35
|
||||||
|
loop_match_minimum_response_fine: 0.45
|
||||||
|
|
||||||
|
# Correlation Parameters - Correlation Parameters
|
||||||
|
correlation_search_space_dimension: 0.5
|
||||||
|
correlation_search_space_resolution: 0.01
|
||||||
|
correlation_search_space_smear_deviation: 0.1
|
||||||
|
|
||||||
|
# Correlation Parameters - Loop Closure Parameters
|
||||||
|
loop_search_space_dimension: 8.0
|
||||||
|
loop_search_space_resolution: 0.05
|
||||||
|
loop_search_space_smear_deviation: 0.03
|
||||||
|
|
||||||
|
# Scan Matcher Parameters
|
||||||
|
distance_variance_penalty: 0.5
|
||||||
|
angle_variance_penalty: 1.0
|
||||||
|
|
||||||
|
fine_search_angle_offset: 0.00349
|
||||||
|
coarse_search_angle_offset: 0.349
|
||||||
|
coarse_angle_resolution: 0.0349
|
||||||
|
minimum_angle_penalty: 0.9
|
||||||
|
minimum_distance_penalty: 0.5
|
||||||
|
use_response_expansion: true
|
110
launch/cam.launch.py
Normal file
110
launch/cam.launch.py
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
# Copyright 2022 Factor Robotics
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
import os
|
||||||
|
from launch import LaunchDescription
|
||||||
|
from launch.substitutions import Command, FindExecutable, PathJoinSubstitution
|
||||||
|
from launch_ros.actions import Node
|
||||||
|
from launch_ros.substitutions import FindPackageShare
|
||||||
|
from ament_index_python.packages import get_package_share_directory
|
||||||
|
from launch_ros.actions import LifecycleNode
|
||||||
|
from launch_ros.descriptions import ParameterValue
|
||||||
|
|
||||||
|
|
||||||
|
def generate_launch_description():
|
||||||
|
robot_description_content = Command(
|
||||||
|
[
|
||||||
|
PathJoinSubstitution([FindExecutable(name="xacro")]),
|
||||||
|
" ",
|
||||||
|
PathJoinSubstitution(
|
||||||
|
[
|
||||||
|
FindPackageShare("bot_mini_description"),
|
||||||
|
"urdf",
|
||||||
|
"odrive_diffbot.urdf.xacro"
|
||||||
|
]
|
||||||
|
),
|
||||||
|
]
|
||||||
|
)
|
||||||
|
robot_description = {"robot_description": ParameterValue(robot_description_content, value_type=str)}
|
||||||
|
|
||||||
|
robot_controllers = PathJoinSubstitution(
|
||||||
|
[
|
||||||
|
FindPackageShare("bot_mini_bringup"),
|
||||||
|
"config",
|
||||||
|
"diffbot_controllers.yaml",
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
control_node = Node(
|
||||||
|
package="controller_manager",
|
||||||
|
executable="ros2_control_node",
|
||||||
|
parameters=[robot_description, robot_controllers],
|
||||||
|
output="both",
|
||||||
|
)
|
||||||
|
|
||||||
|
robot_state_pub_node = Node(
|
||||||
|
package="robot_state_publisher",
|
||||||
|
executable="robot_state_publisher",
|
||||||
|
output="both",
|
||||||
|
parameters=[robot_description],
|
||||||
|
)
|
||||||
|
|
||||||
|
joint_state_broadcaster_spawner = Node(
|
||||||
|
package="controller_manager",
|
||||||
|
executable="spawner",
|
||||||
|
arguments=["joint_state_broadcaster", "-c", "/controller_manager"],
|
||||||
|
)
|
||||||
|
|
||||||
|
robot_controller_spawner = Node(
|
||||||
|
package="controller_manager",
|
||||||
|
executable="spawner",
|
||||||
|
arguments=["diffbot_base_controller", "-c", "/controller_manager"],
|
||||||
|
)
|
||||||
|
|
||||||
|
joystick_spawner = Node(
|
||||||
|
package="joy",
|
||||||
|
executable="joy_node"
|
||||||
|
)
|
||||||
|
|
||||||
|
teleop_spawner = Node(
|
||||||
|
package="rmp220_teleop",
|
||||||
|
executable="rmp220_teleop"
|
||||||
|
)
|
||||||
|
|
||||||
|
cam_node = Node(
|
||||||
|
package="ros2_cam_openCV",
|
||||||
|
executable="cam_node"
|
||||||
|
)
|
||||||
|
|
||||||
|
lidar_dir = os.path.join(get_package_share_directory('lslidar_driver'), 'params', 'lsx10.yaml')
|
||||||
|
lidar_node = LifecycleNode(
|
||||||
|
package='lslidar_driver',
|
||||||
|
executable='lslidar_driver_node',
|
||||||
|
name='lslidar_driver_node',
|
||||||
|
output='screen',
|
||||||
|
emulate_tty=True,
|
||||||
|
namespace='',
|
||||||
|
parameters=[lidar_dir],
|
||||||
|
)
|
||||||
|
|
||||||
|
return LaunchDescription([
|
||||||
|
#control_node,
|
||||||
|
#robot_state_pub_node,
|
||||||
|
#joint_state_broadcaster_spawner,
|
||||||
|
#robot_controller_spawner,
|
||||||
|
#joystick_spawner,
|
||||||
|
#teleop_spawner,
|
||||||
|
cam_node,
|
||||||
|
#lidar_node
|
||||||
|
])
|
110
launch/controller.launch.py
Normal file
110
launch/controller.launch.py
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
# Copyright 2022 Factor Robotics
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
import os
|
||||||
|
from launch import LaunchDescription
|
||||||
|
from launch.substitutions import Command, FindExecutable, PathJoinSubstitution
|
||||||
|
from launch_ros.actions import Node
|
||||||
|
from launch_ros.substitutions import FindPackageShare
|
||||||
|
from ament_index_python.packages import get_package_share_directory
|
||||||
|
from launch_ros.actions import LifecycleNode
|
||||||
|
from launch_ros.descriptions import ParameterValue
|
||||||
|
|
||||||
|
|
||||||
|
def generate_launch_description():
|
||||||
|
robot_description_content = Command(
|
||||||
|
[
|
||||||
|
PathJoinSubstitution([FindExecutable(name="xacro")]),
|
||||||
|
" ",
|
||||||
|
PathJoinSubstitution(
|
||||||
|
[
|
||||||
|
FindPackageShare("bot_mini_description"),
|
||||||
|
"urdf",
|
||||||
|
"odrive_diffbot.urdf.xacro"
|
||||||
|
]
|
||||||
|
),
|
||||||
|
]
|
||||||
|
)
|
||||||
|
robot_description = {"robot_description": ParameterValue(robot_description_content, value_type=str)}
|
||||||
|
|
||||||
|
robot_controllers = PathJoinSubstitution(
|
||||||
|
[
|
||||||
|
FindPackageShare("bot_mini_bringup"),
|
||||||
|
"config",
|
||||||
|
"diffbot_controllers.yaml",
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
control_node = Node(
|
||||||
|
package="controller_manager",
|
||||||
|
executable="ros2_control_node",
|
||||||
|
parameters=[robot_description, robot_controllers],
|
||||||
|
output="both",
|
||||||
|
)
|
||||||
|
|
||||||
|
robot_state_pub_node = Node(
|
||||||
|
package="robot_state_publisher",
|
||||||
|
executable="robot_state_publisher",
|
||||||
|
output="both",
|
||||||
|
parameters=[robot_description],
|
||||||
|
)
|
||||||
|
|
||||||
|
joint_state_broadcaster_spawner = Node(
|
||||||
|
package="controller_manager",
|
||||||
|
executable="spawner",
|
||||||
|
arguments=["joint_state_broadcaster", "-c", "/controller_manager"],
|
||||||
|
)
|
||||||
|
|
||||||
|
robot_controller_spawner = Node(
|
||||||
|
package="controller_manager",
|
||||||
|
executable="spawner",
|
||||||
|
arguments=["diffbot_base_controller", "-c", "/controller_manager"],
|
||||||
|
)
|
||||||
|
|
||||||
|
joystick_spawner = Node(
|
||||||
|
package="joy",
|
||||||
|
executable="joy_node"
|
||||||
|
)
|
||||||
|
|
||||||
|
teleop_spawner = Node(
|
||||||
|
package="rmp220_teleop",
|
||||||
|
executable="rmp220_teleop"
|
||||||
|
)
|
||||||
|
|
||||||
|
cam_node = Node(
|
||||||
|
package="ros2_cam_openCV",
|
||||||
|
executable="cam_node"
|
||||||
|
)
|
||||||
|
|
||||||
|
lidar_dir = os.path.join(get_package_share_directory('lslidar_driver'), 'params', 'lsx10.yaml')
|
||||||
|
lidar_node = LifecycleNode(
|
||||||
|
package='lslidar_driver',
|
||||||
|
executable='lslidar_driver_node',
|
||||||
|
name='lslidar_driver_node',
|
||||||
|
output='screen',
|
||||||
|
emulate_tty=True,
|
||||||
|
namespace='',
|
||||||
|
parameters=[lidar_dir],
|
||||||
|
)
|
||||||
|
|
||||||
|
return LaunchDescription([
|
||||||
|
control_node,
|
||||||
|
#robot_state_pub_node,
|
||||||
|
joint_state_broadcaster_spawner,
|
||||||
|
robot_controller_spawner,
|
||||||
|
#joystick_spawner,
|
||||||
|
#teleop_spawner,
|
||||||
|
#cam_node,
|
||||||
|
#lidar_node
|
||||||
|
])
|
110
launch/joy_teleop.launch.py
Normal file
110
launch/joy_teleop.launch.py
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
# Copyright 2022 Factor Robotics
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
import os
|
||||||
|
from launch import LaunchDescription
|
||||||
|
from launch.substitutions import Command, FindExecutable, PathJoinSubstitution
|
||||||
|
from launch_ros.actions import Node
|
||||||
|
from launch_ros.substitutions import FindPackageShare
|
||||||
|
from ament_index_python.packages import get_package_share_directory
|
||||||
|
from launch_ros.actions import LifecycleNode
|
||||||
|
from launch_ros.descriptions import ParameterValue
|
||||||
|
|
||||||
|
|
||||||
|
def generate_launch_description():
|
||||||
|
robot_description_content = Command(
|
||||||
|
[
|
||||||
|
PathJoinSubstitution([FindExecutable(name="xacro")]),
|
||||||
|
" ",
|
||||||
|
PathJoinSubstitution(
|
||||||
|
[
|
||||||
|
FindPackageShare("bot_mini_description"),
|
||||||
|
"urdf",
|
||||||
|
"odrive_diffbot.urdf.xacro"
|
||||||
|
]
|
||||||
|
),
|
||||||
|
]
|
||||||
|
)
|
||||||
|
robot_description = {"robot_description": ParameterValue(robot_description_content, value_type=str)}
|
||||||
|
|
||||||
|
robot_controllers = PathJoinSubstitution(
|
||||||
|
[
|
||||||
|
FindPackageShare("bot_mini_bringup"),
|
||||||
|
"config",
|
||||||
|
"diffbot_controllers.yaml",
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
control_node = Node(
|
||||||
|
package="controller_manager",
|
||||||
|
executable="ros2_control_node",
|
||||||
|
parameters=[robot_description, robot_controllers],
|
||||||
|
output="both",
|
||||||
|
)
|
||||||
|
|
||||||
|
robot_state_pub_node = Node(
|
||||||
|
package="robot_state_publisher",
|
||||||
|
executable="robot_state_publisher",
|
||||||
|
output="both",
|
||||||
|
parameters=[robot_description],
|
||||||
|
)
|
||||||
|
|
||||||
|
joint_state_broadcaster_spawner = Node(
|
||||||
|
package="controller_manager",
|
||||||
|
executable="spawner",
|
||||||
|
arguments=["joint_state_broadcaster", "-c", "/controller_manager"],
|
||||||
|
)
|
||||||
|
|
||||||
|
robot_controller_spawner = Node(
|
||||||
|
package="controller_manager",
|
||||||
|
executable="spawner",
|
||||||
|
arguments=["diffbot_base_controller", "-c", "/controller_manager"],
|
||||||
|
)
|
||||||
|
|
||||||
|
joystick_spawner = Node(
|
||||||
|
package="joy",
|
||||||
|
executable="joy_node"
|
||||||
|
)
|
||||||
|
|
||||||
|
teleop_spawner = Node(
|
||||||
|
package="rmp220_teleop",
|
||||||
|
executable="rmp220_teleop"
|
||||||
|
)
|
||||||
|
|
||||||
|
cam_node = Node(
|
||||||
|
package="ros2_cam_openCV",
|
||||||
|
executable="cam_node"
|
||||||
|
)
|
||||||
|
|
||||||
|
lidar_dir = os.path.join(get_package_share_directory('lslidar_driver'), 'params', 'lsx10.yaml')
|
||||||
|
lidar_node = LifecycleNode(
|
||||||
|
package='lslidar_driver',
|
||||||
|
executable='lslidar_driver_node',
|
||||||
|
name='lslidar_driver_node',
|
||||||
|
output='screen',
|
||||||
|
emulate_tty=True,
|
||||||
|
namespace='',
|
||||||
|
parameters=[lidar_dir],
|
||||||
|
)
|
||||||
|
|
||||||
|
return LaunchDescription([
|
||||||
|
#control_node,
|
||||||
|
#robot_state_pub_node,
|
||||||
|
#joint_state_broadcaster_spawner,
|
||||||
|
#robot_controller_spawner,
|
||||||
|
joystick_spawner,
|
||||||
|
teleop_spawner,
|
||||||
|
#cam_node,
|
||||||
|
#lidar_node
|
||||||
|
])
|
110
launch/lidar.launch.py
Normal file
110
launch/lidar.launch.py
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
# Copyright 2022 Factor Robotics
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
import os
|
||||||
|
from launch import LaunchDescription
|
||||||
|
from launch.substitutions import Command, FindExecutable, PathJoinSubstitution
|
||||||
|
from launch_ros.actions import Node
|
||||||
|
from launch_ros.substitutions import FindPackageShare
|
||||||
|
from ament_index_python.packages import get_package_share_directory
|
||||||
|
from launch_ros.actions import LifecycleNode
|
||||||
|
from launch_ros.descriptions import ParameterValue
|
||||||
|
|
||||||
|
|
||||||
|
def generate_launch_description():
|
||||||
|
robot_description_content = Command(
|
||||||
|
[
|
||||||
|
PathJoinSubstitution([FindExecutable(name="xacro")]),
|
||||||
|
" ",
|
||||||
|
PathJoinSubstitution(
|
||||||
|
[
|
||||||
|
FindPackageShare("bot_mini_description"),
|
||||||
|
"urdf",
|
||||||
|
"odrive_diffbot.urdf.xacro"
|
||||||
|
]
|
||||||
|
),
|
||||||
|
]
|
||||||
|
)
|
||||||
|
robot_description = {"robot_description": ParameterValue(robot_description_content, value_type=str)}
|
||||||
|
|
||||||
|
robot_controllers = PathJoinSubstitution(
|
||||||
|
[
|
||||||
|
FindPackageShare("bot_mini_bringup"),
|
||||||
|
"config",
|
||||||
|
"diffbot_controllers.yaml",
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
control_node = Node(
|
||||||
|
package="controller_manager",
|
||||||
|
executable="ros2_control_node",
|
||||||
|
parameters=[robot_description, robot_controllers],
|
||||||
|
output="both",
|
||||||
|
)
|
||||||
|
|
||||||
|
robot_state_pub_node = Node(
|
||||||
|
package="robot_state_publisher",
|
||||||
|
executable="robot_state_publisher",
|
||||||
|
output="both",
|
||||||
|
parameters=[robot_description],
|
||||||
|
)
|
||||||
|
|
||||||
|
joint_state_broadcaster_spawner = Node(
|
||||||
|
package="controller_manager",
|
||||||
|
executable="spawner",
|
||||||
|
arguments=["joint_state_broadcaster", "-c", "/controller_manager"],
|
||||||
|
)
|
||||||
|
|
||||||
|
robot_controller_spawner = Node(
|
||||||
|
package="controller_manager",
|
||||||
|
executable="spawner",
|
||||||
|
arguments=["diffbot_base_controller", "-c", "/controller_manager"],
|
||||||
|
)
|
||||||
|
|
||||||
|
joystick_spawner = Node(
|
||||||
|
package="joy",
|
||||||
|
executable="joy_node"
|
||||||
|
)
|
||||||
|
|
||||||
|
teleop_spawner = Node(
|
||||||
|
package="rmp220_teleop",
|
||||||
|
executable="rmp220_teleop"
|
||||||
|
)
|
||||||
|
|
||||||
|
cam_node = Node(
|
||||||
|
package="ros2_cam_openCV",
|
||||||
|
executable="cam_node"
|
||||||
|
)
|
||||||
|
|
||||||
|
lidar_dir = os.path.join(get_package_share_directory('lslidar_driver'), 'params', 'lsx10.yaml')
|
||||||
|
lidar_node = LifecycleNode(
|
||||||
|
package='lslidar_driver',
|
||||||
|
executable='lslidar_driver_node',
|
||||||
|
name='lslidar_driver_node',
|
||||||
|
output='screen',
|
||||||
|
emulate_tty=True,
|
||||||
|
namespace='',
|
||||||
|
parameters=[lidar_dir],
|
||||||
|
)
|
||||||
|
|
||||||
|
return LaunchDescription([
|
||||||
|
#control_node,
|
||||||
|
#robot_state_pub_node,
|
||||||
|
#joint_state_broadcaster_spawner,
|
||||||
|
#robot_controller_spawner,
|
||||||
|
#joystick_spawner,
|
||||||
|
#teleop_spawner,
|
||||||
|
#cam_node,
|
||||||
|
lidar_node
|
||||||
|
])
|
131
launch/mapper.launch.py
Normal file
131
launch/mapper.launch.py
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
# Copyright 2022 Factor Robotics
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
import os
|
||||||
|
from launch import LaunchDescription
|
||||||
|
from launch.substitutions import Command, FindExecutable, PathJoinSubstitution
|
||||||
|
from launch_ros.actions import Node
|
||||||
|
from launch_ros.substitutions import FindPackageShare
|
||||||
|
from ament_index_python.packages import get_package_share_directory
|
||||||
|
from launch_ros.actions import LifecycleNode
|
||||||
|
from launch_ros.descriptions import ParameterValue
|
||||||
|
from launch.substitutions import LaunchConfiguration
|
||||||
|
|
||||||
|
|
||||||
|
def generate_launch_description():
|
||||||
|
robot_description_content = Command(
|
||||||
|
[
|
||||||
|
PathJoinSubstitution([FindExecutable(name="xacro")]),
|
||||||
|
" ",
|
||||||
|
PathJoinSubstitution(
|
||||||
|
[
|
||||||
|
FindPackageShare("bot_mini_description"),
|
||||||
|
"urdf",
|
||||||
|
"odrive_diffbot.urdf.xacro"
|
||||||
|
]
|
||||||
|
),
|
||||||
|
]
|
||||||
|
)
|
||||||
|
robot_description = {"robot_description": ParameterValue(robot_description_content, value_type=str)}
|
||||||
|
|
||||||
|
robot_controllers = PathJoinSubstitution(
|
||||||
|
[
|
||||||
|
FindPackageShare("bot_mini_bringup"),
|
||||||
|
"config",
|
||||||
|
"diffbot_controllers.yaml",
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
control_node = Node(
|
||||||
|
package="controller_manager",
|
||||||
|
executable="ros2_control_node",
|
||||||
|
parameters=[robot_description, robot_controllers],
|
||||||
|
output="both",
|
||||||
|
)
|
||||||
|
|
||||||
|
robot_state_pub_node = Node(
|
||||||
|
package="robot_state_publisher",
|
||||||
|
executable="robot_state_publisher",
|
||||||
|
output="both",
|
||||||
|
parameters=[robot_description],
|
||||||
|
)
|
||||||
|
|
||||||
|
joint_state_broadcaster_spawner = Node(
|
||||||
|
package="controller_manager",
|
||||||
|
executable="spawner",
|
||||||
|
arguments=["joint_state_broadcaster", "-c", "/controller_manager"],
|
||||||
|
)
|
||||||
|
|
||||||
|
robot_controller_spawner = Node(
|
||||||
|
package="controller_manager",
|
||||||
|
executable="spawner",
|
||||||
|
arguments=["diffbot_base_controller", "-c", "/controller_manager"],
|
||||||
|
)
|
||||||
|
|
||||||
|
joystick_spawner = Node(
|
||||||
|
package="joy",
|
||||||
|
executable="joy_node"
|
||||||
|
)
|
||||||
|
|
||||||
|
teleop_spawner = Node(
|
||||||
|
package="rmp220_teleop",
|
||||||
|
executable="rmp220_teleop"
|
||||||
|
)
|
||||||
|
|
||||||
|
cam_node = Node(
|
||||||
|
package="ros2_cam_openCV",
|
||||||
|
executable="cam_node"
|
||||||
|
)
|
||||||
|
|
||||||
|
use_sim_time = True
|
||||||
|
slam_params_file = PathJoinSubstitution(
|
||||||
|
[
|
||||||
|
FindPackageShare("bot_mini_bringup"),
|
||||||
|
"config",
|
||||||
|
"mapper_params_online_async.yaml"
|
||||||
|
]
|
||||||
|
)
|
||||||
|
mapper_node = Node(
|
||||||
|
package="slam_toolbox",
|
||||||
|
executable="async_slam_toolbox_node",
|
||||||
|
name='slam_toolbox_node',
|
||||||
|
output='screen',
|
||||||
|
parameters=[
|
||||||
|
slam_params_file,
|
||||||
|
{'use_sim_time': use_sim_time}
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
lidar_dir = os.path.join(get_package_share_directory('lslidar_driver'), 'params', 'lsx10.yaml')
|
||||||
|
lidar_node = LifecycleNode(
|
||||||
|
package='lslidar_driver',
|
||||||
|
executable='lslidar_driver_node',
|
||||||
|
name='lslidar_driver_node',
|
||||||
|
output='screen',
|
||||||
|
emulate_tty=True,
|
||||||
|
namespace='',
|
||||||
|
parameters=[lidar_dir],
|
||||||
|
)
|
||||||
|
|
||||||
|
return LaunchDescription([
|
||||||
|
#control_node,
|
||||||
|
#robot_state_pub_node,
|
||||||
|
#joint_state_broadcaster_spawner,
|
||||||
|
#robot_controller_spawner,
|
||||||
|
#joystick_spawner,
|
||||||
|
#teleop_spawner,
|
||||||
|
#cam_node,
|
||||||
|
#lidar_node,
|
||||||
|
mapper_node
|
||||||
|
])
|
110
launch/rsp.launch.py
Normal file
110
launch/rsp.launch.py
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
# Copyright 2022 Factor Robotics
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
import os
|
||||||
|
from launch import LaunchDescription
|
||||||
|
from launch.substitutions import Command, FindExecutable, PathJoinSubstitution
|
||||||
|
from launch_ros.actions import Node
|
||||||
|
from launch_ros.substitutions import FindPackageShare
|
||||||
|
from ament_index_python.packages import get_package_share_directory
|
||||||
|
from launch_ros.actions import LifecycleNode
|
||||||
|
from launch_ros.descriptions import ParameterValue
|
||||||
|
|
||||||
|
|
||||||
|
def generate_launch_description():
|
||||||
|
robot_description_content = Command(
|
||||||
|
[
|
||||||
|
PathJoinSubstitution([FindExecutable(name="xacro")]),
|
||||||
|
" ",
|
||||||
|
PathJoinSubstitution(
|
||||||
|
[
|
||||||
|
FindPackageShare("bot_mini_description"),
|
||||||
|
"urdf",
|
||||||
|
"odrive_diffbot.urdf.xacro"
|
||||||
|
]
|
||||||
|
),
|
||||||
|
]
|
||||||
|
)
|
||||||
|
robot_description = {"robot_description": ParameterValue(robot_description_content, value_type=str)}
|
||||||
|
|
||||||
|
robot_controllers = PathJoinSubstitution(
|
||||||
|
[
|
||||||
|
FindPackageShare("bot_mini_bringup"),
|
||||||
|
"config",
|
||||||
|
"diffbot_controllers.yaml",
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
control_node = Node(
|
||||||
|
package="controller_manager",
|
||||||
|
executable="ros2_control_node",
|
||||||
|
parameters=[robot_description, robot_controllers],
|
||||||
|
output="both",
|
||||||
|
)
|
||||||
|
|
||||||
|
robot_state_pub_node = Node(
|
||||||
|
package="robot_state_publisher",
|
||||||
|
executable="robot_state_publisher",
|
||||||
|
output="both",
|
||||||
|
parameters=[robot_description],
|
||||||
|
)
|
||||||
|
|
||||||
|
joint_state_broadcaster_spawner = Node(
|
||||||
|
package="controller_manager",
|
||||||
|
executable="spawner",
|
||||||
|
arguments=["joint_state_broadcaster", "-c", "/controller_manager"],
|
||||||
|
)
|
||||||
|
|
||||||
|
robot_controller_spawner = Node(
|
||||||
|
package="controller_manager",
|
||||||
|
executable="spawner",
|
||||||
|
arguments=["diffbot_base_controller", "-c", "/controller_manager"],
|
||||||
|
)
|
||||||
|
|
||||||
|
joystick_spawner = Node(
|
||||||
|
package="joy",
|
||||||
|
executable="joy_node"
|
||||||
|
)
|
||||||
|
|
||||||
|
teleop_spawner = Node(
|
||||||
|
package="rmp220_teleop",
|
||||||
|
executable="rmp220_teleop"
|
||||||
|
)
|
||||||
|
|
||||||
|
cam_node = Node(
|
||||||
|
package="ros2_cam_openCV",
|
||||||
|
executable="cam_node"
|
||||||
|
)
|
||||||
|
|
||||||
|
lidar_dir = os.path.join(get_package_share_directory('lslidar_driver'), 'params', 'lsx10.yaml')
|
||||||
|
lidar_node = LifecycleNode(
|
||||||
|
package='lslidar_driver',
|
||||||
|
executable='lslidar_driver_node',
|
||||||
|
name='lslidar_driver_node',
|
||||||
|
output='screen',
|
||||||
|
emulate_tty=True,
|
||||||
|
namespace='',
|
||||||
|
parameters=[lidar_dir],
|
||||||
|
)
|
||||||
|
|
||||||
|
return LaunchDescription([
|
||||||
|
#control_node,
|
||||||
|
robot_state_pub_node,
|
||||||
|
#joint_state_broadcaster_spawner,
|
||||||
|
#robot_controller_spawner,
|
||||||
|
#joystick_spawner,
|
||||||
|
#teleop_spawner,
|
||||||
|
#cam_node,
|
||||||
|
#lidar_node
|
||||||
|
])
|
1
setup.py
1
setup.py
@ -13,6 +13,7 @@ setup(
|
|||||||
['resource/' + package_name]),
|
['resource/' + package_name]),
|
||||||
('share/' + package_name, ['package.xml']),
|
('share/' + package_name, ['package.xml']),
|
||||||
(os.path.join('share', package_name), glob('launch/*.launch.py')),
|
(os.path.join('share', package_name), glob('launch/*.launch.py')),
|
||||||
|
(os.path.join('share', package_name, 'config'), glob('config/*.yaml'))
|
||||||
],
|
],
|
||||||
install_requires=['setuptools'],
|
install_requires=['setuptools'],
|
||||||
zip_safe=True,
|
zip_safe=True,
|
||||||
|
Loading…
Reference in New Issue
Block a user