nx配置&&ego-planner t265+d415

一,T265提供位置信息

t265位置信息输出到话题 camera/odom/sample,通过VIO桥接给 mavros/odom/out,同时mavros/local_positon/odom也有数据主要参考了

PX4实战之旅(五):利用T265实现室内定点飞行_realsense驱动-CSDN博客

在planner/plan_manage/launch文件夹中,根据具体执行的是哪个文件,比如仿真执行的是swarm.launch(直接执行github上教程的run_in_sim无法正常显示,虽然swarm文件include了它),把drone_1到drone_9全部删了,相当于swarm_single,即可顺利运行仿真。

虽然github页上推荐使用ego-swarm,但是实测还是ego-planner更能直接上手,ego-swarm多少还要修改一些东西。
实机飞行用single_run_in_exp.launch,把depth_topic的value改成自己的话题名

利用t265的位置信息起飞

首先注意t265的安装,震动的影响很大

二,D415提供深度信息

D415与T265在一个launch文件启动。直接在realsense_ros文件夹里的,t265_and_d400.launch(好像是这个名字),然后修改一下里面的xml文件,即可同时启动。

在single_run_in_exp.launch,把odom_topic的value改成自己的话题名,还要记得修改一下下面的内参

运行single_run_in_exp.launch就完成了建图,并且得到了规划轨迹。

三,给目标点

把目标信息给到ego-planner

在single_run_in_exp.launch,根据flight_type相关提示修改即可

如果需要根据其他任务(如视觉识别到二维码后获取目标点)自动前往新的目标点,使用launch文件被注释了的set_waypoint

ego_replan_fsm.cpp读取param里的waypoint


四,得到规划的轨迹,控制器发布信息给飞控

用自带的px4ctrl,使用ego-planner进行无人机控制时的数据流(自用)-CSDN博客

自定义控制器,ego-planner+PX4自定义控制器V1版本: ego-planner+PX4自定义控制器V1版本(告别PX4Ctrl)

这里先用自带的px4ctrl。

run_ctrl.launch文件内主要注意的是

<remap from="~odom" to="/vins_fusion/imu_propagate" />
<remap from="~cmd" to="/position_cmd" />

/position_cmd用于接收ego_swarm规划的轨迹,目标点在ego_swarm的launch文件给定,这个是px4ctrl接收的话题。如果前面没有改的话,这里也不需要修改。

/vins_fusion/imu_propagate就是无人机自身位姿,改成自己的就行

