rviz 控制小车运动
1 . 安装Arbotix
sudo apt-get install ros-noetic-arbotix
2 . 在config文件中添加机器人控制参数文件control.yaml
touch control.yaml
输入代码:
# 该文件是控制器配置,一个机器人模型可能有多个控制器,比如: 底盘、机械臂、夹持器(机械手)....
# 因此,根 name 是 controller
controllers: {
# 单控制器设置
base_controller: {
#类型: 差速控制器
type: diff_controller,
#参考坐标
base_frame_id: base_footprint,
#两个轮子之间的间距
base_width: 0.2,
#控制频率
ticks_meter: 2000,
#PID控制参数,使机器人车轮快速达到预期速度
# 比例,按照误差正比控制,但是会出现稳态误差
Kp: 12,
# 微分,阻尼放置震荡
Kd: 12,
# 积分,消除稳态误差
Ki: 0,
Ko: 50,
#加速限制
accel_limit: 1.0
}
}
3 . 建立launch文件
touch carcontrol.launch
输入代码:
<launch>
<!-- 1.在参数服务器载入urdf文件-->
<param name="robot_description" command="$(find xacro)/xacro $(find learning_rviz)/urdf/xacro/car.urdf.xacro" />
<!-- 2.启动rviz-->
<node pkg="rviz" type="rviz" name="rviz" args="-d $(find learning_rviz)/config/show_mycar.rviz" />
<!--
只有上述两条语句:
表现:摄像头显示位置与颜色异常
提示:No transform from [camera] to [base_link] 缺少 camera 到 base_link 的坐标转换
原因:rviz 中显示URDF 时,必须发布不同部件之间的 坐标系 关系
解决:ROS 提供了关于机器人模型显示的坐标发布相关节点(节点)
-->
<!-- 关节状态发布节点 -->
<node pkg="joint_state_publisher" type="joint_state_publisher" name="joint_state_publisher" />
<!-- 机器人状态发布节点 -->
<node pkg="robot_state_publisher" type="robot_state_publisher" name="robot_state_publisher" />
<!-- 集成 arbotix 运动控制节点,并且加载参数 -->
<!-- arbotix 既可以驱动实体机器人,也可以驱动仿真机器人-->
<node pkg="arbotix_python" type="arbotix_driver" name="driver" output="screen">
<rosparam command="load" file="$(find learning_rviz)/config/control.yaml" />
<param name="sim" value="true" />
</node>
<!-- 添加控制关节运动的节点
<node pkg="joint_state_publisher_gui" type="joint_state_publisher_gui" name="joint_state_publisher_gui" />
-->
</launch>
① 可能报错:
ModuleNotFoundError: No module named 'serial'
解决:
pip3 install pyserial
4 . 运行后:
将fixed frame 改为 odom
在add中添加odometry和tf
5 . 给小车发布运动信息
rostopic pub -r 10 /cmd_vel geometry_msgs/Twist "linear:
x: 1.0
y: 0.0
z: 0.0
angular:
x: 0.0
y: 0.0
z: 1.0"