# ucar_controller
[TOC]
## 简介
`ucar_controller`作为与下位机mcu通讯的ROS包实现了电机控制、灯光控制、mcu板载imu数据读取等功能。我们可以通过发布`/cmd_vel(geometry_msgs/Twist)`速度控制话题,指定xy方向的平移速度以及yaw角的旋转速度来控制小车运动。同时发布里程计话题`/odom(nav_msgs/Odometry)`实时发布小车里程计记录的速度、位置。如果是晓mini版本的智能驾驶小车,本包还会发布`/imu(sensor_msgs/Imu)`。
## 安装所需依赖
```bash
sudo apt update
sudo apt install ros-melodic-serial libeigen3-dev
sudo pip3 uninstall em # 卸载em,em可能未安装。忽视未安装无法卸载的报错即可
sudo pip3 install empy -i https://pypi.tuna.tsinghua.edu.cn/simple
```
编译:
```bash
cp -r ucar_controller ~/ucar_ws/src/
cd ~/ucar_ws
catkin_make
```
## 简单验证
1、启动节点:
注:晓版本的小车需要把`base_driver.launch`中导入的`driver_params_mini.yaml`注释,并换为:`driver_params_xiao.yaml`
即已经注释的那行。
```bash
roslaunch ucar_controller base_driver.launch
```
2、发布话题控制:
base_driver节点订阅/cmd_vel话题,msg类型为geometry_msgs/Twist。
我们可以通过发布/cmd_vel话题来控制小车移动,比如:
Ctrl + Alt + T重新开启一个终端。
用rostopic工具发布话题。(注意用Tab键自动补全来填写geometry_msgs/Twist数据,不然手动输入格式容易出错)
```bash
rostopic pub -r 20 /cmd_vel geometry_msgs/Twist "linear:
x: 0.0
y: 0.0
z: 0.0
angular:
x: 0.0
y: 0.0
z: 1.0"
```
输入指令后小车会持续逆时针自转。
## 全部功能介绍
### 1. 实时控制
方式:发布话题。
话题名:`/cmd_vel`
msg类型:geometry_msgs/Twist
```
geometry_msgs/Vector3 linear
float64 x # x方向线速度
float64 y # y方向线速度
float64 z # 无效
geometry_msgs/Vector3 angular
float64 x # 无效
float64 y # 无效
float64 z # z轴角速度
```
### 2. 获取里程计数据
方式:订阅话题。
话题名:`/odom`
msg类型:nav_msgs/Odometry
```cpp
std_msgs/Header header
uint32 seq
time stamp
string frame_id
string child_frame_id
geometry_msgs/PoseWithCovariance pose
geometry_msgs/Pose pose
geometry_msgs/Point position # 里程计坐标下的位置,z值无效
float64 x
float64 y
float64 z
geometry_msgs/Quaternion orientation # 里程计坐标下的朝向
float64 x
float64 y
float64 z
float64 w
float64[36] covariance
geometry_msgs/TwistWithCovariance twist
geometry_msgs/Twist twist
geometry_msgs/Vector3 linear # 小车实时线速度,z值无效
float64 x
float64 y
float64 z
geometry_msgs/Vector3 angular # 小车实时角速度,x,y值无效
float64 x
float64 y
float64 z
float64[36] covariance
```
可以通过执行`rostopic echo /odom `指令,在终端实时打印小车里程计数据。
### 3. 获取imu数据
>晓版本小车没用该功能,晓版本小车需要使用fdilink_ahrs包来获取imu数据
1. imu数据
方式:订阅话题。
话题名:`/imu`
msg类型:sensor_msgs/Imu
```cpp
std_msgs/Header header
uint32 seq
time stamp
string frame_id
geometry_msgs/Quaternion orientation # 小车姿态
float64 x
float64 y
float64 z
float64 w
float64[9] orientation_covariance
geometry_msgs/Vector3 angular_velocity # 小车实时角速度
float64 x
float64 y
float64 z
float64[9] angular_velocity_covariance
geometry_msgs/Vector3 linear_acceleration # 小车实时加速度
float64 x
float64 y
float64 z
float64[9] linear_acceleration_covariance
```
可以通过执行`rostopic echo /imu `指令,在终端实时打印小车imu数据。
2. 地磁指北数据
方式:订阅话题。
话题名:`/mag_pose_2d`
msg类型:geometry_msgs/Pose2D
```cpp
float64 x # 无效
float64 y # 无效
float64 theta # 指北的yaw角值(单位:rad)
```
可以通过执行`rostopic echo /mag_pose_2d `指令,在终端实时打印。
### 4. 设置灯光效果
服务名:`get_battery_state`
服务数据类型:aicar_controller/GetBatteryInfo.srv
```
uint8 MODE_NORMAL = 0 # 常亮
uint8 MODE_BLINK = 1 # 闪烁
uint8 MODE_BREATH = 2 # 呼吸
uint8 mode_type # 灯光模式
float64 frequency # 模式频率(常亮模式自动忽略)
uint8 red_value # 红色光亮度范围(0-255)
uint8 green_value # 绿色光亮度范围(0-255)
uint8 blue_value # 蓝色光亮度范围(0-255)
---
bool success # 设置是否成功
string message # 异常log信息
```
response枚举:
1、设置失败(可能与MUC通信异常)
res.success = false;
res.message = "Can't connect base's MCU.";
2、设置成功
res.success = true;
res.message = "Set LED success.";
### 5. 小车电池信息发布(仅电池剩余电量百分比有效,即:percentage)
话题名:`battery_state`
`sensor_msgs/BatteryState.msg`
```
POWER_SUPPLY_STATUS_UNKNOWN = 0 # 未知
POWER_SUPPLY_STATUS_CHARGING = 1 # 充电
POWER_SUPPLY_STATUS_DISCHARGING = 2 # 放电中
POWER_SUPPLY_STATUS_NOT_CHARGING = 3 # 未充电
POWER_SUPPLY_STATUS_FULL = 4 # 满电
POWER_SUPPLY_HEALTH_UNKNOWN = 0 # 未知
POWER_SUPPLY_HEALTH_GOOD = 1 # 良好
POWER_SUPPLY_HEALTH_OVERHEAT = 2 # 过热
POWER_SUPPLY_HEALTH_DEAD = 3 # 没电
POWER_SUPPLY_HEALTH_OVERVOLTAGE = 4 # 过电压
POWER_SUPPLY_HEALTH_UNSPEC_FAILURE = 5 # 未知错误
POWER_SUPPLY_HEALTH_COLD = 6 # 过冷
POWER_SUPPLY_HEALTH_WATCHDOG_TIMER_EXPIRE = 7 #
POWER_SUPPLY_HEALTH_SAFETY_TIMER_EXPIRE = 8 #
POWER_SUPPLY_TECHNOLOGY_UNKNOWN = 0 # 未知
POWER_SUPPLY_TECHNOLOGY_NIMH = 1 # Ni-MH battery 镍氢电池
POWER_SUPPLY_TECHNOLOGY_LION = 2 # Li-ion battery 锂离子电池
POWER_SUPPLY_TECHNOLOGY_LIPO = 3 # Li-Po battery 锂聚合物电池
POWER_SUPPLY_TECHNOLOGY_LIFE = 4 # li-Fe battery 锂铁电池
POWER_SUPPLY_TECHNOLOGY_NICD = 5 # NiCd battery 镍镉电池
POWER_SUPPLY_TECHNOLOGY_LIMN = 6 # LiMn battery 锂锰电池
std_msgs/Header header
uint32 seq
time stamp
string frame_id
float32 voltage # Voltage in Volts (Mandatory)
float32 current # Negative when discharging (A) (If unmeasured NaN)
float32 charge # Current charge in Ah (If unmeasured NaN)
float32 capacity # Capacity in Ah (last full capacity) (If unmeasured NaN)
float32 design_capacity # Capacity in Ah (design capacity) (If unmeasured NaN)
float32 percentage # Charge percentage on 0 to 1 range (If unmeasured NaN)
uint8 power_supply_status # The charging status as reported. Values defined above
uint8 power_supply_health # The battery health metric. Values defined above
uint8 power_supply_technology # The battery chemistry. Values defined above
bool present # True if the battery is present
float32[] cell_voltage # An array of individual cell voltages for each cell in the pack
# If individual voltages unknown but number of cells known set each to NaN
string location # The location into which the battery is inserted. (slot number or plug)
string serial_number # The best approximation of the battery serial number
```
当前版本实际使用到的status数据:
```cpp
battery_msg.power_supply_status = 2; // 放电中 即正在运行
battery_msg.power_supply_health = 1; // 良好
battery_msg.power_supply_technology = 0; // UNKNOWN
battery_msg.present = true; // 存在电池
battery_msg.percentage = curr
没有合适的资源?快使用搜索试试~ 我知道了~
讯飞智能车比赛ucar_controller的ROS2实现.zip
共27个文件
h:8个
cc:6个
py:5个
需积分: 5 4 下载量 154 浏览量
2023-09-30
18:21:54
上传
评论 1
收藏 63KB ZIP 举报
温馨提示
讯飞智能车比赛ucar_controller的ROS2实现
资源推荐
资源详情
资源评论
收起资源包目录
讯飞智能车比赛ucar_controller的ROS2实现.zip (27个子文件)
ros2_ucar_controller-main
include
ucar_controller
crc_table.h 236B
fdilink_data_struct.h 4KB
base_driver.h 7KB
data_struct.h 2KB
serial
serial.h 23KB
v8stdint.h 2KB
impl
win.h 4KB
unix.h 4KB
CMakeLists.txt 958B
src
base_driver.cpp 40KB
serial.cc 8KB
impl
win.cc 15KB
list_ports
list_ports_linux.cc 7KB
list_ports_osx.cc 7KB
list_ports_win.cc 4KB
unix.cc 26KB
crc_table.cpp 8KB
package.xml 1011B
readme.md 13KB
CHANGELOG.md 2KB
launch
base_driver.launch.py 700B
log_info
car_Mileage_info.txt 12B
config
driver_params_mini.yaml 2KB
scripts
angular_check.py 3KB
linear_check.py 6KB
linear_check_ros2.py 7KB
angular_check_ros2.py 4KB
共 27 条
- 1
资源评论
天天501
- 粉丝: 596
- 资源: 4666
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功