jetson orin+livox mid-70+imu+云台相机联合标定和数据采集

这篇具有很好参考价值的文章主要介绍了jetson orin+livox mid-70+imu+云台相机联合标定和数据采集。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

将之前无人机上的x86多源数据采集和联合标定算法重建在新板子jetson orin上,解决之前多传感器采集数据时间戳没对齐的问题。

1. 准备工作

  1. 安装ros环境,推荐小鱼:http://fishros.com/#/fish_home,大佬的包避免了自己安装的很多坑;
  2. 安装livoxsdk: https://github.com/Livox-SDK/Livox-SDK;
  3. 安装云台相机sdk:https://wiki.amovlab.com/public/gimbalwiki/G1/doc/AmovGimbalROSSDK.html;
  4. 控制云台相机固定角度,matlab获得云台相机标定内参;
  5. 安装激光+相机联合标定算法,算法使用livox_camera_calib:https://github.com/hku-mars/livox_camera_calib;
  6. 安装激光+imu联合标定算法,算法使用lidar_align;

2. 设备环境

2.1 激光雷达 Livox-MID70

1-安装livox-sdk

sudo apt install cmake
git clone https://github.com/Livox-SDK/Livox-SDK.git
cd Livox-SDK
cd build && cmake ..
make
sudo make install

2-安装驱动livox_ros_driver

git clone https://github.com/Livox-SDK/livox_ros_driver.git catkin_ws/src    #在ros工作空间下
cd ~/catkin_ws
catkin_make

雷达使用mid70的话,之前修改了ip地址:雷达地址192.168.1.113 云台相机地址192.168.1.163。
设置电脑静态ip:sudo ifconfig enp2s0 192.168.1.110 netmask 255.255.255.0
sudo route add default gw 192.168.1.1

roslaunch livox_ros_driver livox_lidar_rviz.launch  启动设备命令,提前配好ip连接。
rostopic list  录制点云保存到rosbag
rosbag record ..
rosbag play .bag

jetson orin+livox mid-70+imu+云台相机联合标定和数据采集,linux,ubuntu,无人机

2.2 云台相机-阿木实验室G1吊舱

方法一(x86旧板子用的方法):
获取吊舱数据,存到sd卡。
ubuntu启动云台相机在download文件夹下: ./AmovGimbalstudio_x86_v1.0.5.AppImage,windows下载AmovGimbalstudio
控制云台相机角度与雷达方向一致
no conda 接入串口:ls /dev/ttyUSB* 确保有串口/dev/ttyUSB*

(
sudo chmod 777 /dev/ttyUSB0 赋予串口临时权限
cd ~/gimbal-sdk-master/build
./GetGimbalState -S /dev/ttyUSB0 -b 115200获取吊舱IMU角度和编码器角度
./CameraControl -a 1视频
./CameraControl -a 2照片
)
gimbal-sdk-python文件夹下:
cd gimbal-sdk-python
conda deactivate
python3 downward.py
python3 amov_gimbal_python.py

python3 amov_gimbal_python.py 1-pic 2-video 3-角度控制 4-角速率控制 5-回中 6-获取舱的状态数据,包括imu角度和编码器角度
查看吊舱图像画面: python3 amov_gimbal_image.py

方法二(jetson orin新板子用的方法):
通过ros-sdk:https://wiki.amovlab.com/public/gimbalwiki/G1/doc/AmovGimbalROSSDK.html,存到硬盘。安装ros-sdk需要几步前期准备。

  1. 安装amov-gimbal-libs:https://api.gitee.com/amovlab/amov-gimbal-libs, uname -m查看操作系统的相关信息,选择对应的配置文件复制。
    jetson orin+livox mid-70+imu+云台相机联合标定和数据采集,linux,ubuntu,无人机
    执行命令:sudo cp lib/*****/libAMOV_Gimbal.so /usr/lib/ #库文件 sudo cp inc/amov_gimbal_struct.h /usr/include/ #头文件 sudo cp inc/amov_gimbal.h /usr/include/ #头文件
    jetson orin+livox mid-70+imu+云台相机联合标定和数据采集,linux,ubuntu,无人机
    构建库:git工程中提供以G1吊舱为样例的C++、python3使用例程。python例程通过调用ctypes中间层(/example/2py.cpp)实现,因此正确运行python例程需要构建C++例程。