然后在px4ctrlFSM.cpp里可以看到

	if (param.use_bodyrate_ctrl)
	{
		publish_bodyrate_ctrl(u, now_time);
	}
	else
	{
		publish_attitude_ctrl(u, now_time);

解算出来的速度直接发布给了mavros

ctrl_param_fpv.yaml参数修改

yaw角调整命令

节点图

仿真 swarm_single.launch

可以看到主节点是/drone_0_ego_planner_node,

从/drone_0_poscmd_2_odom获取自身位置和目标位置信息,

从/drone_0_pcl_render_node获取环境的点云信息,

把bspline给/drone_0_traj_server进一步解算得到具体的控制信息,返回到/drone_0_poscmd_2_odom改变无人机位置。

/drone_0_odom_visualization用于可视化于rviz,/random_forest用于生成仿真障碍物环境

视觉部分

需要在真实环境中较远距离识别数字

ego-swarm代码学习

EGO_Planner代码学习(二):轨迹服务器ego_planner/traj_server代码流程_egoplanner代码解析-CSDN博客

EGO_Planner代码学习(三):px4ctrl代码流程-CSDN博客

EGO_Planner代码学习(四):轨迹规划器流程——上_egoplanner代码解析-CSDN博客

nx配置 && 常用命令

  • 与飞控串口通信:

Jetson Orin NX 开发指南(9): MAVROS 的安装、配置与运行_orin nx 串口-CSDN博客飞控(Pixhawk 4 Mini)与机载电脑(Jetson Xavier NX )实现串口通信_px4与机载电脑-CSDN博客

  • 启动ego
------------roslaunch---------
##mavros
sudo chmod 777 /dev/ttyACM0
roslaunch mavros px4.launch

##realsense + mavros + fast_drone
sh shfiles/rspx4.sh

roslaunch px4_realsense_bridge multiple.launch 

roslaunch realsense2_camera rs_camera.launch

roslaunch realsense2_camera rs_d415_and_t265.launch 
-----------realsense--------

##d415 828612062505
##t265 133122110834

realsense-viewer

rqt_image_view

rs-enumerate-devices | grep Serial

-----------打开有root权限的文件夹---------
sudo nautilus
  • pub/sub && client/server
-------------------sub/pub--------------------

pub_node ----> topic_name ----> sub_node
rate.sleep()                   spin()
pub_node.publish(msg)          callback(msg)

------------------client/server---------------

req          ----> srv.request.
client_node  ----> call(srv) ----> server_node
                srv.response.<----         res

根据call的次数响应                  calback()

  • ros文件
-------------------创建ros空间-----------------
mkdir -p catkin_ws/src
cd catkin_ws/src
catkin_init_workspace

##在src文件夹内新建功能包
catkin_create_pkg my_pkg_name roscpp std_msgs

##添加功能包后编译
cd catkin_ws
catkin_make

##rosrun
rosrun my_pkg_name cpp_name


--------- package.xml 和 CMakeLists.txt---------
# catkin_ws/src下的CMakeLists.txt不需要修改,编译后自动生成
# package.xml添加功能包依赖的文件 CMakeLists.txt添加编译细节依赖

# 无自定义消息
## package.xml 不需要修改
## CMakeLists.txt
add_executable(velocity_publisher src/velocity_publisher.cpp)
target_link_libraries(velocity_publisher ${catkin_LIBRARIES})

# 自定义msg消息类型
## package.xml
<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>
## CMakeLists.txt
find_package ( …… message_ generation)
add_message_files(FILES Person.msg)
generate_messages(DEPENDENCIES std_msgs)
catkin_ package (…… message _runtime)

add_executable(person_publisher src/person_publisher.cpp)
target_link_libraries(person_publisher ${catkin_LIBRARIES})
add_dependencies(person_publisher ${PROJECT_NAME}_generate_messages_cpp)

# srv消息类型类似

  • anaconda
conda config --show	#查看当前conda配置
conda list	#查看当前环境已安装包
pip install name	#安装包
conda remove --name envname packagename	#删除包

conda env list	#查看已安装环境
conda create -n name python==3.8	#创建环境
conda activate name	#激活环境
conda remove -n name --all	#删除环境
  • 基本库安装
-----------------------opencv----------------------------
pip install opencv-python

-----------------------airsim----------------------------
pip install msgpack-rpc-python
pip install airsim

-----------------------ros-------------------------------
wget http://fishros.com/install -O fishros && bash fishros

-----------------------mavros----------------------------
sudo apt-get install ros-noetic-mavros
cd /opt/ros/noetic/lib/mavros
sudo ./install_geographiclib_datasets.sh

--------------ceres& glog& ddyanmic-reconfigure----------
fast-drone-250的GitHub资源,3rd_party.zip
##glog
./autogen.sh && ./configure && make && sudo make install
sudo apt-get install liblapack-dev libsuitesparse-dev libcxsparse3.1.2 libgflags-dev libgoogle-glog-dev libgtest-dev
##ceres
mkdir build
cd build
cmake ..
sudo make -j4
sudo make install
sudo apt-get install ros-noetic-ddynamic-reconfigure

-----------------------ego-planner------------------------
git clone https://github.com/ZJU-FAST-Lab/Fast-Drone-250
cd Fast-Drone-250
catkin_make
source devel/setup.bash
roslaunch ego_planner single_run_in_sim.launch

  • 基本软件
##terminator
sudo apt install terminator

##Plotjuggler
sudo apt install ros-noetic-plotjuggler
sudo apt install ros-noetic-plotjuggler-ros
rosrun plotjuggler plotjuggler

##Net-tools
sudo apt install net-tools
ifconfig

##ssh
sudo apt install openssh-server
在笔记本上:ping 192.168.**.**
sudo gedit /etc/hosts
加上一行:192.168.**.** fast-drone
ping fast-drone
ssh fast-drone@fast-drone(ssh 用户名@别名)

##jtop
sudo python setup.py install
sudo jtop
  • realsense
检查有没有装cuda

----------------------方式一------------------------
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-key  F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE || sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key  F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE
sudo add-apt-repository "deb https://librealsense.intel.com/Debian/apt-repo $(lsb_release -cs) main" -u
sudo apt-get install librealsense2-dkms
sudo apt-get install librealsense2-utils
sudo apt-get install librealsense2-dev
sudo apt-get install librealsense2-dbg


----------------------方式二------------------------
git clone https://github.com/jetsonhacks/installRealSenseSDK.git
cd ./installRealSenseSDK
./installLibrealsense.sh

----------------------方式三------------------------

https://github.com/JIANG-CX/Realsense_jetson

1.Download the realsense sdk source (choose v2.50.0 for ros1): https://github.com/IntelRealSense/librealsense/archive/refs/tags/v2.50.0.zip
2.copy the install_jetson.sh to the librealsense-2.50.0
3.change the content of scripts/libuvc_installation.sh
#wget https://github.com/IntelRealSense/librealsense/archive/master.zip
#unzip ./master.zip -d .
#cd ./librealsense-master
cd /home/dji/Downloads/librealsense-2.50.0 # root of 2.50.0
4.install the sdk (only the Building from Source using RSUSB Backend can work for jetpack 5)
unzip librealsense-2.50.0
cd librealsense-2.50.0
sudo bash install_jetson.sh

  • 25
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Ego-Planner是一个基于ROS的路径规划器,它可以在给定的地图和起点、终点信息下,生成一条可行的路径。以下是Ego-Planner的代码框架: 1. 首先需要定义一个EgoPlanner类,其中包含了一些必要的成员变量和函数。 ```c++ class EgoPlanner { private: ros::NodeHandle nh_; ros::Subscriber sub_map_; ros::Subscriber sub_pose_; ros::Subscriber sub_goal_; ros::Publisher pub_path_; nav_msgs::OccupancyGrid map_; geometry_msgs::PoseStamped start_; geometry_msgs::PoseStamped goal_; public: EgoPlanner(); // 构造函数 ~EgoPlanner(); // 析构函数 void mapCallback(const nav_msgs::OccupancyGrid::ConstPtr& msg); // 地图回调函数 void poseCallback(const geometry_msgs::PoseStamped::ConstPtr& msg); // 当前位置回调函数 void goalCallback(const geometry_msgs::PoseStamped::ConstPtr& msg); // 目标位置回调函数 void plan(); // 路径规划函数 }; ``` 2. 在构造函数中,需要完成ROS节点的初始化、订阅和发布话题的设置。 ```c++ EgoPlanner::EgoPlanner() { nh_ = ros::NodeHandle("~"); sub_map_ = nh_.subscribe("map", 1, &EgoPlanner::mapCallback, this); sub_pose_ = nh_.subscribe("pose", 1, &EgoPlanner::poseCallback, this); sub_goal_ = nh_.subscribe("goal", 1, &EgoPlanner::goalCallback, this); pub_path_ = nh_.advertise<nav_msgs::Path>("path", 1); } ``` 3. 在地图、当前位置和目标位置的回调函数中,需要将接收到的信息保存到对应的成员变量中。 ```c++ void EgoPlanner::mapCallback(const nav_msgs::OccupancyGrid::ConstPtr& msg) { map_ = *msg; } void EgoPlanner::poseCallback(const geometry_msgs::PoseStamped::ConstPtr& msg) { start_ = *msg; } void EgoPlanner::goalCallback(const geometry_msgs::PoseStamped::ConstPtr& msg) { goal_ = *msg; } ``` 4. 在路径规划函数中,需要调用路径规划算法,生成一条可行的路径,并将路径发布出去。 ```c++ void EgoPlanner::plan() { // 调用路径规划算法,生成一条可行的路径 std::vector<geometry_msgs::PoseStamped> path = pathPlanning(map_, start_, goal_); // 将路径发布出去 nav_msgs::Path path_msg; path_msg.header.frame_id = "map"; path_msg.header.stamp = ros::Time::now(); path_msg.poses = path; pub_path_.publish(path_msg); } ``` 5. 在主函数中,创建EgoPlanner对象,并进入ROS循环。 ```c++ int main(int argc, char** argv) { ros::init(argc, argv, "ego_planner"); EgoPlanner planner; ros::Rate rate(10); while (ros::ok()) { planner.plan(); ros::spinOnce(); rate.sleep(); } return 0; } ``` 以上就是Ego-Planner的代码框架,其中路径规划算法需要根据具体情况进行选择和实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值