RobotnikAutomation / robotnik_base_hw

ROS controller based on ros_control architecture
6 stars 7 forks source link

Noetic port of ```robotnik_base_hw_lib```? #14

Open Mechazo11 opened 4 months ago

Mechazo11 commented 4 months ago

Hello @RomanRobotnik,

We have two RBKAIROS units in the iCORE Lab at Louisiana State University. We are working on a large scale project and need to bring all systems (summit_xl, 3d reconstruction, etc) components into ROS Noetic.

We have gotten quite far but have recently faced an issue compiling the robotnik_base_hw package. It appears to have a dependency on the robotnik_base_hw_lib that had an update last year but was still meant for Melodic.

Is there a Noetic version of this .deb file? If not, what may be the general procedure to fix the dependency issues and convert it back to a .deb suitable for ROS Noetic?

Thank you for your time.

With best regards, @Mechazo11

RomanRobotnik commented 4 months ago

Hi @Mechazo11,

Sure, my colleague @robert-ros will provide everything you need.

Best regards,

Román

Mechazo11 commented 4 months ago

@RomanRobotnik thank you very much for connecting me with @robert-ros

Hi @robert-ros if you would kindly share the .deb file for robotnik_base_hw_lib I can go ahead and test it with the noetic port we are working on in our lab.

With best, @Mechazo11

jamendezib commented 3 months ago

Hi @Mechazo11

I have uploaded our latest .deb file to the lib folder in this branch: https://github.com/RobotnikAutomation/robotnik_base_hw/tree/fix/noetic_lib

Mechazo11 commented 3 months ago

@jamendezib thank you very much. I will test it right away and report back if the issue gets resolved.

Mechazo11 commented 3 months ago

@jamendezib Where can I find the ros-noetic-robotnik-msgs package?

Screenshot from 2024-05-16 10-45-52

jamendezib commented 3 months ago

@Mechazo11 I have updated the branch with robotnik_msgs deb

Mechazo11 commented 3 months ago

@jamendezib thank you very much, I shall let you know if the issue gets resolved

Mechazo11 commented 3 months ago

Hi @jamendezib and @RomanRobotnik, robotnik_base_hw with the two .deb files provided for noetic, now builds successfully.

I will report back if any further issues arises for the robotnik_base_hw package in Noetic. Thank you very much for promptly helping us resolve this issue.

Mechazo11 commented 1 month ago

Hi @robert-ros,

Thank you very much for helping me with the build problem back in May. Presently I can build the entire catkin_ws in after carefully updating a number of packages to their Noetic version. But when trying to launch the various subsystems using ./bringup.sh or roslaunch robot_bringup robot_complete.launch I am seeing this fatal run time error.

[ERROR] [1723151172.526408854]: RobotnikBaseHW::Constructor: Error while reading joint_inputs_per_driver parameter. I expect to read one value (for legacy behaviour) or as much as joints are there (2), but I have read 0.
[ERROR] [1723151172.526848132]: RobotnikBaseHW::Constructor: Error while reading joint_outputs_per_driver parameter. I expect to read one value (for legacy behaviour) or as much as joints are there (2), but I have read 0.
[ERROR] [1723151172.527284330]: RobotnikBaseHW::Constructor: Error while reading joint_analog_inputs_per_driver parameter. I expect to read one value (for legacy behaviour) or as much as joints are there (2), but I have read 0.
[ INFO] [1723151172.528547095]: RobotnikBaseHW::readParam: No multiple PID's params read!
[ WARN] [1723151172.537576167]: RobotnikBaseHW::Constructor: the param motors_encoder is DEPRECATED, please use directly the param joint_encoder_resolution.
[ WARN] [1723151172.537880063]: RobotnikBaseHW::Constructor: the param motors_encoder_factor is DEPRECATED, please use directly the param joint_encoder_resolution.

I have isolated the problem the point where robot_complete.launch attempts to launch nodes from robotnik_hw_base pkg using the following

<!-- start robotnik_base_hw node -->
    <include file="$(find robot_bringup)/launch/bringup/robotnik_base_hw.launch">
      <arg name="prefix" value="$(arg prefix)"/>
      <arg name="battery_voltage_offset" value="$(arg battery_voltage_offset)"/>
    </include>