CMakeList.txt内容(位于根目录)
#构建前需正确安装库
add_subdirectory(example/serial)                                    #添加串口子模块
add_library(AMOV_Gimbal_python SHARED example/2py.cpp)              #指定构建目标
target_link_libraries(AMOV_Gimbal_python serial AMOV_Gimbal)        #链接串口库、AMOV_Gimbal库   
target_include_directories(AMOV_Gimbal_python                       #指定头文件
    PUBLIC
    ${CMAKE_CURRENT_SOURCE_DIR}
)

根目录amov-gimbal-libs下运行构建命令:
mkdir build
cd build
cmake ..
make

C++例程:

事先通过usb先连接好设备,这里已经配好了云台的ip为192.168.1.163,设置电脑静态ip:sudo ifconfig enp2s0 192.168.1.110 netmask 255.255.255.0。接入串口:ls /dev/ttyUSB* 确保有串口/dev/ttyUSB* sudo chmod 777 /dev/ttyUSB0 赋予串口临时权限

sudo cp build/example/serial/libserial.so /usr/lib/     #安装串口库
sudo chmod 777 /dev/ttyUSB0                                #赋予串口权限
./build/example_test /dev/tty* G1                             #以运行G1吊舱为例 

云台将间隔约2S向正方向与初始点间摆动并在控制台输出姿态信息,如下所示:
jetson orin+livox mid-70+imu+云台相机联合标定和数据采集,linux,ubuntu,无人机
python 例程
通过/example/2py.cpp构建ctypes风格库从而使得python可以通过ctypes模块调用C++库 python例程为/example/example.py 该例程实现了云台在20°(roll),30°(pitch),40°(yaw)姿态与初始姿态往复运动 并通过控制台输出实时姿态信息,其余功能可参考例程函数实现。
图像快速获取:项目提供普通WEB相机与流媒体相机通过opencv获取图像的简易demo。使用前需编译或安装opencv-python,example/example_stream_cam_image.py 适用于流媒体相机,example/example_web_cam_image.py 适用于普通WEB相机

sudo cp build/libAMOV_Gimbal_python.so /usr/lib/
sudo chmod 777 /dev/ttyUSB0                                         #赋予串口权限
sudo chmod +x example/example.py                        #赋予可执行权限
python3 example/example.py
  1. 安装ros串口库 (已安装可忽略),roscore查看自己系统的ros版本,安装对应库:sudo apt-get install ros-noetic-serial
  2. 安装 Gstreamer (已安装可忽略),sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-doc gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio
  3. 编译及安装opencv (已启用Gstreamer的可忽略)。 编译选项添加 (-D WITH_GSTREAMER=ON)
    参考教程:https://blog.csdn.net/chiwang_andy/article/details/130930260,https://blog.csdn.net/inininnnn/article/details/131181463
    遇到opencv not found,使用sudo apt install libopencv-dev 解决下。
  4. 进入已有的ros工作站catkin_ws/src,下载sdk.
git clone https://gitee.com/amovlab/gimbal-sdk-ros.git
cd gimbal-sdk-ros/
git checkout V2.0.0

cd ../..
catkin_make
  1. 安装构建好了,运行:
cd catkin_ws                                 #进入此前工作空间路径
source devel/setup.bash              # 通过source devel/setup.bash命令,把ROS SDK功能包加入到环境变量中

1.运行吊舱节点(通过/amov_gimbal_ros/gimbal_control话题控制吊舱、通过/amov_gimbal_ros/gimbal_state话题获取吊舱状态信息)
roslaunch src/gimbal-sdk-ros/launch/gimbal_G1.launch
    通过/amov_gimbal_ros/set_camera_action服务控制相机(0:录像和停止录像 )视频会保存在TF卡中

2.获取相机视频画面(通过/amov_gimbal_ros/amov_gimbal_image话题获取ROS image图像)

rostopic list 录制图像保存到rosbag
修改默认节点参数及话题,可于src/gimbal-sdk-ros/launch/gimbal_XX.launch 中修改相应参数修改默认节点参数及话题.
jetson orin+livox mid-70+imu+云台相机联合标定和数据采集,linux,ubuntu,无人机

rosbag record ..
rosbag play .bag
2.3 IMU

这里使用的是 pixlvzwk2.4.8, 安装驱动:git clone https://github.com/PX4/PX4-Autopilot.git --recursive.
参考安装博客:https://blog.csdn.net/HuangChen666/article/details/128754106

cd PX4-Autopilot/
git submodule update --init --recursive
bash ./PX4-Autopilot/Tools/setup/ubuntu.sh  执行ubuntu.sh脚本
make px4_sitl_default gazebo

安装MAVROS,sudo apt-get install ros-noetic-mavros ros-noetic-mavros-extras

配置和查看设备:

ls /dev/ttyACM0
sudo chmod 777 /dev/ttyACM0
source ./devel/setup.bash
roslaunch mavros px4.launch
新开终端rostopic echo /mavros/imu/data
采集imu数据:rosbag record ..
rosbag record /mavros/imu/data

同时采集雷达/imu/云台相机数据

rosbag record -O lidarimu.bag /mavros/imu/data /livox/lidar  /amov_gimbal_ros/amov_camera_image

3. 联合标定算法

2.1 雷达和相机联合标定算法:livox_camera_calib

实测中需要纵横纹理连续且清晰的,同时方法的精度受到环境中纹理的影响比较大,如果图像中有大量的和边缘平行的纹理,也会干扰特征匹配。建议室内楼梯,边缘容易提取。室外建议方形建筑。角度可以倾斜一点,不要和激光束接近平行。
如官方代码给的例子,pcd建议采集时间长一点:
jetson orin+livox mid-70+imu+云台相机联合标定和数据采集,linux,ubuntu,无人机1-修改配置文件:~/catkin_ws/src/livox_camera_calib/config,修改配准图片和pcd读取位置,

# Data path. adjust them!
common:
    image_file: "/home/jetson/data/calib/image/2.png"
    pcd_file: "/home/jetson/data/calib/pcd/2.pcd"
    result_file: "/home/jetson/data/calib/extrinsic.txt"

# Camera Parameters. Adjust them!
camera:
    camera_matrix: [1364.45, 0.0,      958.327,
                0.0,     1366.46,  535.074,
                0.0,     0.0,      1.0     ]
    dist_coeffs: [0.0958277, -0.198233, -0.000147133, -0.000430056, 0.000000]

# Calibration Parameters.!
calib:
    calib_config_file: "/home/jetson/catkin_ws/src/livox_camera_calib/config/config_outdoor.yaml"
    use_rough_calib: true # set true if your initial_extrinsic is bad

如果这里使用的是云台,那么云台标定后的内参为,可直接用:
[Calib]
fx = 2104.7752770539305
fy = 2105.362380382873
u0 = 2276.460057518206
v0 = 1215.0545500692372
[Rectify]
mtx_0 = 2104.7752770539305
mtx_1 = 0.0
mtx_2 = 2276.460057518206
mtx_3 = 0.0
mtx_4 = 2105.362380382873
mtx_5 = 1215.0545500692372
mtx_6 = 0.0
mtx_7 = 0.0
mtx_8 = 1.0
dist_k1 = -0.31414978484346795
dist_k2 = 0.11767723680854802
dist_p1 = -0.00037118415206200555
dist_p2 = 0.00018745825701131476
dist_k3 = -0.021491455128815545
2-将点云数据由bag转化为pcd:

source ~/catkin/catkin_ws/devel/setup.bash
roslaunch livox_camera_calib bag_to_pcd.launch
存储在/home/sunwenhao/catkin/catkin_ws/src/livox_camera_calib/result/1.pcd

启动相机和雷达联合标定算法:

source ~/catkin/catkin_ws/devel/setup.bash 之前配了
roslaunch livox_camera_calib calib.launch

jetson orin+livox mid-70+imu+云台相机联合标定和数据采集,linux,ubuntu,无人机

2.2 雷达和imu联合标定算法:lidar_align

  1. 下载安装lidar_align:https://github.com/ethz-asl/lidar_align,https://github.com/wwtx/lidar_align_wwtx
  2. catkin_make过程有问题,看ubuntu安装lidar_align时编译出错,激光雷达与IMU标定 和https://blog.csdn.net/qq_39607707/article/details/127361539,基本都可以解决了。
cd catkin_ws
catkin_make
source devel/setup.bash
roslaunch lidar_align lidar_align.launch

2.2 多源rosbag包采集数据

同时采集雷达/imu/云台相机数据,保证时间戳一致性。

rosbag record -O lidarimu.bag /mavros/imu/data /livox/lidar  /amov_gimbal_ros/amov_camera_image

ros录制多个话题脚本
脚本名自拟,如record_topic.bash文章来源地址https://www.toymoban.com/news/detail-672932.html

#!bin/bash
time=$(date "+%Y%m%d%H%M%S")
echo $time #字符串格式系统时间,使录制的包名不重复
 
rosbag record -O plan_$time  /mavros/imu/data /livox/lidar  /amov_gimbal_ros/amov_camera_image #录制多个话题

