PIBOT移植ROS2记录(6)-launch的参数
launch的参数
实现的较简单,对比ROS1的launch确实了参数传入的功能
<launch>
<arg name="baudrate" default="$(env PIBOT_DRIVER_BAUDRATE)" doc="pibot driver baudrate"/>
<arg name="publish_odom_tf" default="true" doc="pub tf"/>
<arg name="use_imu" default="true" doc="use imu"/>
<arg name="use_accelerometer" default="true" doc="use acce"/>
<arg name="use_gyroscope" default="true" doc="use gyro"/>
<arg name="use_magnetometer" default="true" doc="use mag"/>
<arg name="cali_imu_startup" default="true" doc="use mag"/>
<!-- PIBOT DRIVER -->
<node name="pibot_driver" pkg="pibot_bringup" type="pibot_driver" output="screen">
<param name="base_frame" value="base_link" />
<param name="baudrate" value="$(arg baudrate)" />
<param name="cmd_vel_topic" value="cmd_vel" />
<param name="odom_frame" value="odom" />
<param name="odom_topic" value="odom" if="$(arg publish_odom_tf)"/>
<param name="odom_topic" value="wheel_odom" unless="$(arg publish_odom_tf)" />
<param name="out_pid_debug_enable" value="false" />
<param name="port" value="/dev/pibot" />
<param name="publish_odom_tf" value="$(arg publish_odom_tf)" />
<param name="freq" value="100" />
<rosparam if="$(arg use_imu)">
imu/accelerometer_bias: {x: 0.005436, y: 0.014684, z: -0.395418}
imu/gyroscope_bias: {x: -0.035592, y: 0.080670, z: 0.001216}
</rosparam>
<param name="imu/use_accelerometer" value="$(arg use_accelerometer)" if="$(arg use_imu)"/>
<param name="imu/use_gyroscope" value="$(arg use_gyroscope)" if="$(arg use_imu)"/>
<param name="imu/use_magnetometer" value="$(arg use_magnetometer)" if="$(arg use_imu)"/>
<param name="imu/perform_calibration" value="$(arg cali_imu_startup)" if="$(arg use_imu)"/>
</node>
</launch>
ROS1中我们可以执行roslaunch时传入相应的参数,例如
roslaunch pibot_bringup bringup.launch use_imu:=false
我们中的ROS1中的launch文件是xml格式的,这里我们可以看到其定义
参考这里我们添加对应的参数
baudrate_arg = DeclareLaunchArgument(
"baudrate", default_value=TextSubstitution(text="115200")
)
use_imu_arg = DeclareLaunchArgument(
"use_imu", default_value=TextSubstitution(text="true")
)
...
return LaunchDescription([
baudrate_arg,
Node(
package="pibot_bringup",
executable="pibot_driver",
name="pibot_driver",
output="screen",
emulate_tty=True,
parameters=[
...
{
"imu/use_accelerometer": LaunchConfiguration(use_imu)},
{
"imu/use_gyroscope": LaunchConfiguration(use_imu)},
{
"imu/use_magnetometer": LaunchConfiguration(use_imu)},
...
]
)
...
对比ROS1中我们是从环境变量PIBOT_DRIVER_BAUDRATE读取波特率, 稍作修改, 因launch文件是python对比之前xml我们就可以更大发挥空间了
import os
...
default_baudrate = os.getenv(PIBOT_DRIVER_BAUDRATE)
if default_baudrate is None:
default_baudrate = "115200"
baudrate_arg = DeclareLaunchArgument(
"baudrate", default_value=TextSubstitution(text=default_baudrate)
)
测试
环境变量
export PIBOT_DRIVER_BAUDRATE=921600 ros2 launch pibot_bringup bringup_launch.py use_imu:=true
指定参数
ros2 launch pibot_bringup bringup_launch.py baudrate:=921600 use_imu:=false
本文代码