Can you help me in solving this problem? Best regards, @Mechazo11

Mechazo11 commented 4 weeks ago

Hello, To investigate further what the above error is I tried to launch robotnik_hw_base by itself. Shown below is the console output

robot@SXLSK-210223AB:~$ roslaunch robot_bringup robotnik_base_hw.launch 
... logging to /home/robot/.ros/log/ca92a650-5a7e-11ef-8d5c-93bd4df24cd5/roslaunch-SXLSK-210223AB-5962.log
Checking log directory for disk usage. This may take a while.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

started roslaunch server http://SXLSK-210223AB:43533/

SUMMARY
========

PARAMETERS
 * /generic_hw_control_loop/cycle_time_error_threshold: 0.01
 * /generic_hw_control_loop/loop_hz: 300
 * /hardware_interface/joints: ['robot_front_rig...
 * /joint_limits/robot_back_left_wheel_joint/has_acceleration_limits: False
 * /joint_limits/robot_back_left_wheel_joint/has_effort_limits: False
 * /joint_limits/robot_back_left_wheel_joint/has_jerk_limits: False
 * /joint_limits/robot_back_left_wheel_joint/has_position_limits: False
 * /joint_limits/robot_back_left_wheel_joint/has_velocity_limits: True
 * /joint_limits/robot_back_left_wheel_joint/max_acceleration: 27.27
 * /joint_limits/robot_back_left_wheel_joint/max_velocity: 27.27
 * /joint_limits/robot_back_right_wheel_joint/has_acceleration_limits: False
 * /joint_limits/robot_back_right_wheel_joint/has_effort_limits: False
 * /joint_limits/robot_back_right_wheel_joint/has_jerk_limits: False
 * /joint_limits/robot_back_right_wheel_joint/has_position_limits: False
 * /joint_limits/robot_back_right_wheel_joint/has_velocity_limits: True
 * /joint_limits/robot_back_right_wheel_joint/max_acceleration: 27.27
 * /joint_limits/robot_back_right_wheel_joint/max_velocity: 27.27
 * /joint_limits/robot_front_left_wheel_joint/has_acceleration_limits: False
 * /joint_limits/robot_front_left_wheel_joint/has_effort_limits: False
 * /joint_limits/robot_front_left_wheel_joint/has_jerk_limits: False
 * /joint_limits/robot_front_left_wheel_joint/has_position_limits: False
 * /joint_limits/robot_front_left_wheel_joint/has_velocity_limits: True
 * /joint_limits/robot_front_left_wheel_joint/max_acceleration: 27.27
 * /joint_limits/robot_front_left_wheel_joint/max_velocity: 27.27
 * /joint_limits/robot_front_right_wheel_joint/has_acceleration_limits: False
 * /joint_limits/robot_front_right_wheel_joint/has_effort_limits: False
 * /joint_limits/robot_front_right_wheel_joint/has_jerk_limits: False
 * /joint_limits/robot_front_right_wheel_joint/has_position_limits: False
 * /joint_limits/robot_front_right_wheel_joint/has_velocity_limits: True
 * /joint_limits/robot_front_right_wheel_joint/max_acceleration: 27.27
 * /joint_limits/robot_front_right_wheel_joint/max_velocity: 27.27
 * /robotnik_base_hw/auto_restart: True
 * /robotnik_base_hw/calculate_vel_using_pose: True
 * /robotnik_base_hw/gearbox_ratio: 9.56
 * /robotnik_base_hw/joint_can_id: [1, 2, 3, 4]
 * /robotnik_base_hw/joint_home_offset: [0, 0, 0, 0]
 * /robotnik_base_hw/joint_name: ['robot_front_lef...
 * /robotnik_base_hw/joint_spin: [1, 1, -1, -1]
 * /robotnik_base_hw/joint_type: ['vel', 'vel', 'v...
 * /robotnik_base_hw/k_analog_inputs_multipliers: [16.61, -12.5, 1....
 * /robotnik_base_hw/k_battery_voltage_offset: 0.0
 * /robotnik_base_hw/motors_encoder: True
 * /robotnik_base_hw/motors_encoder_factor: 4000
 * /robotnik_base_hw/port: /dev/pcan_base
 * /robotnik_base_hw/recovery_period: 30
 * /rosdistro: noetic
 * /rosversion: 1.16.0

NODES
  /
    robotnik_base_hw (robotnik_base_hw/robotnik_base_hw_node)

auto-starting new master
process[master]: started with pid [5970]
ROS_MASTER_URI=http://localhost:11311

setting /run_id to ca92a650-5a7e-11ef-8d5c-93bd4df24cd5
process[rosout-1]: started with pid [5980]
started core service [/rosout]
process[robotnik_base_hw-2]: started with pid [5987]
[ INFO] [1723668609.115183887]: RobotnikBaseHW::Constructor: Port: /dev/pcan_base
[ERROR] [1723668609.120209900]: RobotnikBaseHW::Constructor: Error while reading joint_inputs_per_driver parameter. I expect to read one value (for legacy behaviour) or as much as joints are there (4), but I have read 0.
[ERROR] [1723668609.120503262]: RobotnikBaseHW::Constructor: Error while reading joint_outputs_per_driver parameter. I expect to read one value (for legacy behaviour) or as much as joints are there (4), but I have read 0.
[ERROR] [1723668609.120786201]: RobotnikBaseHW::Constructor: Error while reading joint_analog_inputs_per_driver parameter. I expect to read one value (for legacy behaviour) or as much as joints are there (4), but I have read 0.
[ INFO] [1723668609.122092292]: RobotnikBaseHW::readParam: No multiple PID's params read!
[ WARN] [1723668609.128970542]: RobotnikBaseHW::Constructor: the param motors_encoder is DEPRECATED, please use directly the param joint_encoder_resolution.
[ WARN] [1723668609.129200687]: RobotnikBaseHW::Constructor: the param motors_encoder_factor is DEPRECATED, please use directly the param joint_encoder_resolution.
[ INFO] [1723668609.135047263]: RobotnikBaseHW::loadURDF: Waiting for model URDF on the ROS param server at location: /robot_description
[ INFO] [1723668609.237096779]: RobotnikBaseHW::loadURDF: Waiting for model URDF on the ROS param server at location: /robot_description
[ INFO] [1723668609.340000455]: RobotnikBaseHW::loadURDF: Waiting for model URDF on the ROS param server at location: /robot_description
[ INFO] [1723668609.442850362]: RobotnikBaseHW::loadURDF: Waiting for model URDF on the ROS param server at location: /robot_description
[ INFO] [1723668609.545602606]: RobotnikBaseHW::loadURDF: Waiting for model URDF on the ROS param server at location: /robot_description
[ INFO] [1723668609.648319958]: RobotnikBaseHW::loadURDF: Waiting for model URDF on the ROS param server at location: /robot_description
^C[robotnik_base_hw-2] killing on exit
[ INFO] [1723668609.706190626]: RobotnikBaseHW::loadURDF: Waiting for model URDF on the ROS param server at location: /robot_description
[rosout-1] killing on exit
[master] killing on exit
shutting down processing monitor...
... shutting down processing monitor complete
done

I have traced the origin of the error from the binary files of robotnik_hardware_base_lib. Can you help with this error?

With best regards, @Mechazo11

jamendezib commented 3 weeks ago

Hi @Mechazo11,

Could you show me if possible the launch file robotnik_base_hw.launch and the yaml files that it is loading?

Mechazo11 commented 3 weeks ago

Hi @jamendezib

Following, in sequence, are the robotnik_base_hw.launch and the yaml files

robotnik_base_hw.launch

<?xml version="1.0"?>
<launch>
    <arg name="id_robot" default="$(optenv ROBOT_ID robot)"/>
    <arg name="prefix" default="$(arg id_robot)_"/>

    <!-- GDB functionality -->
    <arg name="debug" default="false" />
    <arg unless="$(arg debug)" name="launch_prefix" value="" />
    <arg     if="$(arg debug)" name="launch_prefix" value="terminator -m -x gdb --args" /> <!-- local debug -->
    <!--arg     if="$(arg debug)" name="launch_prefix" value="screen -d -m gdb - -args" / --> <!-- ssh/screen debug -->

    <!-- Values to multiply on IO raw data received -->
    <arg name="k_analog_inputs_multipliers" value="$(optenv ROBOT_K_ANALOG_INPUTS_MULTIPLIERS [1.0, 1.0, 1.0, 1.0])" />
    <arg name="robot_gearbox" default="$(optenv ROBOT_GEARBOX 12.52)"/>
    <arg name="has_encoder" default="$(optenv ROBOT_HAS_ENCODER false)"/>
    <arg name="battery_voltage_offset" default="$(optenv ROBOT_BASE_HW_BATTERY_VOLTAGE_OFFSET 0.0)"/>

    <rosparam file="$(find robot_bringup)/config/bringup/robotnik_base_hw/robotnik_base_hw_limits.yaml" command="load" subst_value="true"/>
    <rosparam file="$(find robot_bringup)/config/bringup/robotnik_base_hw/robotnik_base_hw.yaml" command="load" subst_value="true"/>

    <node name="robotnik_base_hw" pkg="robotnik_base_hw" type="robotnik_base_hw_node" output="screen" launch-prefix="$(arg launch_prefix)"/>

</launch>

robotnik_base_hw_limits.yaml


joint_limits:
  $(arg prefix)front_left_wheel_joint:
    has_position_limits: false
    has_velocity_limits: true
    max_velocity: 27.27   # 3 m/s = 27.27
    has_acceleration_limits: false
    max_acceleration: 27.27
    has_jerk_limits: false
    has_effort_limits: false

  $(arg prefix)front_right_wheel_joint:
    has_position_limits: false
    has_velocity_limits: true
    max_velocity: 27.27
    has_acceleration_limits: false
    max_acceleration: 27.27
    has_jerk_limits: false
    has_effort_limits: false

  $(arg prefix)back_left_wheel_joint:
    has_position_limits: false
    has_velocity_limits: true
    max_velocity: 27.27
    has_acceleration_limits: false
    max_acceleration: 27.27
    has_jerk_limits: false
    has_effort_limits: false

  $(arg prefix)back_right_wheel_joint:
    has_position_limits: false
    has_velocity_limits: true
    max_velocity: 27.27
    has_acceleration_limits: false
    max_acceleration: 27.27
    has_jerk_limits: false
    has_effort_limits: false

robotnik_base_hw.yaml


robotnik_base_hw:
  port: /dev/pcan_base

  # Auto-recovery behaviour when motors are in EMERGENCY and cannot recover by themselves
  auto_restart: true
  recovery_period: 30

  # Use encoder position instead of velocity for motor velocity calculation
  calculate_vel_using_pose: $(arg has_encoder)
  # 24V motors: 12.52, 48V motors: 9.56
  gearbox_ratio: $(arg robot_gearbox)
  # Be carefull if motors don't have enconders and you put motors_enconder: true speed will increase x 4000
  motors_encoder: $(arg has_encoder)
  motors_encoder_factor: 4000

  joint_name: [$(arg prefix)front_left_wheel_joint,$(arg prefix)back_left_wheel_joint,$(arg prefix)front_right_wheel_joint,$(arg prefix)back_right_wheel_joint]
  joint_can_id: [1,2,3,4]
  joint_type: [vel,vel,vel,vel]
  joint_home_offset: [0,0,0,0]
  joint_spin: [1,1,-1,-1]

  # Values to multiply on IO raw data received
  k_analog_inputs_multipliers: $(arg k_analog_inputs_multipliers)
  k_battery_voltage_offset: $(arg battery_voltage_offset)

generic_hw_control_loop:
  loop_hz: 300 
  cycle_time_error_threshold: 0.01

# Settings for ros_control hardware interface
hardware_interface:
  joints:
     - $(arg prefix)front_right_wheel_joint
     - $(arg prefix)front_left_wheel_joint
     - $(arg prefix)back_right_wheel_joint
     - $(arg prefix)back_left_wheel_joint

Please don't hesitate to reach out if you need further information.

With best, @Mechazo11

jamendezib commented 3 weeks ago

Hi @Mechazo11

Do you also have a folder called robot_params with a file called robot_params.env or rbkairos_params.env? If so, please share the file content with me.

Mechazo11 commented 3 weeks ago

Yes we have ros_params in /home/robot/robot_params.

robot_parms.env

# String. Robot prefix and namespace to be used
#export ROBOT_ID=robot_0 # Centralized, multi agent communication
export ROBOT_ID=robot

# String. Available robot models: rb1_base, summit_xl, summit_xl_steel, rbkairos, rbcar
export ROBOT_MODEL=rbkairos

# String. Specific xacro to be used (has to exist in the descption package)
export ROBOT_XACRO=rbkairos_iiwa_plus.urdf.xacro

# String. Kinematics: diff, omni, ackermann
export ROBOT_KINEMATICS=diff

# Double. Motor gearbox
# 24V motors: 12.52, 48V motors: 9.56
export ROBOT_GEARBOX=9.56
# Diameter depending on the robot model
# Summit: std diameters: 0.22 rubber wheel, 0.2552 mecanuum wheel
export ROBOT_WHEEL_DIAMETER=0.235
# Summit XL: 0.471, Summit XLS and RB-Kairos 0.538
export ROBOT_TRACK_WIDTH=0.538
# Summit XL: 0.45, Summit XLS and RB-Kairos 0.43
export ROBOT_WHEEL_BASE=0.43

# Bool. Flag to set the robot has elevator (normally to pick & place carts)
export ROBOT_HAS_ELEVATOR=false
# Bool. Flag to set whether or not the motors have encoders
export ROBOT_HAS_ENCODER=true
# Bool. If it has safety lasers and/or safety plc
export ROBOT_HAS_SAFETY_MODULE=false
# String. Different safety configurations based on laser safety laser
# sick_microscan3, sick_s300
export ROBOT_SAFETY_LASER_MODEL=sick_microscan3

# BASE_HW
# Double. The real battery voltage (multimeter) minus the one returned by the drive
export ROBOT_BASE_HW_BATTERY_VOLTAGE_OFFSET=0.0
# Double. K multipliers for analog inputs. Example = [6.978947368,-12.5,1.0,1.0]
export ROBOT_K_ANALOG_INPUTS_MULTIPLIERS=[16.61,-12.5,1.0,1.0]

# none, ps4
export ROBOT_PAD_MODEL=ps4
export ROBOT_PAD_DEADZONE=0.12
export ROBOT_PAD_DEV=/dev/input/js_base

# true, false
export ROBOT_HAS_LEDS=true
export ROBOT_LEDS_PORT=/dev/ttyUSB_LEDS

rbkairos_params.env was found in /home/robot/catkin_ws/src/summit_packages_release/robot/summit_xl_robot/summit_xl_bringup/env/ and its contents are as follows


export ROBOT_ID=robot
# summit_xl, rbkairos, summit_xl_gen
export ROBOT_MODEL=rbkairos
# summit_xl_std.urdf.xacro
export ROBOT_XACRO=rbkairos_ur5.urdf.xacro

# true, false
export ROBOT_HAS_FRONT_LASER=true
# sick_tim561, hokuyo, ydlidar_f4, sick_s300, sick_microscan3
export ROBOT_FRONT_LASER_MODEL=sick_microscan3
export ROBOT_FRONT_LASER_IP=192.168.0.10

# true, false
export ROBOT_HAS_REAR_LASER=true
# sick_tim561, hokuyo, ydlidar_f4, sick_s300, sick_microscan3
export ROBOT_REAR_LASER_MODEL=sick_microscan3
export ROBOT_REAR_LASER_IP=192.168.0.11
# Merge laser scans? (true/false)
export ROBOT_MERGE_LASERS=true

# true, false
export ROBOT_HAS_FRONT_PTZ_CAMERA=false
export ROBOT_FRONT_PTZ_CAMERA_IP=192.168.0.185
export ROBOT_FRONT_PTZ_CAMERA_MODEL=axis_m5013

# true, false
export ROBOT_HAS_REAR_PTZ_CAMERA=false
export ROBOT_REAR_PTZ_CAMERA_IP=192.168.0.186
export ROBOT_REAR_PTZ_CAMERA_MODEL=axis_m5013

# true, false
export ROBOT_HAS_FRONT_RGBD_CAMERA=true
# usb bus
#export ROBOT_FRONT_RGBD_CAMERA_ID=#1
# orbbec, zed
export ROBOT_FRONT_RGBD_CAMERA_MODEL=orbbec
# true, false
export ROBOT_FRONT_RGBD_CAMERA_IS_REMOTE=false
# jetson-robotnik
export ROBOT_FRONT_RGBD_CAMERA_MACHINE_NAME=jetson-robotnik

# true, false
export ROBOT_HAS_REAR_RGBD_CAMERA=false
# usb bus
#export ROBOT_REAR_RGBD_CAMERA_ID=#1
# orbbec, zed
export ROBOT_REAR_RGBD_CAMERA_MODEL=orbbec
# true, false
export ROBOT_REAR_RGBD_CAMERA_IS_REMOTE=false
# jetson-robotnik
export ROBOT_REAR_RGBD_CAMERA_MACHINE_NAME=jetson-robotnik

# pixhawk, vectornav, myahrs
export ROBOT_IMU_MODEL=pixhawk
export ROBOT_IMU_PORT=/dev/ttyUSB_IMU

# ps3, ps4 (default)
export ROBOT_PAD_MODEL=ps4
# 24V motors: 12.52, 48V motors: 9.56
export ROBOT_GEARBOX=9.56
# true, false
export ROBOT_HAS_ENCODER=true
# skid, omni
export ROBOT_KINEMATICS=omni
# Flag to set if the robot is differential
export ROBOT_DIFFERENTIAL_KINEMATICS=false
# std diameters: 0.22 rubber wheel, 0.25 mecanuum wheel
export ROBOT_WHEEL_DIAMETER=0.25
# summit_xl: 0.471, summit_xl_steel: 0.477, rbkairos_10: 0.538
export ROBOT_TRACK_WIDTH=0.538
# distance between the centres of the front and rear wheels
# summit_xl: 0.458, summit_xl_steel: 0.430
export ROBOT_WHEEL_BASE=0.430
# true, false
export ROBOT_HAS_SAFETY_MODULE=true
#
export ROBOT_MODBUS_SERVER_IP=192.168.0.250

# ARM
# true, false
export ROBOT_HAS_ARM=true
# Robot arm ip
export ROBOT_ARM_IP=192.168.0.210
# For UR arms. Allows just running the driver to read the state or control the arm
export ROBOT_ARM_ENABLE_TRAJECTORY_CONTROL=true
# ARM model ur: (ur5, ur10), kinova: (j2s7s300)
export ROBOT_ARM_MODEL=ur5
# (ur, kinova)
export ROBOT_ARM_MANUFACTURER=ur

# WRIST RGBD CAMERA
# true, false
export ROBOT_HAS_WRIST_RGBD_CAMERA=false
# usb bus
#export ROBOT_WRIST_RGBD_CAMERA_ID=#1
# realsense
export ROBOT_WRIST_RGBD_CAMERA_MODEL=realsense

#GRIPPER
# true, false
export ROBOT_HAS_GRIPPER=false
# egh, wsg50
export ROBOT_GRIPPER_MODEL=egh
# schunk (egh)
export ROBOT_GRIPPER_MANUFACTURER=schunk
export ROBOT_GRIPPER_IP=192.168.0.212
export ROBOT_GRIPPER_PORT=1000
# For UR arms. Allows to control the gripper using UR IO. The arm will need a program
# running to manage the gripper control.
export ROBOT_CONTROL_GRIPPER_BY_SIGNALS=true

# WEB VIDEO SERVER
export ROBOT_LAUNCH_WEB_VIDEO_SERVER=true
export ROBOT_WEB_VIDEO_SERVER_ADDRESS=127.0.0.1
export ROBOT_WEB_VIDEO_SERVER_PORT=8081

# RUN SCREENS (true, false)
export ROBOT_RUN_MAP_NAV_MANAGER=true
export ROBOT_RUN_ROBOT_LOCAL_CONTROL=true
export ROBOT_RUN_PERCEPTION=true
export ROBOT_RUN_NAVIGATION=true
export ROBOT_RUN_RLC_ROSTFUL_SERVER=true

# PERCEPTION PARAMETERS
# true, false
export ROBOT_RUN_AR_LOCATOR=true
# true, false
export ROBOT_RUN_REFLECTOR_LOCATOR=true
# default, hokuyo_utm, hokuyo_ust, sick_s300
export ROBOT_LASER_MODEL_INTENSITY_FILTER=sick_microscan3
# double, distance between tags/reflectors
export ROBOT_DOCKING_STATION_TAG_DISTANCE=0.3
# double, max distance to detect the station
export ROBOT_DOCKING_STATION_TAG_MAX_DISTANCE_DETECTION=3.5
# 2d scan topic used for perception purposes (two tag locator)
export ROBOT_PERCEPTION_SCAN_TOPIC=front_laser/scan
# rgb camera topic used for perception purposes (ar locator)
export ROBOT_PERCEPTION_CAMERA_TOPIC=front_rgbd_camera/rgb/image_raw
# rgb camera info topic used for perception purposes (ar locator)
export ROBOT_PERCEPTION_CAMERA_INFO_TOPIC=front_rgbd_camera/rgb/camera_info

# LOCALIZATION PARAMETERS
# The topic that amcl is using to locate the robot
export ROBOT_LOCALIZATION_SCAN_TOPIC=merged_laser/scan
# Type of odometry used for the localization algorithm (mainly amcl). Values: diff, omni
export ROBOT_LOCALIZATION_ODOM_MODEL=omni
# Folder to save the maps
export ROBOT_MAPS_FOLDER=$HOME/maps

# NAVIGATION PARAMETERS
# true, false
export ROBOT_HAS_DOCKER=true
# true, false
export ROBOT_DOCKER_RUN_CAMERA=true
# true, false
export ROBOT_DOCKER_RUN_LASER=true
# true, false
export ROBOT_RUN_MOVE=true
# teb, eband
export ROBOT_MOVE_BASE_LOCAL_PLANNER=teb
# scan topics
#export ROBOT_NAVIGATION_FRONT_2D_SCAN=front_laser/scan
#export ROBOT_NAVIGATION_REAR_2D_SCAN=rear_laser/scan
#export ROBOT_NAVIGATION_FRONT_RGBD_TO_SCAN=front_rgbd_camera/point_cloud_scan_filtered
#export ROBOT_RUN_LASER_FILTERS=true

# BASE_HW
# The real battery voltage (multimeter) minus the one returned by the drive
export ROBOT_BASE_HW_BATTERY_VOLTAGE_OFFSET=0.0
# K multipliers for analog inputs
export ROBOT_K_ANALOG_INPUTS_MULTIPLIERS=[1.0,-12.5,1.0,1.0]

# BATTERY ESTIMATION
# Voltage of the battery (24,48)
export ROBOT_BATTERY_VOLTAGE=48
# Read voltage from analog input
export ROBOT_READ_VOLTAGE_FROM_ANALOG_INPUT=true
# Analog input of the driver to read the voltage
export ROBOT_VOLTAGE_ANALOG_INPUT_NUMBER=1
# Analog input of the driver to read the current
export ROBOT_CURRENT_ANALOG_INPUT_NUMBER=2

# CHARGE MANAGER
# disabled, automatic_hw, automatic_sw, manual_sw
export ROBOT_DOCKER_MODE=automatic_sw
# true, false
export ROBOT_BATTERY_INVERTED_CONTACT_RELAY=true
#export ROBOT_BATTERY_CONTACT_RELAY_INPUT_NUMBER=2
#export ROBOT_BATTERY_CHARGER_RELAY_OUTPUT_NUMBER=1

# ROBOT_LOCAL_CONTROL
export ROBOT_RLC_ROSTFUL_SERVER_IP=127.0.0.1
export ROBOT_RLC_ROSTFUL_SERVER_PORT=8080
# distance offset for the dock action
export ROBOT_RLC_CHARGE_DOCK_OFFSET_X=-0.65
export ROBOT_RLC_CHARGE_DOCKER_NAMESPACE=pp_docker
export ROBOT_RLC_CHARGE_STEP_DISTANCE=0.06
# frame used to identify the docking_station. It can be different depending on the sensors and locators being used
export ROBOT_RLC_CHARGE_FRAME=robot_docking_station_1