到了这里,关于jetson orin+livox mid-70+imu+云台相机联合标定和数据采集的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 用lidar_imu_init对livox_avia进行lidar和imu的外参标定

    ubuntu 20.04 ros noetic PCL1.8 Eigen=3.3.4 livox_ros_driver ceres-solver 1.修改相关参数: 编辑以设置以下参数:config/xxx.yaml lid_topic:激光雷达点云的主题名称。 imu_topic:IMU 测量的主题名称。 cut_frame_num:将一帧分割成子帧,提高频率。必须是正整数。 orig_odom_freq(Hz):原始激光雷达输入

    2024年02月08日
    浏览(43)
  • Camera-IMU联合标定原理

    ​ 在VIO系统中,camera-imu间内外参精确与否对整个定位精度起着重要的作用。所以良好的标定结果是定位系统的前提工作。 目前标定算法主要分为离线和在线标定,离线标定以kalibr为代表,能够标定camera内参、camera-imu之间位移旋转、时间延时以及imu自身的刻度系数、非正交性

    2024年02月08日
    浏览(44)
  • 学习Kalibr工具---Camera与IMU联合标定过程

    以双目+IMU为例进行介绍相机和IMU 的联合标定,也叫多传感器融合; 录制含有标定板图像的bag包,注意需要不断移动标定板。 运行Kalibr工具箱中 多相机标定 节点程序。 我们使用的最终命令 参考链接:https://github.com/ethz-asl/kalibr/wiki/camera-imu-calibration (一) 标定的输入文件包括

    2024年02月08日
    浏览(52)
  • 联合标定Android手机的IMU和Camera数据

    通过局域网实现安卓手机和ROS的通讯,进一步通过Kalibr工具实现手机IMU和相机的联合标定。 基于ROS下的信息发布和订阅,手机和PC在一个局域网下进行信息(image和IMU)传输。操作步骤: 在安卓手机中安装github上的2个开源Android_Camera-IMU和android_ros_sensors中的任意一个,基于r

    2024年02月09日
    浏览(47)
  • 相机与IMU标定教程

    标定教程 way 1、 imu_utils标定IMU的内参,可以校准IMU的噪声密度和随机游走噪声 2、kalibr包标定相机的内外参数,相机与IMU之间的外参 1.1安装环境 这里使用的包是 imu_utils ,使用这个包可以校准IMU的噪声密度和随机游走噪声 step1: 安装ceres库 下载编译 ceres-solver step2: 安装 cod

    2023年04月18日
    浏览(36)
  • 使用kalibr对相机和IMU标定

    目录 一、IMU标定 二、相机标定 三、联合标定 关于需要下载的环境和具体的包参考【1】 记录标定过程 : ①录制imu的rosbag ②标定 单位问题 :   ①连续时间  ②离散时间 parameter symbol units gyr_n acc_n gyr_w acc_w 对于离散时间的白噪声  = 连续时间的白噪声 * 频率的平方根 对于离

    2024年02月15日
    浏览(44)
  • Jetson AGX Orin+d435i相机实现Octomap建图

    环境参考 :Nvidia Jetson AGX Orin Developer Kit 32GB、Ubuntu20.04、Jetpack5.1.1、Intel Realsense D435i深度相机、ROS-noetic、Vins-Fusion-gpu Jetson AGX Orin+Vins+ros+d435i配置运行详情请见: Jetson AGX ORIN配置运行vins-fusion-gpu(Zed/D435)_dueen1123的博客-CSDN博客   1.编译安装 OctomapServer 建图包 返回主目录,安

    2024年01月18日
    浏览(54)
  • Jetson AGX Orin 平台12路4K相机CPHY驱动调试问题记录

    在Orin上启动CPHY相机模块时遇到了一些问题。 将4台CPHY摄像机连接到Orin 每个相机输出3VC图像 modex setting:

    2024年02月12日
    浏览(46)
  • d435i 相机和imu标定

    使用 imu_utils 功能包标定 IMU,由于imu_utils功能包的编译依赖于code_utils,需要先编译code_utils,主要参考 相机与IMU联合标定_熊猫飞天的博客-CSDN博客 Ubuntu20.04编译并运行imu_utils,并且标定IMU_学无止境的小龟的博客-CSDN博客 1.1 编译 code_utils 创建工作空间 1.1.1 修改 CMakeLists.txt 文件

    2024年02月09日
    浏览(60)
  • 使用Kalibr标定相机和IMU(ZED+px4)外参

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 本文仅使用kalibr中cam-imu的联合标定,关于camera内参默认已经知道了。主要会总结一些标定上的小经验,有不对的地方,希望网友可以指出。文章最后将使用标定的cam-imu外参在VINS-Fusion中进行验证 Kalibr是

    2023年04月19日
    浏览(77)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包